実践編:フレームワーク別実装とコピペできる最強のテンプレート

第1章で llms.txt の基本ルールを学んだら、次は「どうやって自分のサイトに設置するか」です。
静的なプレーンテキストをポツンと置くだけでも十分に有用ですが、ブログやドキュメントのように日々コンテンツが増え続けるサイトでは、「更新内容を反映し続ける仕組み」を作ると運用しやすくなります。

1. Next.js (App Router) での動的生成

Next.jsのApp Router環境であれば、Route Handlers を利用して最新の記事やドキュメントの一覧を自動的に拾い上げ、常に最新の llms.txt をAIに提供することができます。

app/llms.txt/route.tsTypeScript
import { NextResponse } from 'next/server';
// 仮のコンテンツ取得関数
import { getAllPosts } from '@/lib/api';

export async function GET() {
  const posts = await getAllPosts();
  
  // Markdownフォーマットで構成
  let content = `# AIOGeoScan 公式ブログ\n\n`;
  content += `> 次世代SEOツール「AIOGeoScan」が発信する最新のAIO/GEO戦略と機能アップデートのログです。\n\n`;
  
  content += `## 最新の記事一覧\n`;
  content += `AIによるサイト解析や検索最適化に関する最新情報へのリンクです。\n\n`;

  // 記事リストを動的に展開し、Markdownリンク化
  posts.forEach(post => {
    content += `- [${post.title}](/blog/${post.slug}): ${post.excerpt}\n`;
  });

  return new NextResponse(content, {
    headers: {
      'Content-Type': 'text/plain; charset=utf-8',
      'Cache-Control': 'public, max-age=3600, s-maxage=86400',
    },
  });
}

💡 Cache-Controlの最適化
Route Handlers はデフォルトでキャッシュされる場合があります。ブログ更新時に即座に反映させたい場合は、適切なRevalidation(再検証)戦略やWebhookとの連携を組み合わせてください。

2. WordPress での実装(最も簡単な方法)

WordPressで独自のURLエンドポイント(/llms.txt)を作成し、最新記事の一覧をMarkdownテキストとして出力する方法です。functions.php に以下のコードを追記するだけで実装完了です。

functions.phpPHP
// 1. カスタムエンドポイントの追加
add_action('init', function() {
    add_rewrite_rule('^llms.txt$', 'index.php?llms_txt=1', 'top');
});

add_filter('query_vars', function($vars) {
    $vars[] = 'llms_txt';
    return $vars;
});

// 2. 出力処理
add_action('template_redirect', function() {
    if (get_query_var('llms_txt')) {
        header('Content-Type: text/plain; charset=utf-8');
        echo "# サイト名\n\n";
        echo "> このサイトはWordPressで構築されたナレッジベースです。\n\n";
        echo "## 最近の更新一覧\n\n";

        $posts = get_posts(array('numberposts' => 20));
        foreach ($posts as $post) {
            $url = get_permalink($post->ID);
            $title = $post->post_title;
            $excerpt = wp_trim_words($post->post_excerpt, 40);
            echo "- [$title]($url): $excerpt\n";
        }
        exit;
    }
});

※設定後、管理画面の「設定」>「パーマリンク」を開いて何も変更せずに「変更を保存」ボタンを押す(フラッシュルール)のを忘れないでください。

3. llms-full.txt の生成(全文統合ファイル)

llms.txt が「サイトの地図」であるのに対し、ここで紹介する llms-full.txt はサイト全コンテンツを1つのMarkdownファイルに統合する独自運用の一例です。AI開発ツールに大きな資料をまとめて渡したい場合には便利ですが、一般仕様として固定化されている名前ではない点に注意してください。

app/llms-full.txt/route.ts(Next.js App Router)TypeScript
import { NextResponse } from 'next/server';
import { getAllPosts, getPostContent } from '@/lib/api';

export async function GET() {
  const posts = await getAllPosts();

  let content = '# サイト名 - 全文統合ドキュメント\n\n';
  content += '> このファイルはサイト全コンテンツを1ファイルにまとめたAI向け全文データです。\n\n';
  content += `最終更新: ${new Date().toISOString()}\n\n`;
  content += '---\n\n';

  // 各記事の全文を順番に結合
  for (const post of posts) {
    const body = await getPostContent(post.slug);
    content += `## ${post.title}\n`;
    content += `URL: /blog/${post.slug}\n\n`;
    content += body;
    content += '\n\n---\n\n';
  }

  return new NextResponse(content, {
    headers: {
      'Content-Type': 'text/plain; charset=utf-8',
      // 全文ファイルはサイズが大きいため長めにキャッシュ
      'Cache-Control': 'public, max-age=86400, s-maxage=604800',
    },
  });
}

