SEO では欠かせない meta タグのnoindex。
WordPress では通常の静的 HTML サイトと違いテンプレートから一律にヘッダ情報が読み込まれることから、ページごとに noindex を付けるのは面倒です。
「All in One SEO Pack」や「WordPress SEO by Yoast」などのプラグインでも可能ですが、これらを使わずより柔軟、かつ記事投稿時に手間をかけないよう noindex タグを任意のページで出力させる方法を紹介します。
IF 文を使った条件分岐で必要なページに meta タグを出力
ヘッダテンプレートであるheader.php
に加えることで任意に noindex タグを生成します。
条件を指定すればいろんなページに自動出力できますので、いくつかパターンを用意しておきます。
なお、今回はnofollow 属性はつけていませんが、用途に応じて変更ください。
カスタムフィールドで指定したページ
<?php
if (get_post_meta($post->ID, "noindex", true)){
echo '<meta name="robots" content="noindex">';
}
?>
記事投稿時に noindex という名前のカスタムフィールドを作成して値を入力します。
add_meta_box()
を使ってラジオボタンにもできますが、ここではカスタムフィールドに入力があれば、noindex を出力するというシンプルな実装としました。
とくに値は指定していませんので、値は1でも0でも noindex でも、適当なもので構いません。
日付アーカイブ・タグページ・検索ページ
<?php
if (is_date() || is_tag() || is_search()){
echo '<meta name="robots" content="noindex">';
}
?>
日付アーカイブ・タグページ・検索ページには無条件で noindex タグを出力します。
また、add_action を用いてfunctions.php
で定義することもできます。
<?php
function no_index(){
if (is_date() || is_tag() || is_search()){
echo '<meta name="robots" content="noindex,nofollow">';
}
}
add_action('wp_head','no_index');
?>
指定カテゴリーに属するページ
<?php
if (in_category(array('カテゴリー1','カテゴリー2')) && is_single()){
echo '<meta name="robots" content="noindex">';
}
?>
カテゴリー1とカテゴリー2に属する記事に noindex タグを出力します。
ちなみに&& is_single()
という条件を外すとカテゴリーページにも noindex タグが出力されます。
指定カテゴリーに属するページ+カスタムフィールドで指定したページ
<?php
if (in_category(array('カテゴリー1','カテゴリー2')) && is_single() or get_post_meta($post->ID, "noindex", true)){
echo '<meta name="robots" content="noindex">';
}
?>
noindex タグ付与の実践事例
参考までにカスタムフィールドを使わず、ある程度の決められたルールで noindex タグを自動付与する実用例パターンを付け加えておきます。
カテゴリーを含むアーカイブ系・タグページ・検索結果・ページの2ページ目以降
<?php
if(
is_archive() || //アーカイブ系ページ
is_tag() || //タグページ
is_paged() || //ページの2ページ目以降
is_search() //検索結果
){
echo '<meta name="robots" content="noindex">';
}
?>
カテゴリー以外のアーカイブ系・タグページ・検索結果・ページの2ページ目以降、および、指定の固定・カテゴリー
<?php
if((is_archive() && !is_category()) || //カテゴリー以外のアーカイブ系ページ
is_tag() || //タグページ
is_paged() || //ページの2ページ目以降
is_search() || //検索結果
is_page('ページ ID') || //指定の固定ページ
in_category("カテゴリースラッグ")) //カテゴリの記事
){
echo '<meta name="robots" content="noindex">';
}
?>
※既存記事も一括で処理できますし、投稿する際に何も考えなくてよいので、カテゴリーの条件分岐で noindex タグを自動出力する形は楽かなと思います。
このあたりは既存のプラグインではなかなか難しいところです。
「noindex を任意ページに出力する」への5件の返信
早速のご返事ありがとうございます。
検索結果に乱列したのを見つけたのは、
『site:サイト名』で1時間以内にインデックスされたページを検索かけたのがきっかけでした。
canonicalがポスト名に向いていれば問題ない&評価にも影響しないこと、承知いたしました。ありがとうございますm(_ _)m
二日間調べて解決方法がなかったので、非常に助かりました。ありがとうございます。
コメントページがインデックスされてしまい、
comment-page-2
comment-page-3
など検索結果に同じ記事が乱列してしまっています。
コメントページだけをnoindexにするには、どのように命令したら良いのでしょう。
よろしくお願いします。
こんにちは、minさん。
なるほどです。
これは考えたことなかったです。
パーマリンクがデフォルト設定の場合はパラメータで接続されますので、同一ページと認識されます。
example.com/?p=1311&cpage=1#comments
これはGoogleの評価に影響を与えません。
しかし、パーマリンク設定によってはパラメータで接続されないようですね。
example.com/1311/comment-page-1/#comments
2ページ目はハッシュの前の番号が変わるので、いわゆる重複コンテンツの類です。
example.com/1311/comment-page-2/#comments
検索結果に出ること自体に問題があるということであれば、たしかにnoindexですが、本来、これはcanonicalで処理するべきです。
コメントにGoogleが注目しているのは悪いことではないです。
テーマにもよると思いますが、コメントページのcanonical URLはどうなっていますか?
元のページ、上記の例でいけば
link rel="canonical" href="example.com/1311/"
であれば問題ありません。ご返信ありがとうございます。
パーマリンクは、ポスト名です。
https://サイト名/post名/comment-page-1/
…
https://サイト名/post名/comment-page-15/
といったURLで検索結果に乱列してます。これは重複コンテンツとして評価を下げられるでしょうか?
コメントページのcanonical URLは元のページ『https://サイト名/post名/』との記載があります。
おはようございます。
サイト名/post名/comment-page-1/の形であれば、違うページとしての認識です。
つまり、重複コンテンツに該当しますね。
しかし、canonicalが元の『https://サイト名/post名/』に向いていれば、問題ありません。
もちろん評価にも影響しません。
検索結果に乱列ということですが、それは特定のキーワードではなく、URLで検索した際ということですよね?
であれば、気にする必要はないと思いますよ。