特定のカテゴリーに入るすべての記事に「noindex」をしたところ、なぜかトップページにも効いてしまう問題が起きました。
検索エンジンへのインデックス登録を拒否するものとして「noindex」がありますが、これがらみでなぞの現象が起きました。
特定のカテゴリー内の全記事を一括で「noindex」にすると、なぜか関係ないトップページまでもが「noindex」になってしまうというものです。
トップページに自動で「noindex」がつくというのは、ブログ自体を検索エンジンに登録しないでくださいといっているようなもので、はっきりいって致命的です。かなりヤバい問題としか思えません。
しかし、原因の究明と対策に乗りだしたところ、いちおう私の環境では、なんとか問題の特定と解決に成功!
レアなケースかもしれませんが、今回は、この問題が発生したときの状況と、そのときにとった対策についてのこしておきます。
トップページに勝手に「noidex」がつく問題の状況
(画像:なぜかトップページに「noindex」がついている)
まず、今回の問題が起きた環境は以下のとおりで、
- WordPress:Ver.5.8.1
- テーマ:TwentyTwelve
発生した問題の状況は以下のとおりです。
- 特定のカテゴリー(Aとする)内の過去記事すべてを「noindex」にする
- カテゴリー(A)の記事だけ「noindex」が効いている
- 新規で作成した特定のカテゴリー(Bとする)内の記事を「noindex」にする
- カテゴリーA&Bの記事+トップページが「noindex」になっている
- Aの「noindex」を外してもB+トップページは「noindex」のままになっている
かなりきてますね。まったく意味がわかりませんでした。
「noindex」ができているかは、「Nofollow」というクロームの拡張機能を利用すれば確認できます。
カテゴリー内の記事を一括で「noindex」した時だけ起こる
状況をくわしく説明します。
カテゴリー内の記事すべてを「noindex」にしたい場合、たとえば以下のようなコードを子テーマの「functions.php」に書き込むことで実装できます。
function set_noindex(){
if ( in_category( 'カテゴリーID' ) ) {
echo '<meta name="robots" content="noindex,follow">';
}
}
add_action('wp_head', 'set_noindex');
「in_category」または「has_category」という関数を使用することで、かっこ内で指定したカテゴリーの記事すべてを一発で「noindex」にできるわけです。
さて、これを使用して、私は投稿済みの記事が入っている過去に作成したカテゴリー(A)をまずは「noindex」。
ここは問題なかったので、つづいて、新しく投稿した記事が入っている、新規で作成したカテゴリー(B)も「noindex」することにしました。
すると、ここで問題が発生します。
新規で作成したカテゴリー(B)を「noindex」にすると、なぜかブログのトップページまでもが「noindex」になってしまうのです!
カテゴリー(B)以前に作成したものをそうするぶんには問題はなく、記事単位での指定でも問題なし。
問題が起こるのは、新規で作成した記事が入っている特定のカテゴリー内の記事すべてを「noindex」にした場合のみとなっていました。
原因は一番上の記事についた「noindex」だった
まとめると、これまでは「in_category」で「noindex」できていたのに、新しくつくったカテゴリーでそれをしようとすると、なぜかトップページまでもが「noindex」されるようになってしまった、という問題です。
わけがわからない問題だったので、原因の特定には骨を折りましたが、ここはなんとかこぎつけることができました。
最終的には、いちばん上にある記事が属しているカテゴリーにたいして一括で「noindex」をしようとすると、トップページまで「noindex」になる、ということが判明したのです!
これは、テーマに問題があるのか、カスタマイズでなにかおかしなことが起きてしまったのか、それは正直なところよくわかりません。
ただ、はっきりとしたのは、最新の投稿(トップページで投稿を上から順番にならばせている場合の1番目の記事)が入っているカテゴリーで「in_category」または「has_category」を使うとそうなる、ということ。
現に、2番目以降の記事で問題がなかったものをいちばん上に持ってくると、こんどは過去に作成した記事&カテゴリーでもそうなるなど、現象を再現することもできました。
すこしまえの情報で、似たような話(関係ないトップページが「noindex」になってしまう)も見かけたので、もしかすると、原因は古いテーマにあるのかもしれません。
解決策は「header.php」に「noindex」を書き込む
現象はまったくのなぞとはいえ、原因は特定できたわけで、ここでは以下の解決策がありました。
- 「noindex」は記事単位でおこなう
- 「functions.php」ではなく「header.php」に記述する
「noindex」を記事単位でおこなえば、記事がどこにあろうと(いちばん上にあったとしても)問題は起きなかったので、これがベストな解決策にも思われました。
しかしながら、カテゴリー内の記事をすべて「noindex」にしたいというのは、記事単位で毎回そうするのが面倒だからそうしているわけです。
記事単位で設定、サイトマップのプラグインのほうでも設定(これをしないとGoogleのツールであるサーチコンソールでエラーが出ることがある)、なんてことになってしまえば、そのカテゴリーに入る記事を書く気も失せてくるというものですよね。
そこで、今回の対策として採用したのが②の「header.php」で「noindex」を指定するという選択肢です。
具体的には、以下のコードを子テーマの「header.php」に書き込みました。
<?php
if( in_category( array('ID-A','ID-B'))){
echo '<meta name="robots" content="noindex,follow">';
}
?>
カテゴリーID(A)と(B)だったら、それだけを「noindex」にする、というもので、書いた場所は以下のとおりです。
<?php wp_head(); ?>は、</head>のすぐ上にあったほうがいいそうなので、その上にさきほどのコードを書いておきました。
後半の「follow」は、検索エンジンに確認だけはしておいてください、のような指示をするもので、「nofollow」にすると確認しなくてもいいですとなります。どっちにしても最終的には変わらないらしいので、これはどちらでもよさそう。
そして、私の環境では、これだけで問題は解決。
つまり、カテゴリーごと「noindex」にした記事がいちばん上にあろうとなかろうと、トップページに「noindex」はつくことはなく、指定したカテゴリー内の記事にはきちんと「noindex」がついていた、ということです!
私の環境に問題があるような気もするので、ほとんどこのようなことは起こらないようにも思えますが、もしおなじようなことでお困りでしたら、ご参考にしてみてください。
今回のまとめ
・原因はいちばん上の記事が関係していたらしい
・ひとまず「header.php」に書き込むことで回避は可能
特定のカテゴリーの記事を全部「noindex」にするというのは、基本的にはあまり使わないワザだと思います。
じっさいに私もこれまでしてこなかったからこそ、こんなことはこれまでなかったわけですが、環境によっては、わりと致命的ともいえるなぞの現象(不具合?)も起こることが今回でわかりました。
私が使用しているテーマ「TwentyTwelve」は2012年リリースと古いものなので、もしかするとこのテーマにも問題があるのかもしれません。
そろそろ変えどきということなのでしょうか……。
まあ、それはいいとして、「noindex」を使用するときは、きちんと動作しているかは確認したほうがよさそうですね。
コメント(確認後に反映/少々お時間をいただきます)