llms.txtと構造化データを実装した|まず分かったのは「AI経由の流入が0」という事実だった
ChatGPTやPerplexityから自分のサイトに人が来ているか、測ったことはありますか。実装より先に測定を入れたところ、答えは0でした。何をどう実装し、どう測っているかを実データで書きます。
結論:実装より先に「測れる状態」を作るべきだった
LLMO(AIに引用されるための最適化)が話題になっています。llms.txtを置こう、構造化データを入れよう、という記事は増えました。
しかし「それで実際に流入が増えたか」を測っている記事をほとんど見ません。
自分のサイトで測ってみました。結果はこうです。
| 期間 | AI経由の流入 |
|---|---|
| 実装前(28日間) | 0 |
| 実装後(5日間) | 0 |
現時点では何も変わっていません。
ただ、これは失敗の報告ではありません。0という基準値が取れたこと自体が成果でした。基準がなければ、あとから増えても「増えた」と言えません。
そもそもLLMOとは何か
検索エンジン向けの最適化(SEO)とは、目的地が違います。
| SEO | LLMO | |
|---|---|---|
| 相手 | 検索エンジン | ChatGPT・Perplexity等のAI |
| ゴール | 検索結果の上位に出る | 回答の中で引用される |
| 流入のしかた | 検索結果をクリック | AIの回答内のリンクをクリック |
重要なのは、AIは「順位」で引用先を選んでいるわけではないという点です。回答を作るときに参照しやすい形になっているかどうかが効きます。
だから対策も変わります。キーワードを詰め込むのではなく、事実を引用しやすい形で置くことが中心になります。
実装したもの
1. llms.txt
サイトのルートに置くテキストファイルです。AIに向けて、このサイトが何なのかを短くまとめます。
# サイト名
> サイトの説明を1行で
## このサイトについて
- 運営者: ...
- 最終更新: 2026-08-25
## 編集方針
- 実際に利用したツールのみを扱う
- 料金は検証日を明記する
## 記事一覧
- [記事タイトル](URL): 要約(公開日 / 検証日)
箇条書きで、短い断定文にするのがポイントです。長い散文はAIが要約しづらくなります。
当サイトでは、記事を追加すると自動でllms.txtが再生成されるようにしています。手で更新する形にすると必ず古くなるためです。
2. 構造化データ
各ページに JSON-LD で意味を明示します。記事なら BlogPosting、著者なら Person、Q&Aなら FAQPage です。
FAQの構造化データについては、実装方針を決めました。 ページ本文のFAQ部分から自動で抽出する形にしています。
理由は単純で、ページに書いていない内容をマークアップしないためです。設定ファイルにQ&Aを持たせる方式だと、本文と構造化データがズレます。ズレたまま公開すると、検索エンジンからはスパム的な実装に見えます。
3. robots.txt でAIクローラーを許可する
ここが一番の落とし穴でした。後述します。
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
どう測るか(ここが本題)
実装しても、測れなければ意味がありません。
GA4で参照元(session source)を見ます。 AI経由の流入は、こういうドメインから来ます。
chatgpt.com/chat.openai.comperplexity.aiclaude.aicopilot.microsoft.comgemini.google.com
当サイトでは、週次でデータを取得するスクリプトにこの判定を組み込んでいます。
AI_SOURCES = ["chatgpt.com", "chat.openai.com", "perplexity.ai",
"claude.ai", "copilot.microsoft.com", "gemini.google.com"]
ai = sum(s["sessions"] for s in sources
if any(a in s["sessionSource"] for a in AI_SOURCES))
これで毎週「AI経由が何セッションか」が自動で出ます。0なら0と表示されるようにしてあるのが大事で、何も表示されないと「壊れているのか、まだ0なのか」が分かりません。
つまずいた点
robots.txt で個別のUser-agentを書くと、共通のDisallowが効かない
これが一番危険な落とし穴でした。
robots.txtは、マッチしたUser-agentブロックだけが適用されます。 * に書いたルールは継承されません。
つまり、こう書くと事故ります。
User-agent: *
Disallow: /private/
User-agent: GPTBot
Allow: /
この場合、GPTBotには /private/ の禁止が効きません。 * のブロックを読まないからです。
正しくは、全ブロックに同じDisallowを書きます。
User-agent: *
Disallow: /private/
Allow: /
User-agent: GPTBot
Disallow: /private/
Allow: /
AIクローラーを個別に許可しようとして、うっかり非公開領域まで開放してしまう——という事故が起こりうる場所です。
構造化データを手で書くと必ずズレる
ページを更新するたびに、構造化データも手で直す運用は破綻します。
当サイトでは、HTMLの中に決まったマーカーを置き、その中身を生成スクリプトが毎回書き換える方式にしました。手で触るのは設定ファイルだけです。
生成は何度実行しても同じ結果になるようにしてあります。差分が出るときだけ変更が入ったと分かるので、意図しない変更に気づけます。
効果はすぐには出ない
当然ですが、実装した翌日にAIが引用してくれるわけではありません。
そもそもAIがサイトの存在を知る必要があります。 新しいサイトなら、まず通常のクロールでインデックスされるところからです。
llms.txtを置いたから引用される、という因果はありません。 引用されやすい形に整えておく、という準備でしかないと考えています。
現時点で言えること・言えないこと
正直に書きます。
言えること
- AI経由の流入を測れる状態になった
- 実装前の基準値が0だと確定した
- robots.txtの落とし穴を踏まずに済む形にできた
言えないこと
- llms.txtに効果があるかどうか
- 構造化データがAIの引用にどれだけ効くか
- 何週間で変化が出るか
効果があったと書いている記事を見かけたら、測定方法と期間を確認したほうがいいと思います。 少なくとも自分の環境では、まだ何も動いていません。
よくある質問
llms.txtを設置すると検索順位は上がりますか?
llms.txtは検索エンジンの順位を上げるためのものではありません。AIが回答を作るときにサイトの情報を参照しやすくするためのファイルです。検索順位への直接的な影響は確認されていません。
AI経由の流入はどうやって測れますか?
GA4の参照元を見ます。chatgpt.com、perplexity.ai、claude.ai、copilot.microsoft.com、gemini.google.com などからのセッションを集計すると、AI経由の流入が分かります。0であっても0と記録しておくことで、後から変化を判断できます。
robots.txtでAIクローラーを個別に許可するとき注意することは?
robots.txtはマッチしたUser-agentブロックのみが適用され、アスタリスクに書いたルールは継承されません。個別のUser-agentブロックを追加する場合は、そのブロックにも同じDisallowを書く必要があります。書き忘れると非公開領域が開放されます。
まとめ
LLMOで最初にやるべきは、実装ではなく測定でした。
- AI経由の流入をGA4で集計できるようにする
- 実装前の数字を記録しておく
- そのうえで llms.txt・構造化データ・robots.txt を整える
いま自分のサイトのAI経由の流入は0です。この0を記録できたことが、今回の一番の成果だと思っています。増えたときに、初めて「増えた」と言えるからです。
数字が動いたら、この記事を更新します。