AIクローラーのアクセスログ分析:本当に来たのは誰か

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

クロールとインデックス6分で読めます2696 回閲覧
AIクローラーのアクセスログ分析:本当に来たのは誰か

アクセスログ分析とは、サーバーがすでに記録しているユーザーエージェントとIPアドレスの2項目を読み、本物のAIクローラーからのリクエストと、そう名乗っているだけのリクエストを分ける作業です。到達性テストでは答えられない問いに答えます。「GPTBotはこのページに来られたか」ではなく、「来たのか、いつ、何回か」です。200はドアが開くことを示します。ログは誰が入ったかを示します。

アクセスログ分析でわかること、わからないこと

わかるのは、どのエージェントがどのパスを、いつ、どのステータスで、どのIPから要求したかです。わからないのは、その内容がその後、回答や学習に使われたかどうかです。本人確認も単独ではできません。ユーザーエージェントは自己申告で、誰でもコピーできます。「GPTBotと名乗るリクエスト」を「GPTBot」に変えるのは、一致するIPだけです。

だからこれは一行の裏技ではなく、手順として書く価値があります。ログの1行には2つの半分があります。誰もが読む半分がエージェント、その行が本当かを決める半分がIPアドレスです。

始める前に、サーバーのアクセスログへの読み取り権限とターミナルが必要です。ホスティングがログを出さない場合、代わりはありません。サーバーに届いていないリクエストを、外部ツールが見ることはできません。

なぜエージェント確認よりログが強いのか

到達性テストは、エージェントを偽装したリクエストを送り、返り方を見ます。ログは、本物のクライアントが自発的にしたことを記録します。両者は逆方向にも食い違います。到達できても訪問されるとは限らず、テストが失敗してもクローラーが別の経路で通ることはあります。

さらにログには、テストが絶対に作れない項目があります。時間です。テストはある瞬間の可否しか返しません。ログは日ごと・ボットごとの回数を返し、週次で来るクローラーと一度だけ来たクローラーを分けられます。

この順番で進める

5つの手順です。それぞれ、次へ進む前の確認があります。

  1. ログを見つけ、形式を確認する。nginxの既定はcombined、ApacheはNCSA拡張/combined形式で%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"と定義されています。実際の1行で各項目を言えたら完了です。
  2. 絞り込む前に、エージェント別に数える。combined形式では、引用符で区切った6番目がエージェントです。予想したものだけでなく、上位30件の一覧ができたら完了です。
  3. AIクローラーのトークンを取り出す。正確な文字列は下の表にあります。各トークンに回数と初出日が付いたら完了です。
  4. 信じるIPを検証する。Googleは逆引きと正引き、OpenAIは公開JSONの範囲と照合します。引用する行が検証済みか「未検証」と明記されたら完了です。
  5. 合計ではなく期間を記録する。日数がない回数は意味を持ちません。「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つ目の成果物はフィールド表です。多くの人はエージェントだけを知って止まるので、最初の集計でパスを見落とします。

項目例意味
リモートIP66.249.66.1公開リストと照合できる唯一の項目
リクエスト行GET /pricing HTTP/1.1要求されたメソッドとパス
ステータス200内容が返ったか、遮断されたか
送信バイト18432実際に返した量の目安
リファラー-クローラーではほぼ常に空
ユーザーエージェント... GPTBot/1.4 ...自己申告で偽装可能、過信されやすい

3つ目は、各運営者が公開しているトークンの一覧です。2026年9月22日に各社ドキュメントで確認しました。完全な一覧ではなく、新しいものは予告なく増えます。だからこそ手順2で、絞り込む前に全部を数えます。

トークン運営者役割検証
GPTBotOpenAI学習用クロール可:openai.com/gptbot.json
OAI-SearchBotOpenAI検索での表示可:openai.com/searchbot.json
ChatGPT-UserOpenAI人の操作による取得可:openai.com/chatgpt-user.json
GooglebotGoogle検索用クロール逆引きと正引き、JSON範囲
Google-ExtendedGoogle制御トークン不可:独自のリクエストを送らない
ClaudeBotAnthropicクロール文書あり、範囲は同社ページで確認
PerplexityBotPerplexityクロール文書あり、範囲は同社ページで確認

効いているのは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

AIクローラーのアクセスログ分析:本当に来たのは誰か