plusN コーディングとか育児とかの個人ブログ

Googleクローラーが来ない原因はrobots.txtのエラーだった話

PR

PHPとDBをアップデートしたお客様サイトで、Google広告の審査に関連してクローラー(AdsBot-Google)のアクセス確認依頼を受けました。
当初、混在コンテンツ、複数の旧GAタグが原因と考え対応を行いましたが解消せず、アクセスログ上に該当クローラーの記録が見当たらない状況だったことがわかりました。
調査の結果、/robots.txt で500エラーが発生しており、クローラーが正常にクロール可否を判断できない状態になっていました。

当初発生していた事象

以下の事象が発生していたことが判明しました。

  1. 混在コンテンツ
  2. 複数の旧GAタグの存在

という状況でした。

当初の対応

初めに、混在コンテンツの解消と旧GAタグの削除/アップデートを行いました。
これによりコード上はなんら問題ないように見えたため、広告審査を依頼しました
しかし審査が通らなかったため改めて調査したところ、クローラーがサイトをクロールできていないことが判明しました。

アクセスログの確認と原因

クローラーがクロールできていないため、アクセスログを確認することにしました。
直近のアクセスログを確認すると以下のエラーが発生している事がわかりました。

[13/Apr/2026:00:10:46 +0900] "GET /robots.txt HTTP/1.1" 500 "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

このエラーログは

  • /robots.txt にアクセス時に500エラー
  • Googlebotによるアクセスは確認できる

一方で、Google広告審査で使用されるAdsBot-Googleのアクセスはログ上で確認できませんでした。
この状況から、WordPress側でrobots.txtを動的生成しようとした際にエラー(Fatal Error)が発生していた可能性が考えられました。なお、robots.txt が500エラーとなる場合、クローラーがクロール可否を判断できず、結果としてクロールが抑制される可能性があります。

robots.txtの確認方法

/robots.txt はブラウザで「https://ドメイン/robots.txt」にアクセスすることで確認可能です。

最終的な対応内容

暫定対応として、以下の内容でルートに robots.txt を設置することにしました。
なお、WordPressでは robots.txt が存在しない場合に動的生成されますが、物理ファイル(静的な robots.txt)を設置することで、WordPressの処理を介さずに直接応答させることが可能です。

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Disallow: /*?replytocom=

Sitemap: https://sitename.com/sitemap.xml

これにより、/robots.txt は正常に200で応答する状態に改善することができ、クローラーが正常にアクセス可能な状態へ復旧し、その後、AdsBot-Googleの問題も解消する事ができました。

今回の気づき

  • クローラーが来ない ≠ ブロックされている
  • robots.txt の異常はクロール全体に影響する
  • WordPressはrobots.txtを動的生成するため、エラー要因になり得る

再発防止・チェックリスト

今後、クローラー関連の不具合時は、以下の点を確認していこうと思います。

  • /robots.txt のステータスコード確認(200 / 404 / 500)
  • アクセスログでクローラーの有無確認
  • User-Agentの確認(Googlebot / AdsBot-Google など)
  • WAF / CDN の影響確認

まとめ

今回のケースは、robots.txt が存在しないこと自体ではなく、WordPressによる動的生成時にエラーが発生し、500エラーとなっていたことが原因でした。今回の対応は応急処置のため、WordPress側で発生しているエラーの根本原因については未調査ですが、PHPバージョンアップ後の互換性問題や、プラグインのエラーが原因として考えられます。今後必要に応じて別途調査したいと思います。

PR