Next.jsのllms.txt
ファーストパーティの規約は(まだ)ない
Next.jsはrobots.txtとsitemap.xmlのメタデータファイル規約を備えています — app/robots.tsから関数をエクスポートすれば、フレームワークがファイルを配信します。llms.txtにはそのような規約が存在しません(オープンな機能リクエストがあります: vercel/next.jsディスカッション#80692)。自分で配線します。2つのパターン、どちらも簡単です:
パターン1: 静的ファイル
llms.txtをpublic/に置きます。Next.jsはそこにあるものをルートで配信するので、public/llms.txt → yoursite.com/llms.txt。以上です。
主要ページがめったに変わらない場合の正解です。リスクはドリフト: ファイルはサイトがかつて何だったかを語ります。
パターン2: route handler
動くコンテンツ — ドキュメント、商品、投稿 — には、ページと同じ真実の源からファイルを生成します:
// app/llms.txt/route.ts
import { getDocs } from '@/lib/content';
export async function GET() {
const docs = await getDocs();
const body = [
'# Acme',
'',
'> Acmeは開発者向けウィジェットAPIです。',
'',
'## ドキュメント',
...docs.map(d => `- [${d.title}](/docs/${d.slug}): ${d.summary}`),
'',
'## 機械可読サーフェス',
'- [OpenAPI仕様](/openapi.json): 完全なAPIスキーマ',
].join('\n');
return new Response(body, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
}
コンテンツソースが重い場合はexport const revalidate = 3600を追加します。全文コンパニオンが欲しければ、同じパターンでllms-full.txtも配信できます。
何を含めるべきか
網羅性よりキュレーション: サイトが何か(blockquote 1つ)、エージェントが起点とすべき十数ページと1行要約、そして機械サーフェスへのクロスリファレンス — OpenAPI仕様とMCPエンドポイントはファイル中で最も価値ある行です。フォーマットの詳細はllms.txtガイドへ。
検証する
デプロイに対してllms.txtバリデーターを実行してください — 存在、パース可能性、ナビゲート可能な構造。あるいはサイトをスキャンしてエージェント対応度の全体像を確認しましょう。
よくある質問
Next.jsにはrobots.tsのようなllms.tsメタデータ規約がありますか?
ありません。メタデータファイル規約はrobots.txt、sitemap.xml、アイコン、OG画像をカバーしますが、llms.txtは対象外です。機能リクエストはオープン中。それまではpublic/llms.txtかroute handlerを使ってください。
route handlerは特別なContent-Typeを設定すべきですか?
UTF-8のtext/plain(またはtext/markdown)で配信してください。エージェントは本文からmarkdown構造をパースします。重要なのは、ルートがコンテンツを直接200で返すことです。
静的ファイルとroute handler、どちらにすべきですか?
主要ページが安定しているなら静的。ファイルに変化するものを載せるならroute handler — ドキュメントとスナップショットの違いです。