CloudflareはAIクローラーをブロックしている?確認方法と対処

公開日

結論

Cloudflareなどのファイアウォールは、robots.txtがクローラーを許可していても、AIクローラーに403、429、「Just a moment...」のチャレンジページを返し、ブラウザには本来のページを返すことがあります。確認するには、クローラーのユーザーエージェントでページをリクエストします。そのうえで、AI Crawl ControlまたはWAFのスキップルールでAI検索クローラーを許可します。

ボット対策はスクレイピングや不正利用を防ぐために存在し、その役割をよく果たしています。問題は、AI検索クローラーもボットだということです。何年も前に有効にしたセキュリティ設定、レート制限、未知のユーザーエージェントを対象とした広範なルールによって、あなたを引用してくれるクローラーが知らないうちに締め出されている一方で、自分のアクセスはまったく問題なく見える、ということが起こりえます。

このページの内容
  1. ファイアウォールがAIクローラーをブロックするのはなぜ?
  2. ファイアウォールによるブロックとrobots.txtによるブロックはどう見分ける?
  3. CloudflareでAI検索クローラーを許可するには?
  4. Bot Fight Modeはどうなる?
  5. どのクローラーを通すべき?
  6. AISeeWhyはファイアウォールのブロックをどう検出するのか

ファイアウォールがAIクローラーをブロックするのはなぜ?

ファイアウォールはリクエストごとに判断します。クローラーはJavaScriptのチャレンジを実行せず、ブラウザのようにCookieを保持せず、続けて多くのページをリクエストすることも多いため、ボット対策が止めようとしているトラフィックとまったく同じに見えることがあります。主な原因は次のとおりです。

ファイアウォールによるブロックとrobots.txtによるブロックはどう見分ける?

robots.txtによるブロックは丁寧なお願いです。クローラーはルールを読み、ページを取得しません。ファイアウォールによるブロックは応答です。クローラーはページをリクエストし、別のものを受け取ります。後者は直接確認できます。ブラウザのユーザーエージェントとクローラーのユーザーエージェントで同じページを2回リクエストし、結果を比べます。

for UA in "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" \
          "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot"; do
  curl -s -o /dev/null -w "%{http_code} %{size_download}\n" -A "$UA" https://example.com/page
done

ファイアウォールによるブロックの兆候は次のとおりです。クローラーにだけステータス403、429、503が返る。タイトルがJust a moment...やAttention Required! | Cloudflareのページが返る。本文に/cdn-cgi/challenge-platformが含まれる。ブラウザよりずっと短い200の応答が返る。なお、このテストはクローラーの検証済みIPレンジではなく自分のIPから行われるため、わかるのはファイアウォールがユーザーエージェントをどう扱うかであり、本物のクローラーの扱いのすべてがわかるわけではありません。

CloudflareでAI検索クローラーを許可するには?

CloudflareのAI Crawl Controlは全プランで利用でき、ドメインを訪れるAIクローラーを一覧表示し、それぞれにアクションを設定できます。ダッシュボードでAI Crawl Controlを開き、Crawlersの一覧でクローラーごとにActionの列からAllowまたはBlockを選びます。Cloudflareによると、ここでブロックすると、ゾーンにWAFのカスタムルールが作成または更新されます。

クローラーをブロックしているのがWAFのカスタムルール、Super Bot Fight Mode、レート制限である場合は、検証済みボットとクローラーのトークンに対して、それらの機能をスキップするカスタムルールを追加します。

Security → WAF → Custom rules → Create rule
  Expression: (cf.client.bot) or (http.user_agent contains "OAI-SearchBot")
  Action: Skip → All remaining custom rules, Super Bot Fight Mode, Rate limiting
Also: AI Crawl Control → OAI-SearchBot → Allow

このルールは先頭に置いてください。ユーザーエージェントでの照合では、そのユーザーエージェントを偽装する相手も通してしまう点に注意が必要です。可能であれば、検証済みボットのフィールド(cf.client.bot)や、ベンダーが公開しているIPレンジを優先してください。

Bot Fight Modeはどうなる?

CloudflareのドキュメントはBot Fight Modeについて、WAFのカスタムルールやPage Rulesでバイパスやスキップはできないと明記しています。クローラーにチャレンジを出している機能がこれなら、スキップルールは役に立ちません。選択肢は、Bot Fight Modeをオフにするか、対応するプランでSuper Bot Fight Modeを使うことです。Super Bot Fight ModeはRuleset Engine上で動作し、スキップルールに対応しています。

どのクローラーを通すべき?

クローラーは役割で分けて考えます。検索とユーザーによる取得のクローラーは、AIの回答があなたを見つけて引用できるかを左右します。学習用のクローラーはモデルのためにデータを集めるものであり、ブロックするのは正当な選択で、AI検索から外れることにはなりません。

Cloudflare自身のポリシー設定も、Search、Agent、Trainingという同じ分け方をしているため、最初の2つを許可して、3つ目は別に判断できます。ほかのファイアウォールやCDNを使っている場合も原則は同じです。クローラーのトークンを許可リストに入れ、ベンダーが公開しているIPレンジや、提供されていればリバースDNSで検証し、ブラウザと同じ応答が返るようにします。

AISeeWhyはファイアウォールのブロックをどう検出するのか

AISeeWhyは、14種類のクローラーと通常のブラウザとしてページをリクエストし、ステータス、サイズ、リダイレクトを比較し、チャレンジページを識別して、応答したファイアウォールやCDNを特定します。robots.txtがクローラーを許可しているのにサーバーがブロックしている場合、レポートにその食い違いが表示され、修正のためのCloudflareのルールや許可リストの手順が示されます。

よくある質問

CloudflareはデフォルトでAIクローラーをブロックする?

アカウント、プラン、ゾーンの設定によって異なり、Cloudflareもこれらのオプションを時期によって変更してきました。思い込みで判断せず、AI Crawl Controlとボット設定を確認し、クローラーのユーザーエージェントでテストしてください。

ブラウザでは表示されるのに、クローラーでは表示されないのはなぜ?

ファイアウォールはリクエストごとに判断します。ブラウザはJavaScriptのチャレンジを通過してCookieを保持しますが、クローラーはそうしないため、あなたには見えないチャレンジページや403が返されることがあります。

WAFでAIクローラーを許可しても安全?

ベンダーが公開しているIPレンジやCloudflareの検証済みボットのシグナルで検証すれば、名前を指定したクローラーの許可はリスクが低いものです。ユーザーエージェントだけを信頼するルールでは、それをコピーしただけの相手も通してしまいます。

Cloudflareのメールアドレス難読化機能はAIクローラーに影響する?

メールアドレスを、スクリプトでしか復号できないリンクに置き換えるため、クローラーにはアドレスではなくプレースホルダーが見えます。連絡先のメールアドレスを読み取れるようにしたい場合は、Scrape ShieldのEmail Address Obfuscationをオフにして、アドレスをプレーンテキストで表示してください。

参考資料

ほかの記事