AIクローラーがトラフィック数を水増ししていますが、従来のショートカットであるUser-Agentヘッダーの確認ではそれを見抜くことができません。

最近の8日間のログ調査では、468件の正当な記事取得に対し、実際には.env.gitなどのファイルを探索しながらAIボットを装ったリクエストが991件も発見されました。その原因は?HTTPリクエストにGPTBotChatGPT-Userといった自己申告のUser-Agent文字列を誰でも挿入できてしまうからです。

なぜこの指標が重要なのか

ウェブサイトは「AIトラフィック」の急増を、コンテンツの関連性が高い兆候として捉えます。彼らはその数字を広告単価の正当化、サーバーリソースの割り当て、投資家へのアピールに使用します。報告されたAIアクセスが半分もノイズである場合、予算は誤った方向に使われ、ダッシュボードは誤解を招くものになってしまいます。

実態と主張を分ける2つのフィルター

  1. Cloudflareの verifiedBotCategory – Cloudflareはこのフィールドを、リクエストのIPを逆引きDNS(reverse DNS)によって既知のボットドメインに解決できた場合にのみ埋めます。ヘッダーが「GPTBot」となっていても、IPのルックアップに失敗すれば、そのリクエストは「未検証(unverified)」のバケツに分類されます。
  2. サイトマップとの照合 – ボットが本当にコンテンツを読み取っていると言えるのは、リクエストされたURLがXMLサイトマップに存在する場合のみです。サイトマップに存在しないパスへのリクエストは、記事のインデックス作成ではなく、脆弱性を探っている可能性が高いといえます。

同じ8日間のサンプルに両方のフィルターを適用したところ、衝撃的な数字が出ました:

  • ChatGPT-User – リクエストの39%が検証を通過。
  • GPTBot – 13%が検証済み。
  • PerplexityBot – 0%が検証済み。
  • Google-Extended – 0%が検証済み。この文字列はGoogleの公式クローラーのいずれにも対応していません。

検証済みの呼び出しであっても、多くのボットはあなたが重視する記事ページではなく、robots.txtやサイトマップ自体のみを取得していました。

開発者が今日からできること

  • 分析パイプラインでCloudflareのボット検証を有効にするverifiedBotCategoryフィールドはリクエストヘッダーに表示され、独自のログと共に保存できます。
  • 最新のサイトマップを維持する。すべての着信リクエストのパスがサイトマップ内に存在することを確認するプロセスを自動化し、コンテンツビューとしてカウントする前にチェックを行います。
  • GETメソッド以外のメソッドや、典型的な開発用ファイル(.env.git.bak)をターゲットとするリクエストをフィルタリングする。これらはほぼ間違いなく悪意のあるスキャンです。

反論

逆引きDNSチェックは偽装できる可能性があることや、ボットの正当な目的が、まだサイトマップに記載されていない新しいURLを発見することである、と主張する人もいます。これらの懸念は妥当です。執拗な攻撃者はDNSレコードを侵害する可能性がありますし、新しいコンテンツは次の生成サイクルまで現在のサイトマップには当然存在しません。

現実的な対応策は、検証を絶対的なゲート(門番)としてではなく、信頼スコアとして扱うことです。DNS検証、サイトマップの存在、リクエストメソッドのチェックを組み合わせることで、「真のAIトラフィック」としてカウントする基準を引き上げることができます。リクエストが3つのチェックのうち2つを通過した場合は、即座に破棄するのではなく、手動レビュー用にフラグを立てるようにしましょう。

今後注視すべき点

  • Cloudflareの検証APIの変更verifiedBotCategoryのロジックに変更があれば、検証率が変動する可能性があります。
  • 新しい自己申告ボットの出現 – ログに現れるUser-Agent文字列を監視してください。急激なスパイクは、AIクローラーを装った新しいスキャナーの存在を示している可能性があります。
  • サイトマップの生成頻度 – 生成間隔が長くなると、正当なクローラーが誤分類される可能性が高まります。

結論はシンプルです。User-Agent文字列を「証拠」として扱うのはやめましょう。DNS検証とサイトマップ検証を層状に組み合わせることで、誰が実際にあなたのコンテンツを読んでいるのか、より明確な姿が見えてくるはずです。

Source: https://dev.to/aulvem/ai-crawler-user-agents-are-self-reported-468-real-fetches-991-fake-ones-bgo