Tips

WordPressのshutdownフックが「robots.txtが無効です」を引き起こす件

記事内に商品プロモーションを含む場合があります

ある日、当サイトのrobots.txtに異常があることがわかりました。原因を調べていくとshutdownというhookの使い方にあることがわかりました。対応方法もご説明します。

ある日PageSpeed Insightsで問題に気づく

ある日、PageSpeed Insightsでサイト速度の計測してみました。

そこで問題が起きていることに気がつきました。

「robots.txtが無効です」と表示され、その後、JavaScriptのコードが表示されているのです。

実際に

https://proggy.jp/robots.txt

にアクセスし、表示してみると、

と、通常のrobots.txtの内容の下に、JavaScriptのコードが出力されていました。

これでGoogleの検索エンジンからrobots.txtが無効と認識されてしまい、しばらくSEO的に不利益を被っていました。

原因はshutdownフックの使い方

ある自作のプラグインで、HTML内の最後にJavaScriptを書き込むために、以下のようにしておりました。

上のコードの最終行でshutdownというhookを使って実行させていました。

このhook、HTMLの最後の最後に出力できるため、表示要素のロードの邪魔をせずにJavaScriptを書き込めるので便利だなーと思っておりました。

しかし、shutdownというhookは、通常のページだけでなく、robots.txtのような特殊なURLにリクエストする際も実行されるものということがわかりました。(名前の由来をよく考えたら当然か)

代わりのhookはwp_print_footer_scripts

shutdownは使えないということがわかったので、代わりのhookを探しました。

Action Reference

最初はwp_footerかなと考えましたが、wp_print_footer_scriptsの方が、実行順序が後ということがわかり、名前もscriptを記載する目的に適っています。

shutdownは完全にHTMLが終わった後に出力できました。それに対して、wp_print_footer_scriptsはテーマのfooter.php内の wp_footer() 実行時に起動するようなので、テーマによってはどうしてもHTMLの最後の最後に出力というわけにはいきません。とはいえ、他にこれより後に起動するhookは無いようなので、諦めるしかないですね。

robots.txtを操作するためのhook

そもそもrobots.txtを操作するためのhookも一応用意されています。その名もrobots_txtです。

【WordPress】自動で出力される[仮想robots.txt]をカスタマイズする方法

さいごに

今回のようにWordPressに関する知識不足により、知らぬ間にPageSpeed Insights上で指摘事項が発生してしまうことが何度がありました。以下もその一つです。

WordPressでclean_urlフィルターでのdefer、asyncの付与はNGWordPressでテーマやプラグインで使われるJavaScriptを遅延や非同期読み込みするために、clean_urlを使ってdefe...

対策としては、

  • なるべくトリッキーな使い方をしない
  • PageSpeed Insightsで確認する頻度を上げる(もしくは自動化)

が考えられます。参考にして頂けたらと思います。

そして、一つお願いしたいことがあります。

もしこの記事がお役に立てたのなら、下のボタンからSNSでシェアするか、あなたのブログでご紹介頂けないでしょうか?検索エンジンの仕組みで、同じ問題で今困っている方の目に届きやすくなります。もちろん、私としても記事を書くモチベーションになります。

記事への要望やダメ出しを書いて頂いても嬉しいです。定期的にエゴサーチしており、今後の記事で活かさせて頂きます。よろしくお願いいたします!