AIクローラーのアクセスログ分析:本当に来たのは誰か
アクセスログ分析は、サーバーが記録済みのユーザーエージェントとIPを読み、本人確認をしてから数える方法です。コマンド、フィールド表、トークン一覧、そしてログが証明できる範囲をまとめます。

アクセスログ分析とは、サーバーがすでに記録しているユーザーエージェントとIPアドレスの2項目を読み、本物のAIクローラーからのリクエストと、そう名乗っているだけのリクエストを分ける作業です。到達性テストでは答えられない問いに答えます。「GPTBotはこのページに来られたか」ではなく、「来たのか、いつ、何回か」です。200はドアが開くことを示します。ログは誰が入ったかを示します。
アクセスログ分析でわかること、わからないこと
わかるのは、どのエージェントがどのパスを、いつ、どのステータスで、どのIPから要求したかです。わからないのは、その内容がその後、回答や学習に使われたかどうかです。本人確認も単独ではできません。ユーザーエージェントは自己申告で、誰でもコピーできます。「GPTBotと名乗るリクエスト」を「GPTBot」に変えるのは、一致するIPだけです。
だからこれは一行の裏技ではなく、手順として書く価値があります。ログの1行には2つの半分があります。誰もが読む半分がエージェント、その行が本当かを決める半分がIPアドレスです。
始める前に、サーバーのアクセスログへの読み取り権限とターミナルが必要です。ホスティングがログを出さない場合、代わりはありません。サーバーに届いていないリクエストを、外部ツールが見ることはできません。
なぜエージェント確認よりログが強いのか
到達性テストは、エージェントを偽装したリクエストを送り、返り方を見ます。ログは、本物のクライアントが自発的にしたことを記録します。両者は逆方向にも食い違います。到達できても訪問されるとは限らず、テストが失敗してもクローラーが別の経路で通ることはあります。
さらにログには、テストが絶対に作れない項目があります。時間です。テストはある瞬間の可否しか返しません。ログは日ごと・ボットごとの回数を返し、週次で来るクローラーと一度だけ来たクローラーを分けられます。
この順番で進める
5つの手順です。それぞれ、次へ進む前の確認があります。
- ログを見つけ、形式を確認する。nginxの既定は
combined、ApacheはNCSA拡張/combined形式で%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"と定義されています。実際の1行で各項目を言えたら完了です。 - 絞り込む前に、エージェント別に数える。combined形式では、引用符で区切った6番目がエージェントです。予想したものだけでなく、上位30件の一覧ができたら完了です。
- AIクローラーのトークンを取り出す。正確な文字列は下の表にあります。各トークンに回数と初出日が付いたら完了です。
- 信じるIPを検証する。Googleは逆引きと正引き、OpenAIは公開JSONの範囲と照合します。引用する行が検証済みか「未検証」と明記されたら完了です。
- 合計ではなく期間を記録する。日数がない回数は意味を持ちません。「412リクエスト、2026年8月1日から31日、5サイト」と書けたら完了です。
成果物:1つのコマンドと2つの表
このコマンドはcombined形式のログを、エージェント別の回数に変えます。エージェント欄にエスケープされた引用符がない前提で、下のクローラーには当てはまり、一部のスクレイパーには当てはまりません。
awk -F'"' '{print $6}' access.log \
| sed 's/;.*compatible;//' \
| sort | uniq -c | sort -rn | head -30
sedの工程は、ブラウザーが本当のトークンを互換性プレフィックスの後ろに隠すためです。数がおかしいときに戻れるよう、加工前の6番目も残しておきます。
2つ目の成果物はフィールド表です。多くの人はエージェントだけを知って止まるので、最初の集計でパスを見落とします。
| 項目 | 例 | 意味 |
|---|---|---|
| リモートIP | 66.249.66.1 | 公開リストと照合できる唯一の項目 |
| リクエスト行 | GET /pricing HTTP/1.1 | 要求されたメソッドとパス |
| ステータス | 200 | 内容が返ったか、遮断されたか |
| 送信バイト | 18432 | 実際に返した量の目安 |
| リファラー | - | クローラーではほぼ常に空 |
| ユーザーエージェント | ... GPTBot/1.4 ... | 自己申告で偽装可能、過信されやすい |
3つ目は、各運営者が公開しているトークンの一覧です。2026年9月22日に各社ドキュメントで確認しました。完全な一覧ではなく、新しいものは予告なく増えます。だからこそ手順2で、絞り込む前に全部を数えます。
| トークン | 運営者 | 役割 | 検証 |
|---|---|---|---|
GPTBot | OpenAI | 学習用クロール | 可:openai.com/gptbot.json |
OAI-SearchBot | OpenAI | 検索での表示 | 可:openai.com/searchbot.json |
ChatGPT-User | OpenAI | 人の操作による取得 | 可:openai.com/chatgpt-user.json |
Googlebot | 検索用クロール | 逆引きと正引き、JSON範囲 | |
Google-Extended | 制御トークン | 不可:独自のリクエストを送らない | |
ClaudeBot | Anthropic | クロール | 文書あり、範囲は同社ページで確認 |
PerplexityBot | Perplexity | クロール | 文書あり、範囲は同社ページで確認 |
効いているのは2行です。Google-Extendedはクローラーではなく制御トークンで、Googleの文書は独自のユーザーエージェント文字列を持たないと明記しています。ログに出ないことは失敗ではありません。ChatGPT-Userは人が起動するので、自動クロールではありません。
つまずきやすいところ
エージェントを信じる。既定の誤りで、自信のある間違いを生みます。Googleの検証はDNSを2回引きます。IPの逆引き、返った名前の正引き、そして一致。OpenAIは公開範囲ファイルとIPを照合します。どちらも公開していないクローラーは、信じるのでも消すのでもなく「未検証」と書きます。
robots.txtの取得をページクロールとして数える。OpenAIは、robots.txtを取得するとき、エージェント文字列にマーカーを足すことがあると説明しています。ログ形式がパスを落とすと、robots.txtの取得とページ取得が同じに見えます。クロール回数を報告する前にパスで分けます。
短すぎる期間を読む。7日間のログは30日間の問いに答えられず、ローテーションは黙って期間を切り詰めます。意図した期間ではなく、実際に数えた最初と最後の時刻を書きます。
よくある質問
ログのユーザーエージェントは信じられますか
いいえ。IPが公開範囲と一致するか、逆引きと正引きが通るまでは自己申告として扱います。ログは記録であって、証明ではありません。
GPTBotが来たか知るには
GPTBotというトークンで検索し、一致したIPをopenai.com/gptbot.jsonと照合します。IPが一致しないトークンは、名前をコピーした別のリクエストです。
ログは何日分必要ですか
クロールの1周期を覆う分ですが、サイトによって違い、全サイトに通用する日数はありません。30日を既定の出発点にします。7日しかない場合は、そう書きます。短い期間は過小評価になり、過大評価にはなりません。
最後に境界を明記します。ログは取得があったことを証明しますが、その内容が使われた、順位付けされた、引用されたことまでは証明しません。この記録を公開後の行動につなげるのがQueryWinの仕事です。まずクローラーが到達できるかを確認するならAIがサイトを読めるかの確認から始めてください。どのボットを許可するかはAIクローラー用robots.txtにあります。
エージェントは自分で名乗る。本当かどうかはIPが決める。
収録: QueryWinガイド · レベル2


