1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflare Bot Fight ModeでOGPが表示されない問題の恒久対策

1
Last updated at Posted at 2026-04-20

はじめに

個人開発でバイクポータルサイト MotoHub を運営しています。

先日、Aboutページに運営者情報とog:image(SNSシェア時のサムネイル画像)を追加してデプロイしたのですが、OGP確認ツール(ラッコツールズ)や Facebook Sharing Debugger で画像が取得できないという問題に遭遇しました。

HTMLソースを見ると <meta property="og:image" content="..."> は正しく出力されている。画像ファイルもブラウザから直接開ける。それなのにOGPツールからは取得できない。

原因は Cloudflare の Bot Fight Mode が SNSクローラーもブロックしていた ことでした。

この記事では、原因特定の過程と、WAFカスタムルールを使った恒久対策を紹介します。同じ問題で困っている方の参考になれば幸いです。

環境

  • CDN: Cloudflare(Free プラン)
  • Bot Fight Mode: ON
  • 対象: Laravel 12 + Blade テンプレートの Aboutページ
  • OGP設定: Bladeの <x-slot:ogImage> で指定

症状

発生した問題

  1. ラッコツールズで https://motohub.jp/pages/about を確認 → 「OGPイメージ指定がありません」 エラー
  2. Facebook Sharing Debugger でも同様にOGP画像が取得できない
  3. しかし、ブラウザでページのソースを見ると og:image タグは正しく出力されている
  4. 画像ファイル自体も https://motohub.jp/images/about-ogp.png で直接開ける

ブラウザでは正常、OGPツールではNG

image.png

この時点で「人間のアクセスは通るが、ボットのアクセスは何かに遮断されている」という仮説が立ちました。

原因特定までの切り分け

ステップ1:HTMLソースを確認

まず、実際に配信されているHTMLに og:image タグが含まれているか確認しました。

curl -s https://motohub.jp/pages/about | grep "og:image"

ブラウザで開いた時のソースには確かに以下が出力されていました:

<meta property="og:image" content="https://motohub.jp/images/about-ogp.png" />

HTMLは正しい。 ということは、ラッコツールズやFacebookのクローラーが取得しているHTMLが、ブラウザで見ているものと違うという可能性が浮上しました。

ステップ2:キャッシュ疑惑の切り分け

以下を順番に試しました:

  1. Cloudflareのキャッシュパージ(Custom Purge で該当URLを指定)
  2. Laravel のキャッシュクリア(php artisan view:clear 等)
  3. URLに ?v=20260420 のようなクエリを付けて再取得

それでも改善しない。キャッシュではない。

ステップ3:Bot Fight Mode を疑う

Cloudflareダッシュボードの設定を見返していて、Bot Fight Mode がONになっていることに気づきました。

Bot Fight Modeは、悪質なボットアクセスをJavaScriptチャレンジなどでブロックする機能ですが、許可リストが緩く、SNSクローラーや検索エンジンBotも巻き込んでブロックしてしまう可能性があります。

ステップ4:一時OFFで検証

検証のため Bot Fight Mode を一時的にOFFにしました:

Cloudflareダッシュボード → Security → Bots → Bot Fight Mode → トグルOFF

5分ほど待ってからラッコツールズで再確認すると、OGP画像が正常に取得できました!

これで原因が Bot Fight Mode であることが確定です。

恒久対策:WAFカスタムルールで善良Botを許可

Bot Fight Mode を OFF にしたままだと、悪質なBotアクセスが増えるリスクがあります(MotoHubでは過去に Council Bluffs / Singapore からのBot大量流入の実績あり)。

そこで、善良なSNSクローラーと検索エンジンBotだけを明示的に許可しつつ、Bot Fight Modeは有効化する構成にしました。

WAFカスタムルールの作成

Cloudflareダッシュボード → Security → Security rules → Custom rules → Create rule

以下の設定を入力します:

ルール名

Allow social media and SEO crawlers

Expression(マッチ条件)

「Edit expression」をクリックして、以下を直接貼り付け:

(http.user_agent contains "facebookexternalhit") or 
(http.user_agent contains "Facebot") or 
(http.user_agent contains "Twitterbot") or 
(http.user_agent contains "LinkedInBot") or 
(http.user_agent contains "Slackbot") or 
(http.user_agent contains "Discordbot") or 
(http.user_agent contains "WhatsApp") or 
(http.user_agent contains "TelegramBot") or 
(http.user_agent contains "LINE") or 
(http.user_agent contains "Pinterest") or 
(http.user_agent contains "Applebot") or 
(http.user_agent contains "Googlebot") or 
(http.user_agent contains "bingbot") or 
(http.user_agent contains "DuckDuckBot") or 
(http.user_agent contains "YandexBot") or 
(http.user_agent contains "Baiduspider") or 
(http.user_agent contains "rakko")

