AIクローラー一覧|ユーザーエージェントの見分け方
GPTBot、ClaudeBot、PerplexityBotなど主要なAIクローラーのユーザーエージェントと役割を一覧で整理します。検索用・学習用の違い、IPアドレスでの確認方法、ログの記録の仕方も解説します。
AIクローラーは、ユーザーエージェントの文字列に含まれる名前(GPTBot、ClaudeBotなど)で見分けます。 ただし、名前は名乗っているだけなので、それだけでは本物と確定できません。各社が公開しているIPアドレスの一覧と照らし合わせることで、より確実に判別できます。
この一覧は、2026年7月時点の各社の公式ドキュメントをもとにしています。名前、役割、IPアドレスは変わることがあるため、最新の情報は各社のドキュメントで確認してください。
OpenAI
| 名前 | 役割 | robots.txt | IPアドレスの一覧 |
|---|---|---|---|
| OAI-SearchBot | ChatGPTの検索のための自動巡回 | 名前を指定して設定できる | openai.com/searchbot.json |
| GPTBot | AIモデルの学習に使う可能性のあるコンテンツの収集 | 名前を指定して設定できる | openai.com/gptbot.json |
| ChatGPT-User | ユーザーの依頼によるページの取得 | 適用されない場合がある | openai.com/chatgpt-user.json |
ChatGPTの検索に関係するのはOAI-SearchBotです。GPTBotを拒否しても、ChatGPTの検索からは除外されません。詳しくはGPTBotとはをご覧ください。
Anthropic(Claude)
| 名前 | 役割 | robots.txt | IPアドレスの一覧 |
|---|---|---|---|
| ClaudeBot | AIモデルの学習に使う可能性のあるコンテンツの収集 | 名前を指定して設定できる | claude.com/crawling/bots.json |
| Claude-SearchBot | 検索の品質向上のための巡回 | 名前を指定して設定できる | claude.com/crawling/bots.json |
| Claude-User | ユーザーの依頼によるページの取得 | 名前を指定して設定できる | claude.com/crawling/bots.json |
Anthropicは、これらのクローラーはrobots.txtの指示に従うと説明しています。
Perplexity
| 名前 | 役割 | robots.txt | IPアドレスの一覧 |
|---|---|---|---|
| PerplexityBot | Perplexityの検索結果のための自動巡回 | 名前を指定して設定できる | perplexity.com/perplexitybot.json |
| Perplexity-User | ユーザーの依頼によるページの取得 | 通常は従わない | perplexity.com/perplexity-user.json |
Perplexityは、PerplexityBotはAIモデルの学習のためのコンテンツ収集には使われないと説明しています。
Google-Extendedは制御トークン
Google-Extendedは、Geminiの学習や回答の根拠づけへの利用を管理するために、robots.txtで使う制御トークンです。独立したクローラーとしてアクセスしてくるわけではなく、取得には既存のGoogleのクローラーが使われます。
User-agent: Google-Extended
Disallow: /
そのため、アクセスログで「Google-Extended」を探しても見つかりません。また、Googleは、この設定はGoogle検索への表示や順位に影響しないと説明しています。
ログでの見分け方
ユーザーエージェントの全文には、ブラウザとの互換性のための文字列やバージョン番号が含まれます。完全一致で判定すると、バージョンが変わったときに判定できなくなるため、名前の部分を大文字小文字を区別せずに照合します。
const patterns = [
{ token: 'OAI-SearchBot', vendor: 'OpenAI', purpose: 'search' },
{ token: 'GPTBot', vendor: 'OpenAI', purpose: 'training' },
{ token: 'ChatGPT-User', vendor: 'OpenAI', purpose: 'user_fetch' },
{ token: 'Claude-SearchBot', vendor: 'Anthropic', purpose: 'search' },
{ token: 'ClaudeBot', vendor: 'Anthropic', purpose: 'training' },
{ token: 'Claude-User', vendor: 'Anthropic', purpose: 'user_fetch' },
{ token: 'PerplexityBot', vendor: 'Perplexity', purpose: 'search' },
{ token: 'Perplexity-User', vendor: 'Perplexity', purpose: 'user_fetch' },
];
function identifyClaimedAgent(userAgent: string) {
const normalized = userAgent.toLowerCase();
return patterns.find(({ token }) => normalized.includes(token.toLowerCase())) ?? null;
}
この関数の結果は「名乗っている名前(claimedAgent)」です。「本物と確認できた(verifiedAgent)」とは区別しておきましょう。手元の文字列を判定したいときは、AIクローラーのユーザーエージェントチェッカーに貼り付けるだけで確認できます。
IPアドレスで本物か確かめる
- ユーザーエージェントの全文から、名乗っている名前を特定する
- 各社が公開しているIPアドレスの一覧を、公式のURLから取得する
- IPv4とIPv6の両方の範囲を読み込む
- アクセス元のIPアドレスが、その範囲に含まれるかを確認する
- 一覧のURL、取得した日時、確認の結果を記録する
CDNやロードバランサーを経由している場合は、どのヘッダーが本当のアクセス元のIPアドレスを示しているかを決めておく必要があります。信頼できないX-Forwarded-Forの値は、名乗っている名前と同じく「自己申告」です。
あとで見直せる形で記録する
ログには、元のデータと判定の結果を分けて残します。
- 日時、ホスト、メソッド、パス、HTTPステータス
- ユーザーエージェントの全文
- 名乗っている名前(claimed_agent)
- IPアドレスで確認できたか(network_verified)
- その時点のrobots.txtでの判定(allowed / disallowed)
元のデータが残っていれば、判定のルールを直したときに、過去の記録も正しく分類し直せます。判断できない場合は「不明」として残しておくことも大切です。
会社名ではなく「役割」で分類する
「OpenAIからのアクセス」とまとめてしまうと、検索のための巡回なのか、学習のための収集なのか、ユーザーの依頼による取得なのかが分かりません。会社名、クローラーの名前、役割、確認の状態、HTTPの結果を、別々の項目として記録しましょう。
robots.txtでの具体的な設定方法はrobots.txtでAIクローラーを拒否・許可する書き方で解説しています。
まとめ
主要なAIクローラーは、検索用、学習用、ユーザーの依頼による取得用に分かれています。ログでは名前の部分で照合し、IPアドレスの一覧で本物かどうかを確認しましょう。
SearchSeal は、クローラーのアクセスは記録しません。登録した質問について、AIの回答と引用元を毎日保存するので、アクセスログとあわせて「ページが取得されたか」と「回答でどう紹介されたか」を分けて確認できます。
よくある質問
AIクローラーかどうかを簡単に確認する方法はありますか?
ユーザーエージェントの文字列に、GPTBot、ClaudeBot、PerplexityBotなどの名前が含まれているかを確認します。本物かどうかは、各社が公開しているIPアドレスの一覧と照らし合わせて確認します。
Google-ExtendedはアクセスログでGoogle-Extendedと表示されますか?
表示されません。Google-Extendedはrobots.txtで使う制御トークンで、取得には既存のGoogleのクローラーが使われます。
ユーザーエージェントの全文で判定してもよいですか?
バージョン番号などが変わると判定できなくなるため、GPTBotなどの名前の部分で、大文字小文字を区別せずに照合するのがおすすめです。