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

公正取引委員会の広告文 Ver 3.1
公正取引委員会の広告文 Ver 3.2(モバイル専用)
テスト環境 RHEL系AlmaLinux 9.8Nginx 1.28 + Apache 2.42026-10-18 確認

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.x

CDNやプロキシを経由したリクエストは最初の列に中継サーバーのアドレスが記録されるため、そうした行はログの末尾の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.x
74.7.x.x IN
34.53.x.x OUT

2,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日間のリクエスト確認方法なりすまし集団
ClaudeBotAnthropic10,305公開IPレンジ2,387
PerplexityBotPerplexity3,406公開IPレンジ2,262
GPTBotOpenAI2,546公開IPレンジ2,328
OAI-SearchBotOpenAI1,399公開IPレンジ2,347
ChatGPT-UserOpenAI334公開IPレンジ2,409
ApplebotApple330公開IPレンジ2,372
CCBotCommon Crawl275公開IPレンジ2,275
Claude-UserAnthropic10公開IPレンジ2,192
Claude-SearchBotAnthropic0公開IPレンジ2,297
Perplexity-UserPerplexity0公開IPレンジ2,235
Meta-ExternalAgentMeta14,384UA2,339
BytespiderByteDance6,569UA2,336
AmazonbotAmazon3,493UA・逆引きDNS2,379
Googlebot(比較用)Google10,545公開IPレンジ3,951
bingbot(比較用)Microsoft13,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だけで集計しました。

📊AIクローラーの週ごとのリクエスト数週単位・ログ集計
GPTBot
OpenAI・モデル学習用の収集
08461,6922,5373,383
9/143,3837日
9/211907日
9/283567日
10/5127日
10/122,9596日(10/17まで)
ClaudeBot
Anthropic・モデル学習用の収集
02,5545,1087,66310,217
9/146,9767日
9/2110,2177日
9/287,7097日
10/56,9307日
10/127,2896日(10/17まで)
PerplexityBot
Perplexity・検索
05531,1061,6592,212
9/141,0847日
9/212,1527日
9/285337日
10/52,2127日
10/121,4836日(10/17まで)
数字は9月14日の週から10月12日の週までのオリジンサーバーのアクセスログのUA基準の値で、なりすまし集団のIPと脆弱性探索のURLへのリクエスト、応答コードが403・429のようなエラーのリクエストは集計から除きました。

週単位で見ると、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 404

1日分でも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トークン会社用途ブロックすると(公式文書)
GPTBotOpenAIモデル学習用の収集学習に使わないでという合図
OAI-SearchBotOpenAIChatGPT検索ChatGPT検索の回答から除外(移動リンクとしては表示されることがある)
ChatGPT-UserOpenAIユーザーリクエストrobots.txtのルールが適用されないことがある
ClaudeBotAnthropicモデル学習用の収集以後の資料を学習データから除外
Claude-SearchBotAnthropic検索品質の改善検索結果での表示が減ることがある
Claude-UserAnthropicユーザーリクエストユーザーの質問でページを取ってこない
PerplexityBotPerplexity検索(学習ではない)検索結果から除外
Perplexity-UserPerplexityユーザーリクエストおおむねrobots.txtに従わない
Google-ExtendedGoogleGeminiの学習・グラウンディングGoogle検索の表示・順位には影響なし
Applebot-ExtendedApple基盤モデルの学習Appleの検索での表示には影響なし
meta-externalagentMetaAIモデルの学習など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.xml

AIボットの行がないこの状態で、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レンジと照合しないと除けません。

🧭 AIクローラーのリクエストが通る道
解説ダイアグラム
📌 リクエスト
📥 リクエスト
📜 robots.txt
自動クローラーが最初に読むルール
GPTBot · ClaudeBotDisallowなら収集を停止
OAI-SearchBot · PerplexityBotDisallowなら検索の回答から除外
ChatGPT-User · Perplexity-Userルールが適用されないことがある
ボット名だけを借りたリクエストルールに従う保証はない
リクエスト→
🖥️ nginx
UA map・公開IPレンジの照合
UA mapに名前ありUAで403
UA mapにない公開レンジ内なら通過
UA mapにない通過
許可したボット名 + レンジ外レンジ照合で403
応答→
📤 応答
ステータスコード
403学習用の収集を拒否
200AI検索に表示
200ユーザーの質問に回答
403名前を変えればUAブロックは通過
学習用クローラーはrobots.txtのDisallowに従い、nginxのUA mapに名前を入れると、ルールを読まなかったリクエストも403で拒否します。14日間に公開レンジから来たGPTBotのリクエストは2,546件でした。
検索用クローラーは学習用のトークンとは別に設定し、ブロックしなければChatGPT検索とPerplexity検索の回答にページが表示されることがあります(公式文書基準)。nginxでは公開レンジ内から来たリクエストだけを通過させます。
ユーザーリクエストのボットはユーザーが質問したときにページを取ってくるリクエストで、OpenAIとPerplexityの文書はrobots.txtのルールが適用されないことがあると案内しています。ブロックするにはnginxで名前によって拒否します。
なりすましのリクエストはボット名だけを借りて使うため、UAブロックは名前が同じときだけ拒否し、許可した検索用ボットの名前を使うと公開レンジとの照合でしか除けません。14日間で70個のIPが23のボット名を入れ替えながら使いました。

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.conf
nginx: 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 & おすすめコンテンツ