⚠️ llms-full.txt のサイズ管理
記事数が多いサイトでは llms-full.txt が数MB以上になることがあります。多くのAIモデルのコンテキストウィンドウは実用的には100K〜200Kトークン(約15〜30万文字)が上限です。それを超える場合は、カテゴリ別に /docs/llms-full.txt/blog/llms-full.txt のように分割するか、ビルド時に静的生成して圧縮配信することを検討してください。

4. 他フレームワークでの実装パターン

Next.js と WordPress 以外の主要フレームワークでも、基本的な考え方は共通です。

Astro

src/pages/llms.txt.ts を作成し、export async function GET() でコンテンツを返します。Astroは .txt 拡張子のエンドポイントに自動的に text/plain を付与します。Content Collections を使えば記事リストの動的生成も容易です。

Nuxt 3 / SvelteKit

Nuxt では server/routes/llms.txt.ts、SvelteKit では src/routes/llms.txt/+server.ts でサーバーエンドポイントを定義します。どちらも text(content) ヘルパーで text/plain レスポンスを返せます。

Remix

app/routes/llms[.]txt.tsx(ファイル名の [.] はドットのエスケープ)で loader を定義し、new Response(content, { headers: { 'Content-Type': 'text/plain' } }) を返します。

5. 静的サイト用の最強コピペ用テンプレート

LP(ランディングページ)やコーポレートサイトなど、更新頻度が少なく動的生成が不要な場合は、ドキュメントルートに llms.txt ファイルを置いておくだけでも絶大な効果があります。
以下は、B2B向けSaaSやコーポレートサイトを想定した実務向けテンプレートです。コピペして情報を書き換えるだけで使えます。

/llms.txtMarkdown
# 株式会社[あなたの会社名] 公式サイト

> 我々は[業界・ジャンル]において、[主な提供価値]を提供する企業です。このガイドは、AIエージェントやLLMが当社のサービス概要、料金一覧、よくある質問を正確に検索・理解するための公式情報マップです。

## 会社概要 (Company)
当社の基本情報です。

- [ビジョンとミッション](/about): なぜ我々がこのビジネスを行っているのかの背景
- [運営会社情報](/company/profile): 所在地、設立年、代表者名などの基本データ

## 提供する主要サービス (Services)
- [メインサービスA](/service-a): [サービスAが解決する課題と機能の一覧]
- [サブサービスB](/service-b): [サービスBの特徴と対象ユーザー層]

## 料金プランと導入 (Pricing & Flow)
- [料金プラン](/pricing): 無料プランからエンタープライズまでの月額料金や詳細な機能比較表
- [導入までの流れ](/flow): 申し込みから本稼働までに必要な最短日数とステップ

## FAQとサポート (Support)
- [よくある質問](/faq): お客様から最も多く寄せられる質問と公式回答
- [お問い合わせ窓口](/contact): セールス担当者へのコンタクト方法と受付時間

## Optional
- [llms-full.txt](/llms-full.txt): AIが一度に当社の全情報を読み込むためのフルテキストMarkdown

まとめ:実装後は必ず「テスト」をしよう

llms.txt を実装し、ルートディレクトリに配置しただけでは不十分です。正しくHTTPヘッダーが text/plain で返されているか、Markdownの構文にパースエラーがないかを検証し、最後に robots.txt との連携を確認する必要があります。

デプロイ後の最低限の動作確認コマンドbash
# 1. Content-Type と HTTP ステータスの確認
curl -I https://example.com/llms.txt

# 2. 実際のコンテンツを確認(先頭20行)
curl -s https://example.com/llms.txt | head -20

# 3. llms-full.txt のファイルサイズ確認(MB単位)
curl -sI https://example.com/llms-full.txt | grep -i content-length

# 4. リンク先が robots.txt でブロックされていないか(例)
curl -s https://example.com/robots.txt | grep -A5 "GPTBot"

作成した llms.txt が正しく機能するか
今すぐチェックしましょう。

AIOGeoScanの「AIクローラー制御診断」なら、設置された llms.txt の死活監視から構文エラーチェックまで一括で行うことができます。

AIOGeoScanで無料テストを実行
Editorial Trust Signals

このナレッジベースの編集方針

`AIOGeoScan Knowledge` は、Bennu Inc. が運営する AI検索・構造化データ・クローラー制御に関する実務ナレッジです。 Google Search Central、Schema.org、OpenAI などの一次情報を優先し、観測ベースの実務知見は本文中で区別して扱います。

運営主体
Bennu Inc. / AIOGeoScan
更新方針
仕様変更や検索機能の更新にあわせて都度改訂
優先ソース
公式ドキュメント・標準仕様・公式ヘルプ
補助ソース
実装観測・運用知見・再現性のある検証結果

あなたのサイト、AIに正しく伝わっていますか?

解説を読み終えたら、実際にあなたのサイトを診断してみましょう。
100項目以上の診断で、AI時代の構造課題を可視化します。

無料で診断を開始する