TL;DR: llms.txt は、LLMがサイトを効率よく理解するためのMarkdownファイル。robots.txtのAI版とも呼べる存在で、サイトルートに配置するだけでAIクローラーが重要ページを優先参照できるようになる。実装コストは低く、GEO(Generative Engine Optimization)の第一歩として今すぐ取り組める施策だ。
GEO×SEO統合シリーズ:本記事はGEO×SEO統合戦略シリーズの個別解説です。各施策を統合した全体ワークフローとKPI設計の全体像は統合戦略のハブ記事にまとめています。
はじめに:なぜ今 llms.txt が必要か
AIアシスタントの急速な普及により、ユーザーがGoogle検索ではなくChatGPTやClaudeに質問するケースが増えている。これらのLLMはWebをクローリングして情報を収集するが、通常のHTMLにはナビゲーション・広告・フッターといったノイズが混入しており、モデルが「本当に重要な情報」を見つけにくい状態になっている。
llms.txt はこの課題を解決するプロトコルだ。サイトが提供するコンテンツの構造・重要ページ・コンテキストをMarkdown形式でまとめ、LLMが効率よく理解できる「案内板」として機能する。
GEO(Generative Engine Optimization)の全体像については「GEO vs SEO 2026」で解説している。本記事では llms.txt の実装に特化して掘り下げる。
llms.txt とは何か:仕様の基礎
llms.txt は、fast.ai の創設者 Jeremy Howard が 2024年9月に提案したオープン仕様だ(公式仕様: llmstxt.org)。サイトルートに置く /llms.txt ファイルを通じて、LLMにサイトの重要情報を構造的に伝える。
robots.txt との違い
| 項目 | robots.txt | llms.txt |
|---|---|---|
| 目的 | クローラーのアクセス制御 | LLMへのコンテキスト提供 |
| 対象 | 検索エンジンbot全般 | LLMクローラー |
| フォーマット | 独自形式 | Markdown |
| 制御の方向 | アクセス禁止・許可 | 優先度・文脈の案内 |
| 必須性 | デファクト標準 | 任意(推奨) |
robots.txt がクローラーの「行動規制」なら、llms.txt は「読むべき地図」だ。両者は競合しない。
llms-full.txt との違い
llms.txt がページ一覧とURLの案内に留まるのに対し、llms-full.txt は各ページの全コンテンツを1ファイルに結合した拡張版だ。
- llms.txt: インデックス(数KB〜数十KB)
- llms-full.txt: 全文書(数MB単位になることも)
LLMのコンテキストウィンドウが限られている場面では llms.txt が優先参照される。ドキュメントサイトや大量のコンテンツを持つサービスでは両方の設置を推奨する。
llms.txt の標準フォーマット
公式GitHub(answerdotai/llms-txt) が定めるフォーマットは以下の通りだ。
# サイト名(必須)
> サイトの一行説明(引用ブロック形式・必須)
オプションの詳細説明(段落。サイトの用途・ターゲット読者など)
## セクション名(例: Docs, Blog, API)
- [ページタイトル](URL): 説明(オプション)
- [ページタイトル](URL): 説明
## Optional(オプション)
- [補足ページ](URL)
必須要素:
# サイト名: H1見出し> 説明文: 引用ブロック形式の一行説明
オプション要素:
- 詳細説明段落
## セクション名+ リンクリスト## Optionalセクション(優先度が低いページ)
実際の llms.txt ファイル例
以下は技術ブログ向けの実装例だ。
# Growth Lab
> AIとエンジニアリングの実践知識を届ける技術ブログ
日本語でAI開発・GEO・エンジニアリング組織設計を解説するブログです。
実務経験に基づいた具体的な実装例とベストプラクティスを中心に扱っています。
## GEO / コンテンツ設計
- [GEO vs SEO 2026](/articles/geo-vs-seo-2026): AI検索時代のコンテンツ最適化戦略
- [AIに引用される構造化データ設計](/articles/structured-data-for-ai-citation): FAQPageスキーマ等の実装ガイド
- [LLM引用の計測方法](/articles/measuring-llm-citations): AI引用数をトラッキングする手法
- [コンテンツ鮮度とAI検索](/articles/content-freshness-for-ai-search): 更新頻度がGEOに与える影響
- [Google AI Overviews 最適化](/articles/google-ai-overviews-optimization): SGEへの対応ガイド
## Optional
- [このブログについて](/about)
採用企業の実例
主要サービスがすでに llms.txt を設置している(いずれも公式ドキュメント)。
- Anthropic公式 llms.txt: APIドキュメントへのリンクを構造化
- Vercel公式 llms.txt: Next.js・Vercel製品ドキュメントを整理
- Next.js公式 llms.txt: フレームワーク全ドキュメントをセクション別に案内
Next.js での実装方法
Next.js での実装は3通りある。プロジェクトの規模・コンテンツの更新頻度に応じて選択しよう。
方法1: public/ ディレクトリに静的ファイルを配置(最もシンプル)
コンテンツが少なく、手動更新でよい場合はこれで十分だ。
# プロジェクトルートで実行
echo '# My Site\n\n> 説明文' > public/llms.txt
public/llms.txt に配置したファイルは、ビルド後に https://example.com/llms.txt で自動的に公開される。
方法2: App Router の route.ts で動的生成(推奨)
コンテンツが多く、ページ一覧を自動更新したい場合はこちらが適している。CMSや記事ファイルから動的にURLリストを生成できる。
// app/llms.txt/route.ts
import { NextResponse } from 'next/server'
// 記事一覧を取得する関数(実装に合わせて変更)
async function getPosts() {
// 例: ファイルシステムやCMSから取得
return [
{ title: 'GEO vs SEO 2026', slug: 'geo-vs-seo-2026', category: 'GEO' },
{ title: 'llms.txt 実装ガイド', slug: 'llms-txt-guide', category: 'GEO' },
]
}
export async function GET() {
const posts = await getPosts()
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL ?? 'https://example.com'
// カテゴリ別にグループ化
const grouped = posts.reduce<Record<string, typeof posts>>((acc, post) => {
const cat = post.category ?? 'その他'
if (!acc[cat]) acc[cat] = []
acc[cat].push(post)
return acc
}, {})
const lines = [
'# My Site',
'',
'> AIとエンジニアリングの実践知識を届ける技術ブログ',
'',
]
for (const [category, items] of Object.entries(grouped)) {
lines.push(`## ${category}`)
for (const item of items) {
lines.push(`- [${item.title}](${baseUrl}/${item.slug})`)
}
lines.push('')
}
return new NextResponse(lines.join('\n'), {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
})
}
方法3: next.config.js の rewrites でリダイレクト
既存の静的ファイルや外部URLにルーティングしたい場合は rewrites を使う。
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
async rewrites() {
return [
{
source: '/llms.txt',
destination: '/api/llms-txt', // または外部URL
},
]
},
}
module.exports = nextConfig
静的サイト(Hugo / Astro)での実装
Hugo
Hugo では layouts/_default/llms.txt にテンプレートを作成し、content/llms.txt.md をコンテンツファイルとして配置する方法が一般的だ。
content/
llms.txt.md ← front matter: outputs: [txt]
layouts/
_default/
single.txt ← テンプレート
Astro
Astro では src/pages/llms.txt.ts を作成するだけで対応できる。
// src/pages/llms.txt.ts
import type { APIRoute } from 'astro'
import { getCollection } from 'astro:content'
export const GET: APIRoute = async () => {
const posts = await getCollection('blog')
const lines = [
'# My Site',
'',
'> 技術ブログ',
'',
'## Blog',
...posts.map(p => `- [${p.data.title}](/${p.slug})`),
]
return new Response(lines.join('\n'), {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
})
}
llms.txt に書くべき内容・書くべきでない内容
AIに引用されやすいコンテンツを作るには、llms.txt 自体の品質も重要だ。詳細は「AIに引用される構造化データ設計」も参照してほしい。
書くべき内容:
- コアコンテンツページ(主要記事・ドキュメント)
- サイトの専門領域を示すページ
- 定期的に更新する最重要ページ
書くべきでない内容:
- ログインページ・管理画面
- 重複コンテンツやboilerpageページ
- 個人情報を含むページ
- 薄いコンテンツや未完成ページ
コンテンツの鮮度については「コンテンツ鮮度とAI検索」でも詳しく解説している。
効果測定と改善
llms.txt を設置した後は、AIからの引用がどう変化するかをモニタリングしよう。
LLM引用の具体的な計測方法は「LLM引用の計測方法」で解説している。また、AI生成回答への露出全般については「Google AI Overviews 最適化」が参考になる。
効果測定のポイント:
- llms.txt 設置前後でのブランド名引用数の変化
- AIアシスタントへのプロンプト実験(「〇〇について教えて」に自サイトが引用されるか)
- サーバーログでの
/llms.txtアクセス数確認(LLMクローラーの訪問頻度)
FAQ
Q1. llms.txt はどこに配置すべきですか?
サイトルート(https://example.com/llms.txt)が標準だ。サブドメインやサブパスでも機能するが、ルートへの配置が最も認識されやすい。Next.js の public/ ディレクトリか、App Router の route.ts で生成するのが推奨だ。
Q2. robots.txt と llms.txt の違いは何ですか?
robots.txt はクローラーの「アクセス制御」が目的で、クロールを許可・禁止する命令ファイルだ。一方 llms.txt は「コンテキスト提供」が目的で、LLMにサイトの構造・重要ページ・説明を伝えるガイドファイルだ。両者は競合しないため、両方設置することが推奨される。
Q3. llms-full.txt はどんなサイトに必要ですか?
ドキュメントサイト・APIリファレンス・技術ライブラリなど、LLMが詳細な技術情報を必要とするサイトに有効だ。ブログや一般的なメディアサイトは llms.txt のみで十分な場合が多い。なお、llms-full.txt はファイルサイズが大きくなるため、生成時はビルドパイプラインへの組み込みを推奨する。
Q4. Next.js で llms.txt を動的生成するメリットは?
記事・ページの追加・削除に合わせて自動更新できる点が最大のメリットだ。静的ファイルの手動管理と違い、CMSやファイルシステムから常に最新のページ一覧を反映できる。コンテンツが100件を超えるサイトでは動的生成を強く推奨する。
Q5. llms.txt を設置したら何が変わりますか?
即時的な変化は保証されないが、LLMクローラーがサイト構造を理解しやすくなり、AI生成回答での引用精度・頻度の改善が期待できる(経験則)。設置コストは低いため、GEO施策の最初のステップとして実施するのが合理的だ。
まとめ
llms.txt は実装コストが低く、GEO施策の入口として最適な施策だ。
- 仕様: llmstxt.org が公式。Markdownフォーマットでシンプル
- 実装: Next.js は
public/静的ファイルまたは App Router のroute.tsで動的生成 - コンテンツ: 重要ページのみ厳選して記載する
- 計測: 設置後は引用数の変化をモニタリングする
AIクローラー対策は llms.txt の設置で完結しない。構造化データ・コンテンツ鮮度・引用計測を組み合わせることで、GEOの効果が最大化される。
