robots.txtでAIクローラーを拒否・許可する書き方
robots.txtでGPTBotやClaudeBotなどのAIクローラーを拒否・許可する書き方を、コピーして使える例つきで解説します。検索用と学習用を分ける設定、パスの指定、WAFとの関係、確認方法も紹介します。
AIクローラーをrobots.txtで設定するときは、AIの会社ごとに分かれている「検索用」「学習用」「ユーザーの依頼による取得用」のクローラーを、名前を指定して別々のグループで書くのが基本です。 そのうえで、実際に公開されているrobots.txtと、WAFやCDNの設定を確認します。
各クローラーの役割はGPTBotとはとAIクローラー一覧で解説しています。この記事では、実際の書き方に絞って説明します。
robots.txtでできること、できないこと
robots.txtは、RFC 9309として標準化されている、クローラーへの「お願い」を書くファイルです。ルールを守るクローラーは従いますが、アクセスを防ぐ仕組みではありません。
- robots.txtは誰でも見られるため、拒否したパスも公開されます
- ルールを無視するクライアントもあります
- 公開したくない情報は、ログインやアクセス制限で守りましょう
例1:検索は許可し、学習は拒否する
AIの検索での表示は目指しつつ、AIの学習には使ってほしくない場合の設定です。
User-agent: OAI-SearchBot
Allow: /
User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: Claude-User
Allow: /
User-agent: ClaudeBot
Disallow: /
User-agent: PerplexityBot
Allow: /
User-agent: Perplexity-User
Allow: /
User-agent: Google-Extended
Disallow: /
User-agent: *
Allow: /
各社の説明で注意したい点は次のとおりです。
- OpenAI: ChatGPT-Userはユーザーの依頼による取得のため、robots.txtのルールが適用されない場合があるとしています
- Anthropic: ClaudeBot(学習用)、Claude-SearchBot(検索用)、Claude-User(ユーザーの依頼による取得)を、別々に設定できるとしています
- Perplexity: Perplexity-Userはユーザーの依頼による取得のため、通常はrobots.txtに従わないとしています
- Google: Google-Extendedは独立したクローラーではなく、Geminiの学習などへの利用を管理するための制御トークンです。この設定は、Google検索への表示や順位には影響しないとしています
例2:自動で巡回するAIクローラーをすべて拒否する
User-agent: OAI-SearchBot
Disallow: /
User-agent: GPTBot
Disallow: /
User-agent: Claude-SearchBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: PerplexityBot
Disallow: /
User-agent: Google-Extended
Disallow: /
この設定では、ChatGPTの検索やPerplexityの検索に表示されにくくなります。AIの回答で自社を紹介してほしい場合は、検索用のクローラー(OAI-SearchBot、Claude-SearchBot、PerplexityBot)まで拒否していないかを必ず確認しましょう。なお、ここに挙げた以外のクローラーには効きません。
例3:公開ページは許可し、管理画面などは拒否する
User-agent: OAI-SearchBot
Allow: /docs/
Allow: /blog/
Disallow: /account/
Disallow: /admin/
Disallow: /api/
User-agent: GPTBot
Allow: /docs/
Allow: /blog/
Disallow: /account/
Disallow: /admin/
Disallow: /api/
名前を指定したグループは、それぞれ独立して扱われます。「User-agent: *」に書いたルールが、名前を指定したグループにも自動で足されるわけではありません。必要なパスのルールは、それぞれのグループに書きましょう。
パスの指定のルール
RFC 9309では、パスはURLの先頭から照合され、より長く一致するルールが優先されます。AllowとDisallowが同じ長さで一致した場合は、Allowが優先されます。
User-agent: GPTBot
Disallow: /docs/
Allow: /docs/public/
この場合、/docs/private/ は拒否され、/docs/public/ は許可されます。パスは大文字と小文字を区別して扱いましょう。
ホストごとに設置する
robots.txtは、それが置かれたホスト(ドメイン)にだけ適用されます。https://example.co.jp/robots.txt のルールは、https://shop.example.co.jp には適用されません。サブドメインごとに設置して確認しましょう。
WordPressの場合、プラグインやテーマが自動でrobots.txtを出力していることがあります。サーバーにファイルを置いたつもりでも、実際には別の内容が表示されていないか確認が必要です。
公開されている内容を確認する
リポジトリやサーバーのファイルではなく、実際にクローラーが取得する内容を確認します。
curl -i https://example.co.jp/robots.txt
- ステータスが200になっているか
- テキスト形式で返っているか
- 書いたとおりのルールが表示されているか
- CDNのキャッシュで古い内容が残っていないか
- サブドメインでも同じように確認したか
robots.txtのAIクローラーチェッカーを使うと、URLを入れるだけで、主要なAIクローラーが許可されているか拒否されているかを確認できます。
WAFやボット対策も確認する
robots.txtで許可していても、WAFやボット対策の設定でアクセスが止まることがあります。クローラーが403や429のエラーを受け取っている場合は、ボットのスコア、レート制限、国ごとの制限、古いIPアドレスの許可リストなどを確認しましょう。Cloudflareを使っている場合はCloudflareがChatGPTをブロックしていないか確認する方法も参考になります。
WAFでクローラーを例外として許可する場合は、ユーザーエージェントの名前だけでなく、各社が公開しているIPアドレスの一覧でも確認しましょう。
GPTBotだけ許可して、ほかのAIボットを拒否する
GPTBotだけを許可して、ほかのAIボットを拒否するには、GPTBotに「Allow: /」のグループを書き、拒否したいボットごとに「Disallow: /」のグループを書きます。次の例は、GPTBotを許可し、名前を挙げたものを拒否します。AIクローラーのすべてを網羅した一覧ではありません。
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: PerplexityBot
Disallow: /
User-agent: Bytespider
Disallow: /
User-agent: Google-Extended
Disallow: /
「User-agent: 」のルールは、自分の名前のグループがないボットに適用されます。robots.txtの標準(RFC 9309)では、名前が一致するグループがあれば、そちらが「」のグループより優先されます。「*」の制限は引き継がれないので、必要なパスの制限は、名前を指定したグループの中にも書いておきましょう。
Googleの説明では、Google-Extendedは別のクローラーではなく制御トークンです。このルールは、クロールした内容の特定のAIへの利用を管理するもので、Google検索をブロックするものではありません。
OpenAIの説明では、GPTBotは学習に使われる可能性のある内容を集め、検索はOAI-SearchBotが担います。GPTBotを許可しても、引用される保証にはなりません。OpenAIのクローラーの違いを確認し、例を今のルールと合わせ、robots.txtのAIクローラーチェッカーで結果を確かめましょう。robots.txtはアクセスの希望を示すもので、ファイアウォールのように止めるものではありません。
GPTBotはrobots.txtのcrawl-delayに対応しているか
OpenAIの説明には、GPTBotがcrawl-delayに対応しているという記載はありません。そのため、アクセスの量を抑えるのにcrawl-delayに頼らないようにしましょう。GPTBotのアクセスの間隔を空けたいなら、サーバーやCDNでレート制限をかけ、処理できる量を超えたときは429や503を返します。
OpenAIの説明では、GPTBotにはユーザーエージェントの名前と、公開されたIPアドレスの範囲があります。クローラーごとの方針を適用する前に、アクセスをその範囲で確認しましょう。ユーザーエージェントの文字列は写せます。制限の値は、どこでも安全な間隔があると考えず、自社のサイトの処理能力と実際の負荷から決めます。
HTTP 429は、リクエストが多すぎることを示します。HTTP 503は、過負荷やメンテナンスなどで一時的に使えないことを示します。Retry-Afterのヘッダーで再試行の時期を伝えられますが、どちらのステータスも、GPTBotの決まった再試行の予定を示すものではありません。制限は自社のサーバーやCDNでかけ続けましょう。
変更のあとは、サーバーやCDNのログで、アクセスの数とレスポンスのコードを比べます。robots.txtのAIクローラーチェッカーが確認するのはrobots.txtのアクセスのルールで、実際のアクセスの頻度ではありません。アクセスの確認と負荷の監視は分けて考え、複数のクローラーに同じ方針を当てはめる前にOpenAIのクローラーの違いも確認しましょう。
拒否したGPTBotを許可し直す方法
一度拒否したGPTBotを許可し直すには、GPTBotのグループを「Allow: /」に変え、GPTBotへの食い違う制限を外します。あわせて、CDN、WAF、サーバーの設定でのブロックも確認します。robots.txtの許可で、それらのブロックを上書きすることはできません。
User-agent: GPTBot
Allow: /
ほかのルールで許可されているなら、拒否していたGPTBotのグループを消す方法もあります。ただし、「User-agent: 」でサイト全体を拒否したままなら、名前を指定したグループを消すと、GPTBotはその「」のルールで拒否されたままになります。GPTBotに当てはまるすべてのグループと、クロールしてほしいパスの制限を確認しましょう。
公開しているホスト名で「/robots.txt」を取得し、変更したルールが返ってくるかを確認します。CDNに古いキャッシュが残っていないか、別のホスト名にリダイレクトしていないか、編集したファイルとは別に、サーバーが作ったファイルが返っていないかも確認します。そのうえで、公開されているルールをrobots.txtのAIクローラーチェッカーで確かめます。
セキュリティのルールとサーバーのログは別に確認します。OpenAIの説明にあるGPTBotのIPアドレスの範囲で、そのアクセスを見分けられます。チェッカーの結果は、ファイアウォールがそのアクセスを通している証拠にはなりません。
クロールの変化はすぐには起きず、GPTBotが再びクロールする時期の保証もありません。許可しても、訪問が予定されたり、回答に含まれることが保証されたりするわけではありません。学習のためのアクセスと検索のためのアクセスを別に判断する理由は、OpenAIのクローラーの違いで解説しています。
まとめ
AIクローラーのrobots.txtは、検索用、学習用、ユーザーの依頼による取得用を分けて、名前を指定したグループで書きます。AIの回答で紹介されたいなら、検索用のクローラーは拒否しないことが前提です。設定したら、公開されている内容とWAFの設定まで確認しましょう。
SearchSeal は、クローラーのアクセスは記録しません。登録した質問について、ChatGPTなどのAIの回答と引用元を毎日保存するので、robots.txtの変更のあとに、回答の変化を確認できます。
よくある質問
robots.txtでAIの学習だけを拒否できますか?
できます。GPTBot、ClaudeBot、Google-Extendedなど学習用の名前だけをDisallowにし、OAI-SearchBotなど検索用の名前はAllowにします。ただし、ルールに従うかどうかは各クローラー次第です。
Google-Extendedを拒否するとGoogle検索の順位は下がりますか?
Googleは、Google-Extendedの設定はGoogle検索への表示や順位に影響しないと説明しています。
GPTBotはcrawl-delayに従いますか?
OpenAIの説明には、GPTBotがcrawl-delayに対応しているという記載はありません。アクセスの量を抑えたいなら、サーバーやCDNでレート制限をかけ、超えたときは429や503を返しましょう。
robots.txtがない場合はどうなりますか?
RFC 9309では、robots.txtが404などで見つからない場合、クローラーはサイトにアクセスしてよいとされています。意図を明確にするために、ファイルを用意しておくのがおすすめです。