robots.txt で AI ボットを許可する・ブロックする
たいていのサイトはこれを一度、しかも雑に決めて、二度と見直しません。学習されるのが怖くて全部ブロックし、客を連れてくるトラフィックまで巻き添えにするか、何も設定せずクローラーの都合のいい解釈に任せるかのどちらかです。
まともな立場は三つあります。それぞれのファイルと、それを台無しにする間違いを並べます。
まず、すべてを分ける区別
AI 企業が動かしているエージェントは二種類あり、両者は交換できません。
クローラーは自分の都合でページをまとめて集めます。目的はたいてい学習かインデックスです: GPTBot、ClaudeBot、PerplexityBot、CCBot、Bytespider、Google-Extended、Applebot-Extended。
都度取得のフェッチャーは、いま誰かがそのページについて質問したから一枚だけ取りに来ます: ChatGPT-User、Claude-User、Perplexity-User。このリクエストで学習している人はいません。あなたについての答えを待っている人がいるだけです。
前者を止めるのは自社コンテンツをめぐる経営判断です。後者を止めるのは、URL を打ち込んだ訪問者を追い返すのに近い。世に出回る「AI は全部ブロックしろ」という助言は、この二つを区別しません。
ケース1 — 通す
見つけてほしいもの全般にとっての正しい既定値です。ドキュメント、出典として名前を出してほしい媒体、勧めてほしい事業。
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /cart/
Disallow: /*?session=
Content-Signal: search=yes, ai-input=yes, ai-train=no
Sitemap: https://example.jp/sitemap.xml
読めば書いてあるとおりです。入っていい、インデックスしていい、回答に使っていい、学習には使うな。この立場は robots.txt だけでは表現できません。後ろの Content-Signal の節を参照してください。
ケース2 — 回答は可、学習は不可
多くの企業が本当に望んでいるのはこれで、そして正しく設定できているところはほとんどありません。
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: Bytespider
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: Claude-User
Allow: /
User-agent: Perplexity-User
Allow: /
User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=no
Sitemap: https://example.jp/sitemap.xml
このファイルについて二点。Google-Extended が握っているのは Gemini の学習であって Google 検索ではありません。ブロックしても検索順位には響きません。Applebot-Extended も同じ関係で、Siri と Spotlight を支える Applebot とは別に Apple Intelligence 向けです。
ケース3 — AI を完全に締め出す
有料アーカイブ、ライセンス素材、アクセス自体を売っているものには筋が通ります。
User-agent: GPTBot
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: ClaudeBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: CCBot
User-agent: Bytespider
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: Amazonbot
User-agent: meta-externalagent
Disallow: /
User-agent: *
Allow: /
Content-Signal: search=no, ai-input=no, ai-train=no
Sitemap: https://example.jp/sitemap.xml
User-agent を積み重ねると、下に続くルールを共有します。これは仕様どおりで、十四個のブロックを別々に書くよりずっと保守が楽です。
選ぶ前に代償を把握してください。AI の回答からあなたは消えます。誰かがアシスタントに業界のことを尋ねれば、名前が挙がるのは競合で、あなたではありません。
よくある間違い
適用されるのは最も具体的なグループだけです。 自分の名前を見つけたクローラーは User-agent: * を丸ごと無視します。つまり次の書き方は狙いどおりに働きません。
User-agent: *
Disallow: /private/
User-agent: GPTBot
Disallow: /
GPTBot はすべてブロックされますが、ほかのボットは * のグループしか読みません。しかも後日 GPTBot の下に Allow を足すと、そのグループは /private/ に触れていないので、/private/ は GPTBot に対して無防備になります。
空行はグループを区切ります。 グループの途中の空行はそこでグループを終わらせます。その後ろの行は、次の User-agent が現れるまで誰のものでもありません。
Disallow: の後ろに何もなければ全許可です。 Disallow: / は全拒否。開いた扉と閉じた扉の差が一文字です。
robots.txt はアクセス制御ではありません。 行儀のいいクローラーが尊重してくれるお願いです。無視するスクレイパーはこれからも無視します。読まれては困るものに必要なのは認証であって、ディレクティブではありません。
Crawl-delay は AI クローラーにほぼ無視されます。 負荷が問題なら、エッジでレート制限をかけてください。
Content-Signal — 可否だけでなく、用途を言う
robots.txt が答えるのは一つの問いだけです。取得していいか。「インデックスはしていい、学習はするな」と言う手段は用意されていません。多くのサイトの本音はまさにそこにあるのに。
Content-Signal はその層を、独立した三つのシグナルで足します。
Content-Signal: search=yes, ai-input=yes, ai-train=no
search— 検索インデックスに載せてよいかai-input— 出典を示したうえで回答の材料に使ってよいかai-train— モデルの学習に使ってよいか
上のように robots.txt に書けますし、すべてのレスポンスに HTTP ヘッダーとして載せることもできます。うちはそうしています。誰かが従う義務を負う標準ではなく、まだ若い慣習です。それでも一行で済み、機械が読め、Disallow では言えない意図を言えます。
自分のものが届いているか確かめる
ファイルを書くことと、配信できていることは別です。
curl -s https://example.jp/robots.txt
curl -sI https://example.jp/robots.txt | grep -i "server\|cf-cache-status"
二つ目のコマンドは見た目より重要です。自前の robots.txt を置かないまま CDN の後ろにいると、書いた覚えのないファイルで CDN が代わりに応答することがあります。もっともらしい 200 で、中身にあなたのルールは一つもなく、sitemap もありません。うちのはまさにそれを何か月も続けていて、その裏でオリジンは 404 を返していました。