メインコンテンツへスキップ

robots.txtを文字列だけで読むと誤判定する RFC9309のグループ結合ルール

Cloudflareの自動管理機能がAIクローラー向けのDisallowをrobots.txtに自動挿入し、複数ドメインで意図せずブロックしていた。文字列だけを見て確認する簡易チェックでは6件を誤ってブロックと判定し、実際にブロックされていたのは1件だけだった。

この記事は、自社サイトで実測したSEO・AI検索の記録をまとめるシリーズの1本である。Cloudflareの自動管理機能がAIクローラー向けのDisallowをrobots.txtに自動挿入し、複数ドメインで意図せずブロックしていた事例と、確認方法そのものの誤りをまとめる。

この記事で分かること

  • Cloudflareの自動管理ブロックが、意図せずAIクローラーを止めていた実例
  • 文字列だけを見る簡易チェックで複数ドメインを確認すると、判定がぶれる理由
  • RFC9309が定める「グループの結合」ルール
  • 修正の実務(PATCHでは拒否され、PUTで通った)

この記事で分からないこと(正直に書く)

  • 誤判定した各ドメインについて、Cloudflareの自動ブロックがいつから入っていたかは特定していない
  • 全ドメインを標準準拠のパーサーで再検証する作業がどこまで完了しているかは、この記事の範囲では扱っていない

Cloudflareの自動管理ブロックが、AIクローラーを止めていた

自社が運用するドメインの1つで、robots.txtに# BEGIN Cloudflare Managed contentというブロックが自動挿入され、GPTBot・ClaudeBot・Google-Extended・CCBot・meta-externalagentに対してDisallow: /が指定されていた。AI検索向けにllms.txtを公開していながら、AI検索からは見えない矛盾した状態になっていた(出所: 自社の運用記録、確認日2026-09-06)。

複数ドメインを文字列チェックで確認すると、判定がぶれる

同じ管理ブロックが他のドメインにも入っていないかを確認する棚卸しを行った。robots.txtをテキストとして読み、Disallow: /という記述の有無だけで判定する簡易な確認方法では、10ドメインのうち6ドメインが依然ブロックされていると判定された(出所: 自社の運用記録、確認日2026-09-06)。

RFC9309: グループはUser-agent行で区切られ、空行では区切られない

しかし標準ライブラリのパーサ(グループ結合規則に従うもの)で評価し直すと、実際にそのクローラーへの Disallow が効いていたのは10ドメイン中1ドメインだけだった。残る5ドメインは、User-agent: CCBotAllow: / の直後に空行を挟まず User-agent: BytespiderDisallow: / が続く書き方になっており、空行でグループを区切る自作の確認方法が2つのグループを1つに結合して、別のクローラー向けの Disallow を誤って CCBot に帰属させていた(出所: 自社の運用記録、確認日2026-09-06)。

robots.txtの仕様を定めるRFC9309は「グループは次のuser-agent行かファイルの終端で終了する」とし、「同じuser-agentにマッチするグループが複数ある場合、それらのルールは1つに結合されなければならない」とも定めている(出典: RFC 9309、確認日2026-09-06)。グループの境目は空行ではなくuser-agent行で決まり、同じボットへの複数の記述は合算して評価する必要がある。Cloudflareが挿入するブロックは既存の記述の直後に空行を挟まず追記されることがあり、空行を区切りだと想定した簡易チェックはこの結合ルールを実装していないため誤りやすい。

修正の実務: PATCHでは拒否され、PUTで通った

修正は、zoneのbot_management設定にあるis_robots_txt_managedをfalseにすることで行う。PATCHでは10405番のエラーで拒否され、他の設定値も含めてPUT /zones/{id}/bot_managementを送る必要があった(出所: 自社の運用記録、確認日2026-09-06)。修正後、キャッシュのパージまで行って初めて、本番で正しいrobots.txtが配信されていることを実測で確認できた。

再発防止: 標準準拠のパーサーで評価し、棚卸しを定例化する

再発防止として、robots.txtの棚卸しは「文字列に特定の記述があるか」ではなく、RFC9309のグループ結合ルールを実装した標準的なパーサーで評価する方法に切り替えた。あわせて、Cloudflareの自動管理ブロックが混入していないかを、複数ドメインで定期的に確認する運用にした(出所: 自社の運用記録、確認日2026-09-06)。見た目の文字列だけで判定しない、という点は、ファイル名からURLを推測して誤判定したタイムゾーンの記事や、出典の件数を品質の代理にしていた出典の記事とも共通する教訓である。RAGの標本数設計についての姉妹記事は「標本数の記事」にまとめている。

自社サイトのrobots.txt・AIクローラー対応について相談したい場合は、お問い合わせから編集部まで連絡してほしい。

よくある質問

Q1. なぜAIクローラーが意図せずブロックされていたのか

Cloudflareの自動管理機能が、GPTBotやClaudeBotなどのAIクローラー向けにDisallow: /を含むブロックをrobots.txtへ自動挿入していたため。AI検索向けにllms.txtを公開していても、robots.txt側でブロックされていれば読みに行けない。

Q2. 複数ドメインを確認したとき、なぜ判定がぶれたのか

robots.txtを文字列として読み、Disallow: /の有無だけで判定する簡易な方法では、10ドメインのうち6ドメインがブロックされていると判定された。標準ライブラリのパーサで評価し直すと、実際にDisallowが効いていたのは10ドメイン中1ドメインだけだった。

Q3. RFC9309はグループの区切りについて何を定めているか

グループはuser-agent行で始まり、次のuser-agent行かファイルの終端で終わると定めている。空行では区切られない。また、同じuser-agentにマッチする複数のグループがある場合、そのルールは1つに結合しなければならないとも定めている。

Q4. 修正はどのように行ったのか

zoneのbot_management設定のis_robots_txt_managedをfalseにする。PATCHでは10405番のエラーで拒否され、他の設定値も含めてPUTで送る必要があった。修正後はキャッシュのパージまで行い、本番での配信を実測で確認した。

関連する取り組み

CONNECTED SERIES
AIで投資の壁を越える
18 本の実装記録。AI 投資の「予測不能」と言われる 9 つの壁を、コードと実データで検証した連載。
note で読む →
B2B API
Persona API
行動データから再構成した 2,245 体のペルソナを LLM 推論に注入。AI 出力の文脈リッチ化、顧客 segmentation に。
詳細を見る →

AI導入のご相談を承っています

AI導入支援の実務経験を活かし、お手伝いしています。お気軽にご相談ください。

他のカテゴリも読む

AI最新ニュース AI業界の最新ニュースと企業動向 AI導入戦略 AI投資判断・ROI分析・導入ロードマップ 業界別AI活用 製造・金融・小売など業界別のAI活用動向 導入事例 企業のAI実装プロジェクト事例とコンサルティング知見 研究論文 NeurIPS、ICMLなどの注目論文レビュー