📄Cloudflare 無料プランの WAF を 2026 年版に組み直した — カスタムルール 5 枠の使い方 で Cloudflare 無料プランの WAF と AI bot policies を組み直してから数日後、別サイトの Google Search Console で妙なことに気づきました。
このブログ(notion.washo3.com)の sitemap は普通に読めているのに、同じ Cloudflare アカウントにぶら下がっている別サイト(scribble.washo3.com)だけ、sitemap.xml が取得できないというエラーが出ていました。
セキュリティ設定はドメイン全体で同じはずなのに、なぜ片方だけ症状が出るのか、しばらく考え込みました。
まず確認したこと
- ブラウザから
https://scribble.washo3.com/sitemap.xmlに直接アクセスしてみましたが、普通に開けました。 -
robots.txtも sitemap を正しく案内していて、XML 側の中身にも問題は見当たりませんでした。 - 同じ Cloudflare ゾーン設定を共有しているこのブログの sitemap は、Search Console から問題なく読めていました。
※ ここまでで「サイト固有の何か」が原因だろうという当たりはつきましたが、具体的に何が違うのかはまだ分かっていませんでした。
症状
- 動いていたもの:ブラウザからの sitemap.xml 閲覧、robots.txt の記載、このブログ側の sitemap 取得。
- 動いていなかったもの:scribble.washo3.com だけ、Search Console 経由の sitemap 取得が HTTP 403 で失敗。
- Cloudflare のセキュリティ設定自体は、ドメイン全体(サブドメイン共通)で同じものが効いているはずでした。
調べたこと
Cloudflare の Security Events を確認したところ、Googlebot 本物からのアクセスがブロックされている記録が残っていました。
Security Events の詳細(長いので折りたたみ)
| 項目 | 値 |
|---|---|
| 時刻 | 2026-08-28T23:41:04Z(2026-08-29 08:41 JST) |
| IP / ASN | 66.249.79.76 / Google LLC (AS15169) |
| User-Agent | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
| パス | /sitemap.xml |
| Action | block |
| ルール | Block AI training crawlers on ad pages |
| source | firewallManaged |
ルール名に「on ad pages」とあるのが引っかかりました。
このブログには広告がありませんが、scribble.washo3.com のほうは広告を表示していて、ads.txt(AdSense の publisher ID を書いたファイル)を置いていました。
📄Cloudflare 無料プランの WAF を 2026 年版に組み直した — カスタムルール 5 枠の使い方 の設定時、AI bot policies では Search を許可、Training と Agent はブロックにしていました。
Cloudflare の定義では、Training には Search と Training を兼ねる mixed-purpose なクローラーも含まれていて、2026 年時点の Googlebot はこの mixed-purpose 判定を受けるとのことです。
ふと思い出したこと
広告を出していないこのブログでは、ゾーンに ads.txt がないため「広告ページ」判定を受けず、Training ブロックの影響も受けていなかったのだと思います。
一方 scribble.washo3.com は ads.txt がゾーンに存在することで、Cloudflare の広告検出がサイト全体に効いてしまい、Hugo 側で広告表示を切り替えているページ単位の話ではなく、ゾーンごと「広告つきサイト」として扱われていたようでした。
結果として、Search を許可していたつもりでも、Training ブロックが mixed-purpose の Googlebot ごと止めてしまい、sitemap.xml の取得まで 403 になっていた、というのが今回たどり着いた説明です。
結論
原因は、scribble.washo3.com に広告表示用の ads.txt があったことで、Cloudflare に「広告つきサイト」として判定され、AI bot policies の Training ブロックのルール(Block AI training crawlers on ad pages)が Googlebot の sitemap 取得まで巻き込んでいたことでした。
直し方はシンプルで、Cloudflare ダッシュボードの Security > Settings > Configure AI bot policies を開き、Training を Allow(ブロックしない) に変更するだけです。
Search は許可のまま、Agent はブロックのままで問題ありません。
変更後、Search Console で sitemap を再テストし、Security Events で同じ /sitemap.xml のリクエストが block されていないことを確認しました。
補足
GPTBot のような純粋な学習クローラーだけを止めたい場合は、AI bot policies の Training を一括ブロックするのではなく、AI Crawl Control でボットごとに Block する方法もあるようです。
Training のプリセットを丸ごとオンにしている限り、mixed-purpose 判定の Googlebot も一緒に落ちてしまうので、この切り分けは覚えておきたいところです。
参考にした Cloudflare の公式ドキュメント
まとめ
同じ Cloudflare 設定を共有しているつもりでも、ads.txt の有無だけで「広告つきサイト」判定が分かれ、AI bot policies の影響範囲まで変わってしまうというのは、正直盲点でした。
広告なしのサイトでは気づけない問題だったので、もしかすると私の環境(ads.txt を置いているサイトと置いていないサイトが同居している構成)特有の話かもしれません。
また別サイトを増やしたときに同じことで悩みそうなので、再度メモしておきます。