Vercel・CloudFrontでAIクローラーを確認する方法
VercelとAmazon CloudFrontで、GPTBotやOAI-SearchBotなどのAIクローラーのアクセスを確認する方法を解説します。ボット管理のルール、ログの設定、WAFのログ、記録が見つからないときの考え方も紹介します。

VercelやAmazon CloudFrontでAIクローラーを確認するには、それぞれのボット管理やログの機能で、日時、ホスト、パス、ユーザーエージェント、ステータスを記録します。 ブロックしたアクセスの理由を知りたい場合は、ファイアウォール(WAF)のログもあわせて確認します。
nginxを自分で管理している場合はnginxのログでChatGPTクローラーを確認する方法、WordPressの場合はWordPressでChatGPTクローラーを確認・制御する方法をご覧ください。
Vercelの場合
AI Botsのルールを確認する
Vercelは、すべてのプランで「AI Bots Managed Ruleset」を提供しています。既知のAIクローラーのアクセスを判定し、次のどちらかの動作を設定できます。
- Log: ブロックせずに記録する
- Deny: ブロックする
プロジェクトを開き、「Firewall」→「Rules」→「Bot Management」で、AI Botsのルールの動作を確認します。Denyになっている場合は、アクセスがアプリまで届いていなくても不思議ではありません。判定に使うクローラーの一覧はVercelが管理しているので、新しいクローラーの名前を自分で追加し続ける必要はありません。
記録を確認する
Firewallの画面で、ルールに一致したアクセスと、ブロックの結果を確認します。関数まで届いたアクセスは、Runtime Logsで、ユーザーエージェントやファイアウォールの判定とあわせて確認できます。
記録するのは、日時、本番のホスト名、パス、ユーザーエージェント、ステータス、ファイアウォールの動作です。
長く残すならLog Drainsを使う
Log Drainsは、ProとEnterpriseのプランで使えます。メソッド、ホスト、パス、ユーザーエージェント、ステータス、接続元のIP、参照元などを外部に送れます。
サンプリングに注意しましょう。アクセスの10%だけを送る設定では、「クローラーが来なかった」とは言えません。サンプリングの設定も記録しておくか、確認したいパスはすべてのアクセスを集めるようにします。
Amazon CloudFrontの場合
ログを有効にする
CloudFrontの標準のログは、一定期間の閲覧者のリクエストを記録し、指定した保存先にファイルとして届けます。遅れを短くしたい場合は、別にリアルタイムのログもあります。
ディストリビューションの設定で標準のログを有効にし、本番のディストリビューションが対象になっているか、確認したい期間のファイルが保存先に残るかを確認します。クローラーの確認のために残す項目は次のとおりです。
- 日付と時刻
- ディストリビューションとホスト
- URIのパス
- ステータス
- 結果の種類(キャッシュから返したかなど)
- ユーザーエージェント
- 参照元
クエリ文字列は、必要で許可されている場合だけ残します。
ユーザーエージェントをデコードしてから照合する
CloudFrontのログでは、一部の値がエンコードされています。ユーザーエージェントをデコードしてから、OAI-SearchBot、GPTBot、ChatGPT-User、Claude-SearchBot、ClaudeBot、Claude-User、PerplexityBot、Perplexity-Userの名前で照合しましょう。集計では会社ごとにまとめても、元の値はそのまま残します。
ブロックした理由はAWS WAFのログで確認する
CloudFrontのログで分かるのは、閲覧者に何を返したかです。AWS WAFのWeb ACLがリクエストを処理した場合は、WAFのログで、一致したルールと動作が分かります。2つのログを日時とリクエストの内容で結び付けると、403の原因を調べやすくなります。ただし、すべての403がWAFによるものとは限りません。
どちらの場合も共通のこと
本物かどうかを確認する
ユーザーエージェントは名乗っている名前にすぎません。許可のルールを作る前に、各社が公開しているIPアドレスの範囲や、認証済みボットの仕組みで確認しましょう。名前と役割の一覧はAIクローラー一覧にまとめています。
ステータスから読み取る
| ステータス | 意味 |
|---|---|
| 200 | ページを返した |
| 301・302 | 転送した |
| 403 | 拒否した |
| 404 | パスが存在しない |
| 429 | レート制限で拒否した |
| 5xx | CDNまたはオリジンのエラー |
合計の件数だけでは、クローラーが役に立つページに届いたのか、転送やエラーばかりだったのかが分かりません。パスと結果の種類もあわせて確認しましょう。
記録が見つからないときは「不明」として扱う
一致する記録がない場合、次のような可能性があります。
- クローラーがサイトにアクセスしていない
- 確認した期間が違う
- プロジェクトやディストリビューションの外のホスト名にアクセスした
- その期間のログが残っていない
- サンプリングで記録から漏れた
- 別のセキュリティの仕組みが先に応答した
どのデータを確認したかが分かるまでは、「アクセスなし」ではなく「不明」としておきましょう。
送るログは最小限にする
Cookie、認証のヘッダー、リクエストの本文、許可されていないクエリの値は、ログに含めないようにします。
まとめ
Vercelでは、AI Botsのルールの動作を確認し、Firewallの記録やLog Drainsでアクセスを確認します。CloudFrontでは、標準のログを有効にし、ユーザーエージェントをデコードしてから照合し、ブロックの理由はAWS WAFのログで確認します。
SearchSeal は、クローラーのアクセスは記録しません。AIの回答、ブランドの言及、回答とともに返された引用元のリンクを保存するので、ログとは別に、回答の中での見え方を確認できます。
よくある質問
VercelはAIクローラーを判定できますか?
できます。VercelのAI Bots Managed Rulesetで、既知のAIクローラーのアクセスを記録(Log)またはブロック(Deny)できます。
VercelのLog Drainsは無料のプランで使えますか?
Vercelは、Log DrainsをProとEnterpriseのプランの機能としています。
CloudFrontで200が返っていれば、ChatGPTに引用されたということですか?
そうとは限りません。ログで分かるのは、そのリクエストにページを返したことだけです。引用は別の仕組みで起きるため、回答を記録して確認する必要があります。