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という名前のカスタムフィールドを作成して値を入力します。
このカスタムフィールドに入力があれば、noindexを出力するというシンプルなものです。
とくに値は指定していませんので、値は1でも0でもnoindexでも、適当なもので構いません。

日付アーカイブ・タグページ・検索ページ

<?ph
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 より:

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

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

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

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

  2. 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で検索した際ということですよね?
          であれば、気にする必要はないと思いますよ。

コメントを残す

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



関連記事

知ってる?canonicalタグの意味と基本!WordPressでの使い方 検索エンジンにサイトの構造を知らせるSEOで重要な役割のcanonical(カノニカル)というメタタグ。記事前半はその意...

新規のWordPressサイトの立ち上げの手順書 WordPressでサイトを立ち上げる際にSEOを意識してこれだけはやっておきたいという項目をまとめたいと思います。Wo...