AI クローラー:GPTBot・ClaudeBot の訪問を実測し、robots.txt と nginx でブロックする設定

AIクローラーは、AI企業がモデルの学習やAI検索、ユーザーの質問への回答のためにWebページを収集するボットです。Nginx + Apache構成のサーバーにこれらのボットがどれだけ訪れるかを確かめるため、オリジンサーバーのアクセスログ14日分のUAを各社が公開しているIPレンジと照合した結果、公式レンジからのリクエストは1万8,605件で、robots.txtとnginxでブロックまたは許可する設定を公式ドキュメントに基づいてまとめました。
期間は2026年10月4日から17日までで、前段のキャッシュが応答してオリジンサーバーまで来なかったリクエストと、本当のIPが記録されなかったリクエストは数字に含まれていません。
1️⃣ AIクローラーを見分ける:アクセスログのUAと公開IPレンジ
ログにGPTBotとして記録されたリクエストが、すべてOpenAIから来たわけではありません。UAはリクエストする側が自分で書いて送る文字なので、誰でもGPTBotやClaudeBotの名前を付けてリクエストできます。
そこで、まずUAでボット名ごとのリクエスト数を数え、各社が公開しているIPレンジと照合する順番で進めます。以下は1日分のログでAIボットの名前を数えた結果です。
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/名前の後ろに[/]を付けて数えると、Claude-SearchBotのUA内にある連絡先アドレスclaudebot@のような名前ではない文字が除かれ、大文字・小文字が違って記録された名前は別に集計されます。続いて、GPTBotのリクエストがどのIPから来たかを最初の列で確認します。
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xCDNやプロキシを経由したリクエストは最初の列に中継サーバーのアドレスが記録されるため、そうした行はログの末尾のX-Forwarded-For欄のアドレスで照合します。OpenAIはGPTBotのIPレンジをJSONファイルで公開しています。
curl -s https://openai.com/gptbot.json -o gptbot.jsonダウンロードしたレンジファイルにIPが含まれるかは、Pythonの標準モジュールipaddressで確認します。
# inrange.py — JSONのレンジファイルにIPが含まれるか確認
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')レンジファイル名の後ろに、確認するIPを続けて入れます。
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUT2,524件を送ったIPは公開レンジの中にあり、12件を送ったIPはレンジの外でした。Anthropic、Perplexity、Apple、Common Crawl、Google、Bingも同じ形式のレンジファイルを公開しており、Amazonbotは逆引きDNSがcrawl.amazonbot.amazonで終わるかどうかで確認しました。空港の出入国審査が、搭乗券の名前ではなくパスポートを照合するのと同じです。
14日分をこうして照合した結果、70個のIPがGPTBot、ClaudeBot、Googlebotなど23のボット名を入れ替えながら使い、4万8,041件のリクエストを送っていて、そのうち57%は.phpや.envのような脆弱性を探すURLでした。Google-Extendedの名前を付けたリクエスト809件もすべてこの集団で、Googleのドキュメントによると、Google-ExtendedはHTTPリクエストで使うUAのない、robots.txt専用のトークンです。
2️⃣ UA別の訪問数:14日間の実測と週ごとの推移
下の表は10月4日から17日までの14日間のリクエスト数です。公開レンジがあるボットはレンジ内のリクエストだけを数え、レンジを照合しなかったボットはなりすまし集団を除いたUA基準で数えました。
| ボット | 会社 | 14日間のリクエスト | 確認方法 | なりすまし集団 |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | 公開IPレンジ | 2,387 |
| PerplexityBot | Perplexity | 3,406 | 公開IPレンジ | 2,262 |
| GPTBot | OpenAI | 2,546 | 公開IPレンジ | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | 公開IPレンジ | 2,347 |
| ChatGPT-User | OpenAI | 334 | 公開IPレンジ | 2,409 |
| Applebot | Apple | 330 | 公開IPレンジ | 2,372 |
| CCBot | Common Crawl | 275 | 公開IPレンジ | 2,275 |
| Claude-User | Anthropic | 10 | 公開IPレンジ | 2,192 |
| Claude-SearchBot | Anthropic | 0 | 公開IPレンジ | 2,297 |
| Perplexity-User | Perplexity | 0 | 公開IPレンジ | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA・逆引きDNS | 2,379 |
| Googlebot(比較用) | 10,545 | 公開IPレンジ | 3,951 | |
| bingbot(比較用) | Microsoft | 13,477 | 公開IPレンジ | 1,551 |
公開レンジで確認されたAIクローラーのうち、ClaudeBotが1万305件で最も多く、PerplexityBotの3,406件とGPTBotの2,546件が続きました。Claude-SearchBotとPerplexity-Userは公開レンジからのリクエストが0件で、同じ名前のリクエストはすべてなりすまし集団から来ていました。
なりすましを除いた後も残る問題は、レンジを照合しなかったボットです。Meta-ExternalAgentはUA基準で1万4,384件と最も多かったものの、確認したMetaのクローラー文書にはIPレンジの一覧がなく、UAだけで集計しました。
週単位で見ると、GPTBotは12件から3,383件の間を上下し、ClaudeBotは5週すべてで6,930〜1万217件の範囲にとどまりました。
3️⃣ どのURLを取っていくか:URLの形と応答コード
AIクローラーが持っていくのは記事本文だけではありません。14日間でMeta-ExternalAgentのリクエストの21%は画像で、公開レンジのGPTBotはRSSフィードを476回、ClaudeBotはサイトマップを314回リクエストしました。
他の言語版のURLもあわせて収集しており、公開レンジ基準でClaudeBotのリクエスト1,111件とGPTBotのリクエスト436件が他の言語版の記事でした。応答コードは1日分のログからすぐに数えられます。
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 4041日分でも301が3分の1近くになり、14日間で公開レンジのClaudeBotのリクエスト1万305件のうち5,915件(57%)が301でした。そのうち4,736件はURLの末尾に[/]がないリクエストで、WordPressが[/]を付けたURLへ301応答を返したため、同じ記事がもう一度リクエストされることになりました。
4️⃣ robots.txtの設定:学習用と検索用のトークン
robots.txtは自動で収集する学習用・検索用のボットを扱うのには向いていますが、ユーザーが質問したときにページを取ってくるボットには向いていません。OpenAIとPerplexityの文書は、ChatGPT-UserとPerplexity-Userのリクエストにはrobots.txtのルールが適用されないことがあると案内しています。
各社のトークンは用途ごとに分かれており、OpenAIの文書によると、一つのトークンをブロックしても他のトークンの設定には影響しません。以下は各社の公式文書で確認したトークンです。
| robots.txtトークン | 会社 | 用途 | ブロックすると(公式文書) |
|---|---|---|---|
| GPTBot | OpenAI | モデル学習用の収集 | 学習に使わないでという合図 |
| OAI-SearchBot | OpenAI | ChatGPT検索 | ChatGPT検索の回答から除外(移動リンクとしては表示されることがある) |
| ChatGPT-User | OpenAI | ユーザーリクエスト | robots.txtのルールが適用されないことがある |
| ClaudeBot | Anthropic | モデル学習用の収集 | 以後の資料を学習データから除外 |
| Claude-SearchBot | Anthropic | 検索品質の改善 | 検索結果での表示が減ることがある |
| Claude-User | Anthropic | ユーザーリクエスト | ユーザーの質問でページを取ってこない |
| PerplexityBot | Perplexity | 検索(学習ではない) | 検索結果から除外 |
| Perplexity-User | Perplexity | ユーザーリクエスト | おおむねrobots.txtに従わない |
| Google-Extended | Geminiの学習・グラウンディング | Google検索の表示・順位には影響なし | |
| Applebot-Extended | Apple | 基盤モデルの学習 | Appleの検索での表示には影響なし |
| meta-externalagent | Meta | AIモデルの学習など | Disallowでブロック(文書の例) |
Google-ExtendedとApplebot-Extendedは別に収集するボットではなく、robots.txtでだけ使うトークンです。収集は既存のGoogle・Appleのクローラーが行い、このトークンは収集した内容をAIモデルの学習に使うかどうかだけを決めます。
学習用の収集だけを拒否してAI検索での表示は残すrobots.txtは次のとおりで、OpenAI・Perplexity・Metaの文書は、変更が反映されるまで最大24時間かかると案内しています。
# 学習用の収集を拒否
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# AI検索用のボットは許可
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /Nginx + Apacheサーバーの今のrobots.txtには、AIボットを指定した行がありません。
curl -s https://example.com/robots.txt# すべての検索エンジンのボットに適用
User-agent: *
# 管理ページをブロック (セキュリティ)
Disallow: /wp-admin/
# 管理機能のうちajax通信は許可 (正常動作に必須)
Allow: /wp-admin/admin-ajax.php
# 追加: スパムの検索結果をブロック (SEO保護)
Disallow: /search/
Disallow: /?s=
# サイトマップのパスを案内 (インデックス速度の向上)
Sitemap: https://example.com/sitemap_index.xmlAIボットの行がないこの状態で、14日間に公開レンジのGPTBotのリクエスト2,546件は403なしで、200が2,090件、301が432件で応答されました。同じ期間にオリジンのログに残ったrobots.txtのリクエストは、公開レンジ基準でGooglebotが36件、ClaudeBotが8件、OAI-SearchBotが6件で、GPTBotとPerplexityBotは0件でした。robots.txtも、前段のキャッシュが応答するとオリジンのログには残りません。
5️⃣ nginxでAIクローラーをブロックする方法と限界
robots.txtでブロックしても、ルールを読まないリクエストはそのままサーバーまで入ってきます。nginxでは[map]で、UAにボット名があれば変数に1を入れます。
# httpブロック内 — 学習用ボットの名前がUAにあれば1
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}serverブロックでは、その変数が1なら403を返します。
# serverブロック内
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# 以下は既存の設定
}UAでブロックする方法は名前だけを確認するため、なりすましのリクエストは同じ名前なら一緒にブロックされ、名前を変えれば通過します。許可した検索用ボットの名前を借りたリクエストは、公開IPレンジと照合しないと除けません。
OAI-SearchBotは許可しつつ、レンジの外から来た同じ名前のリクエストだけを拒否するには、[geo]で公開レンジを変数にし、UAと組み合わせて照合します。
# httpブロック内 — OAI-SearchBotの公開レンジ(searchbot.jsonの全体を入れる、下は2行だけ)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}前段にCDNやプロキシがあると、[geo]が見るアドレスは中継サーバーのものになるため、real_ipで本当のIPを復元してから照合します。Anthropicの文書は、IPアドレスでブロックする方法はrobots.txtを読むことまで妨げ、拒否の合図がきちんと伝わらないことがあると案内しています。
設定は運用中のサーバーには入れず、試験用の設定ファイルで文法だけを確認しました。
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successful設定例は文法だけを確認したため403の応答は確かめておらず、14日分のログでは、OAI-SearchBotの名前を付けたリクエスト3,937件のうち2,347件が公開レンジ外のなりすまし集団から来ていました。
6️⃣ AIクローラーから対価を受け取る方式:Pay per crawlとWeb Bot Auth
Pay per crawlはCloudflare AI Crawl Controlの機能で、サイトの所有者がゾーンごとに価格を決め、AIクローラーのリクエストごとに料金を受け取る方式です。2026年10月18日に確認した公式文書によると非公開ベータで、Cloudflareが販売代行者(Merchant of Record)として決済を処理します。
支払いの意思をリクエストヘッダーで送ったクローラーは200の応答を受け取り、そうでないクローラーは価格が入った[402 Payment Required]の応答を受け取ります。同じクローラーをWAFやBot Managementでブロックすると、ブロックのルールが課金より優先されます。
料金を払おうとするクローラーは、Web Bot Authで自分を証明する必要があります。Web Bot Authは、ボットがEd25519キーでリクエストに署名し、公開鍵を[/.well-known/http-message-signatures-directory]に置いて、受け取る側が署名を検証する方式です。
署名は[Signature-Agent]、[Signature-Input]、[Signature]の3つのヘッダーで渡され、IPレンジの代わりに暗号署名でボットを確認します。オリジンサーバーの標準のアクセスログ形式はリクエストヘッダーを記録しないため、14日間に来たAIクローラーのリクエストに署名があったかは確認していません。
14日間に公開IPレンジで確認されたAIクローラーのリクエスト1万8,605件は、同じ期間のGooglebotとbingbotの公開レンジからのリクエスト2万4,022件の77%でした。robots.txtに学習用のトークンを入れるかどうかは、なりすましを除いた数字で判断することになり、週単位のログ集計に公開レンジの照合を加えれば、その推移を確認できます。
🔢 FAQ & おすすめコンテンツ


ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

