カテゴリー
WordPressカスタマイズ

noindexを任意ページに出力する

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タグを自動出力する形は楽かなと思います。
このあたりは既存のプラグインではなかなか難しいところです。

profile image

執筆:R3098

WEBサービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などのプラグイン開発も行っています。サイト運営者の力になりたいと考えます。

「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/"であれば問題ありません。

おはようございます。
サイト名/post名/comment-page-1/の形であれば、違うページとしての認識です。
つまり、重複コンテンツに該当しますね。
しかし、canonicalが元の『https://サイト名/post名/』に向いていれば、問題ありません。
もちろん評価にも影響しません。
検索結果に乱列ということですが、それは特定のキーワードではなく、URLで検索した際ということですよね?
であれば、気にする必要はないと思いますよ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。