EP.01 で の概要を扱いました。本記事では実装の詳細を、3 サイト形態別に深掘りします。
1. llms.txt の基本構造 (おさらい)
llms.txt のフォーマット
Markdown
# サイトタイトル
> 1〜3 行のサイト要約
任意で背景説明を 1 段落
## セクション 1
- [タイトル](URL): 説明- [タイトル](URL): 説明
## セクション 2
- [タイトル](URL): 説明
## Optional
- [タイトル](URL): 補助情報2. サイト形態別の書き分け
| サイト形態 | 重視するセクション | ボリューム目安 |
|---|---|---|
| コーポレートサイト | サービス / 事例 / 会社情報 | 30-50 リンク |
| B2B SaaS / プロダクト | 機能 / ドキュメント / API | 100-300 リンク |
| メディア / ブログ | 記事一覧 / シリーズ | 本数次第 (1000+ も可) |
| EC サイト | 商品カテゴリ / 売れ筋 / 会社情報 | 100-500 リンク |
3. Next.js (App Router) での自動生成
src/app/llms.txt/route.ts
TypeScript
import { ARTICLES, SERIES_LIST } from "@/data/blog";
const BASE = "https://example.com";
export const dynamic = "force-static";
export async function GET() { const lines: string[] = []; lines.push("# サイト名"); lines.push(""); lines.push("> 1 行サイト要約"); lines.push(""); lines.push("## 主要ページ"); lines.push(""); lines.push(`- [トップ](${BASE}): 会社概要`); lines.push(`- [サービス](${BASE}/services): 提供サービス`); lines.push(""); lines.push("## ブログ"); lines.push(""); for (const a of ARTICLES) { lines.push(`- [${a.title}](${BASE}/blog/${a.slug}): ${a.excerpt}`); } return new Response(lines.join("\n"), { headers: { "Content-Type": "text/plain; charset=utf-8" }, });}4. WordPress での実装
functions.php に追加
PHP
add_action('init', function() { if ($_SERVER['REQUEST_URI'] === '/llms.txt') { header('Content-Type: text/plain; charset=utf-8'); echo "# " . get_bloginfo('name') . "\n\n"; echo "> " . get_bloginfo('description') . "\n\n"; echo "## 最新記事\n\n"; $posts = get_posts(['posts_per_page' => 50]); foreach ($posts as $p) { echo "- [" . $p->post_title . "](" . get_permalink($p) . "): " . wp_trim_words($p->post_excerpt, 30) . "\n"; } exit; }});5. 静的サイト (Hugo / Astro 等)
- Hugo: `layouts/index.llms.txt` をテンプレで作成 → `hugo` でビルド時に生成
- Astro: `src/pages/llms.txt.ts` で動的生成、ビルド時に静的化
- Jekyll: `_layouts/llms.txt.liquid` でテンプレ作成
- Gatsby: `gatsby-node.js` の createPages で生成
6. llms-full.txt の使い分け
| 項目 | llms.txt | llms-full.txt |
|---|---|---|
| 内容 | 見出し+リンク+短い説明 | 本文を Markdown で結合 |
| サイズ | 数 KB-数百 KB | 数 MB-数十 MB |
| 用途 | サイト構造の伝達 | 記事本体の AI 学習素材提供 |
| 実装難度 | 低 (1 時間) | 中 (本文クレンジングが必要) |
| 配置 | /llms.txt | /llms-full.txt |
7. 検証方法
- `curl https://example.com/llms.txt` で plain text が返ることを確認
- `curl -I` で `Content-Type: text/plain` を確認
- Markdown の構文チェック: 通常の MD パーサで読めることを確認
- サイズ: 1 MB を超えるとクローラがタイムアウトする可能性、CDN 配信を検討
- コミュニティリスト: https://llmstxt.org/ には実装サイトのディレクトリがある
8. 次の話
EP.03 では 構造化データ () 完全ガイド に進みます。Article / FAQPage / HowTo / Person 等の使い分けと、AI 検索エンジンが特に好む形式を扱います。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。