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

ヘッダ画像

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

コメント一覧

  1. min より:

    コメントページがインデックスされてしまい、
    comment-page-2
    comment-page-3

    など検索結果に同じ記事が乱列してしまっています。

    コメントページだけをnoindexにするには、どのように命令したら良いのでしょう。

    よろしくお願いします。

    • R3098 より:

      こんにちは、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/"であれば問題ありません。

      • min より:

        ご返信ありがとうございます。

        パーマリンクは、ポスト名です。
        https://サイト名/post名/comment-page-1/

        https://サイト名/post名/comment-page-15/
        といったURLで検索結果に乱列してます。これは重複コンテンツとして評価を下げられるでしょうか?

        コメントページのcanonical URLは元のページ『https://サイト名/post名/』との記載があります。

        • R3098 より:

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

  2. min より:

    早速のご返事ありがとうございます。

    検索結果に乱列したのを見つけたのは、
    『site:サイト名』で1時間以内にインデックスされたページを検索かけたのがきっかけでした。

    canonicalがポスト名に向いていれば問題ない&評価にも影響しないこと、承知いたしました。ありがとうございますm(_ _)m

    二日間調べて解決方法がなかったので、非常に助かりました。ありがとうございます。

コメントを残す

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


The reCAPTCHA verification period has expired. Please reload the page.



関連記事