User-Agent文字列で、許可したいBotを網羅的に列挙しています。

Action

Skip を選択。

image.png

Freeプランでも Skip アクションは使えるようになっています(以前はPro以上限定でしたが仕様変更されました)。

WAF components to skip

以下にチェック:

  • All remaining custom rules
  • All Super Bot Fight Mode Rules

この2つが重要です。特に All Super Bot Fight Mode Rules にチェックを入れないと、Bot Fight Mode がスキップされず、結局ブロックされたままになります。

チェックしない項目(攻撃対策は残す):

  • ❌ All rate limiting rules
  • ❌ All managed rules

Deploy

「Deploy」ボタンでルールを有効化します。

Bot Fight Mode を再ON

設定画面で Bot Fight Mode のトグルをONに戻します。

動作確認

image.png

5分ほど待ってから、再度OGPツールで確認します:

OGP画像が正常に取得できれば完了です。

波及効果:1つの設定で広がる5つの改善

この対策を入れたことで、OGP表示問題の解決にとどまらず、以下のすべてが改善されました:

1. SNSシェア時のOGP表示

X(旧Twitter)、Facebook、LINE、Discord、Slack など主要SNSでリンクをシェアした時に、サムネイル画像が正常に表示されるようになりました。画像付きシェアはクリック率が2〜3倍違うと言われており、SNS流入の改善に直結します。

2. 検索エンジンのクロール正常化

Googlebot、bingbot、Applebot なども Bot Fight Mode の対象になっていた可能性があり、これらを明示的に許可することでクロールが安定します。

3. Google Search Console のデータ取得安定化

GSCはGooglebotでクロールしたデータを元にレポートを生成するため、クロールが安定するとGSCの検索順位データ取得精度が向上します。

4. 被リンク獲得機会の拡大

Pinterest、LinkedIn などでシェアされた際にOGP画像付きで展開されるため、画像経由の被リンクや流入獲得がしやすくなります。

5. SEOツール分析の正常動作

Ahrefs、Screaming Frog などのSEO監査ツールも User-Agent ベースで許可されるため、自分のサイトのSEO分析が詰まらずに完走するようになります。

なぜこの設定で安全なのか

「Botを許可するって、セキュリティ的に大丈夫?」と思われるかもしれません。

このルール設計のポイントは、既知の善良なBotのUser-Agentだけを明示的に列挙している点です。未知のBotや攻撃系のBotは引き続き Bot Fight Mode でブロックされます。

もちろん User-Agent 偽装は可能ですが、CloudflareはBot Management(有料プラン)で User-Agent + IP + 挙動パターンによる検証を行います。Freeプランの Bot Fight Mode でも IP reputation ベースの検知はある程度機能します。

重要なのは、一律ブロックするのではなく、リスクとベネフィットのバランスを取ることです。

教訓

今回の件で得た学びを3つにまとめます:

1. セキュリティ設定は可視性とトレードオフ

Bot Fight Mode は強力なBot対策ですが、善良なBotを巻き込む可能性があります。SEOとSNS流入は現代のWebサービスにとって生命線なので、セキュリティ設定を入れる時は必ずクローラーアクセスへの影響を確認すべきです。

2. 原因特定は「切り分け」が命

今回は以下の順序で切り分けたことで、素早く原因にたどり着けました:

  1. HTMLソース確認(Bladeテンプレートの問題か?)
  2. 画像ファイル直接アクセス(配信は正常か?)
  3. キャッシュ疑惑(Laravel / Cloudflare)
  4. Bot Fight Mode 一時OFF検証

「何が起きているか」を観察し、「何が起きていないか」を一つずつ潰していくことで、見えない問題が見えてきます。

3. 1つの設定が広範囲に影響する

今回の WAF カスタムルールは、OGP問題の解決目的で追加しましたが、副次的にSEO・検索エンジンクロール・SEOツール・SNS流入すべてに好影響を与えました。

クリティカルパス上の設定ほど、副次効果も大きいということを実感しました。

まとめ

Cloudflare の Bot Fight Mode は有用な機能ですが、デフォルトのままだと SNSクローラーや検索エンジンBotもブロックしてしまうことがあります。

以下の3ステップで恒久対策できます:

  1. WAF Custom rules で善良Bot許可ルールを追加
  2. Action は「Skip」、Super Bot Fight Mode Rules をスキップ対象に
  3. Bot Fight Mode は引き続きON

この設定により、セキュリティを維持しつつOGP・SEO・SNS流入すべてを改善できます。

同じ問題で困っていた方の参考になれば幸いです。

関連リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?