Anthropicの文書は非標準の拡張である[Crawl-delay]をサポートしていると案内しており、[User-agent: ClaudeBot]の下に[Crawl-delay: 1]のように書きます。Appleの文書は、Applebotはcrawl-delayに従わない代わりに、サイトが遅くなったりエラーを返したりすると収集速度を自動で調整すると明かしています。

Appleの文書によると、nosnippetメタタグを付けたページは、Apple製品でAIモデルが回答を生成するときに追加の文脈として使われず、検索の候補にはタイトルだけが表示されます。PDFや画像のようにメタタグを入れられないファイルは、[X-Robots-Tag: applebot: nosnippet]の応答ヘッダーで同じ指示を送ります。

Perplexityの文書は、UAにPerplexityBotかPerplexity-Userが含まれ、送信元IPが公開JSONのレンジ内にあるリクエストだけを許可するルールを作り、ほかのブロックルールより先に適用するよう案内しています。レンジは随時変わるため、JSONのURLから定期的に取得してルールを更新するよう勧めています。

🤖 AIクローラー おすすめコンテンツ 記事5・参照8
🗂️ WEB
📋 ゼロクリック検索 📄 Googleアルゴリズムの順位要素 📄 JavaScript SEO
📄 IPアドレス確認 📄 Cloudflare CDNの設定
📡 OpenAIのクローラー 📡 Anthropicのクローラー 📡 Perplexityのクローラー 📡 Googleの一般的なクローラー 📡 Applebot 📡 MetaのWebクローラー 📡 Pay per crawl 📡 Web Bot Auth
検索結果がありません。
OpenAIのクローラーの公式文書(外部リンク)
公式文書 · OpenAI
Overview of OpenAI Crawlers
GPTBot・OAI-SearchBot・ChatGPT-Userの用途とrobots.txtのトークン、公開IPレンジのJSONのURLを案内する公式文書です。
記事を見る →現在の記事
Anthropicのクローラーの公式文書(外部リンク)
公式文書 · Anthropic
Does Anthropic crawl data from the web, and how can site owners block the crawler?
ClaudeBot・Claude-User・Claude-SearchBotの用途とブロックしたときの影響、Crawl-delayへの対応を案内する公式文書です。
記事を見る →現在の記事
Perplexityのクローラーの公式文書(外部リンク)
公式文書 · Perplexity
Perplexity Crawlers
PerplexityBotとPerplexity-Userの用途と公開IPレンジ、ファイアウォールの許可設定を案内する公式文書です。
記事を見る →現在の記事
Googleの一般的なクローラーの公式文書(外部リンク)
公式文書 · Google
Google’s common crawlers
Google-ExtendedトークンがHTTPリクエストのUAなしにrobots.txtでだけ使われる理由と、影響の範囲を案内する公式文書です。
記事を見る →現在の記事
Applebotの公式文書(外部リンク)
公式文書 · Apple
About Applebot
ApplebotとApplebot-Extendedの違い、逆引きDNSの確認とnosnippetの扱いを案内する公式文書です。
記事を見る →現在の記事
MetaのWebクローラーの公式文書(外部リンク)
公式文書 · Meta
MetaのWebクローラー
Meta-ExternalAgent・Meta-WebIndexer・Meta-ExternalFetcherの用途とrobots.txtの設定を案内する公式文書です。
記事を見る →現在の記事
Cloudflare Pay per crawlの公式文書(外部リンク)
公式文書 · Cloudflare
What is Pay Per Crawl?
AIクローラーのリクエストに402の応答と価格のヘッダーを送り、支払いの意思があるリクエストだけに200で応答する機能の公式文書です。
記事を見る →現在の記事
Cloudflare Web Bot Authの公式文書(外部リンク)
公式文書 · Cloudflare
Web Bot Auth
ボットがリクエストヘッダーにEd25519の署名を付けて自分を証明する方式と、鍵ディレクトリの登録手順の公式文書です。
記事を見る →現在の記事

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

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 0   +   5   =