ブログの始め方・WordPress・レンタルサーバー

WordPressのカテゴリーページを個別にnoindexする(プラグインなし)

WordPressのカテゴリーページを個別にnoindexする(プラグインなし)

WordPressのカテゴリーページ(カテゴリーアーカイブ)を個別にnoindex指定したいと思ったことはないでしょうか?

不要な記事を特定のカテゴリ(未分類など)にまとめてnoindexにすると、検索エンジンの評価を気にせずに済みます。

カテゴリーページはインデックスしたいけど余計なカテゴリーがいくつもあるときに役立ちます。ページを削除する前にインデックス登録を消しておくべきです

この記事ではWordPressのカテゴリー編集ページにnoindexの設定項目(カスタムフィールド)を追加する方法を解説します。プラグインを使わない方法(PHP)です。

タグ編集ページにnoindexの設定項目を追加する方法もあわせて紹介します。

カテゴリーページを個別にnoindexする

WordPressのカテゴリー編集ページに、以下のようなnoindexの設定項目(カスタムフィールド)を追加する方法を紹介します。

カテゴリー編集ページにnoindexの設定項目(カスタムフィールド)を追加する

以下のコードをfunctions.phpに追加してください。

?>
<?php
//----------------------------------------------------------
//  カテゴリー編集ページにカスタムフィールドを追加する
//----------------------------------------------------------
add_action('category_edit_form_fields', function ($term) {
  $cat_id = $term->term_id;
  $custom_field = 'category_noindex'; //カスタムフィールド名
  $value = get_post_meta($cat_id, $custom_field, true); //現在の値
?>
  <!-- 出力するHTML -->
  <table class="form-table" role="presentation">
    <tbody>
      <tr class="form-field form-required term-name-wrap">
        <th scope="row">noindex</th>
        <td>
          <label>
            <input id="<?php echo $custom_field ?>" name="<?php echo $custom_field ?>" type="checkbox" <?php checked($value, 'on'); ?>>
            <span class="widefat">noindex</span>
          </label>
          <p class="description">カテゴリーページをnoindexするかどうか。</p>
        </td>
      </tr>
    </tbody>
  </table>
<?php
}, 11);

//----------------------------------------------------------
//  値の保存
//----------------------------------------------------------
add_action('edited_category', function ($id) {
  $custom_field = 'category_noindex';
  $result = '';
  if (isset($_POST[$custom_field])) {
    $result = $_POST[$custom_field];
  }
  // フィールドを更新
  update_post_meta($id, $custom_field, $result);
});

//----------------------------------------------------------
//  noindexの出力
//----------------------------------------------------------
add_action('wp_head', function () {
  $custom_field = 'category_noindex';
  if (is_category() === true) {
    $cat_id = get_query_var('cat');
    $noindex = get_post_meta($cat_id, $custom_field, true);
    //カテゴリーページにチェックが入っている場合はnoindexを追加する
    if ($noindex === 'on') {
      echo '<meta name="robots" content="noindex">';
    }
  }
});

コードを追加するとカテゴリー編集ページにnoindexの項目が追加されます。チェックを入れたカテゴリーはnoindexが追加されて、検索エンジンにインデックスされなくなります。

以下はコード内容の解説です。

  • カテゴリー編集ページにnoindexの設定項目(カスタムフィールド)を追加する
  • カスタムフィールドの値を保存する
  • noindexを出力する

カテゴリー編集ページにnoindexの設定項目(カスタムフィールド)を追加する

noindexの設定

カテゴリー編集ページにnoindexの設定項目を追加するコードです。

?>
<?php
//----------------------------------------------------------
//  カテゴリー編集ページにカスタムフィールドを追加する
//----------------------------------------------------------
add_action('category_edit_form_fields', function ($term) {
  $cat_id = $term->term_id;
  $custom_field = 'category_noindex'; //カスタムフィールド名
  $value = get_post_meta($cat_id, $custom_field, true); //現在の値
?>
  <!-- 出力するHTML -->
  <table class="form-table" role="presentation">
    <tbody>
      <tr class="form-field form-required term-name-wrap">
        <th scope="row">noindex</th>
        <td>
          <label>
            <input id="<?php echo $custom_field ?>" name="<?php echo $custom_field ?>" type="checkbox" <?php checked($value, 'on'); ?>>
            <span class="widefat">noindex</span>
          </label>
          <p class="description">カテゴリーページをnoindexするかどうか。</p>
        </td>
      </tr>
    </tbody>
  </table>
<?php
}, 11);

カテゴリー編集ページに独自項目を追加する場合、category_edit_form_fieldsのフックを利用します。(カテゴリー追加ページに独自項目を追加するときは、category_add_form_fields)

$priority11に設定すると項目の一番下に追加されます。

このままではカスタムフィールドが保存されません。保存するためには次のコードが必要です。

カスタムフィールドの値を保存する

フォーム内のデータをカスタムフィールドとして保存します。

//----------------------------------------------------------
//  値の保存
//----------------------------------------------------------
add_action('edited_category', function ($id) {
  $custom_field = 'category_noindex';
  $result = '';
  if (isset($_POST[$custom_field])) {
    $result = $_POST[$custom_field];
  }
  // フィールドを更新
  update_post_meta($id, $custom_field, $result);
});

edited_categoryはカテゴリーが更新された後に発動するアクションフックです。

noindexを出力する

カテゴリーページ(カテゴリーアーカイブ)を開いたとき、チェックが入っているカテゴリーに対して「noindexメタタグ」を追加します。

//----------------------------------------------------------
//  noindexの出力
//----------------------------------------------------------
add_action('wp_head', function () {
  $custom_field = 'category_noindex';
  if (is_category() === true) {
    $cat_id = get_query_var('cat');
    $noindex = get_post_meta($cat_id, $custom_field, true);
    //カテゴリーページにチェックが入っている場合はnoindexを追加する
    if ($noindex === 'on') {
      echo '<meta name="robots" content="noindex">';
    }
  }
});

<head>内に出力する時はwp_headフックを使います。

これでカテゴリーページに<meta name=”robots” content=”noindex”>が追加されて、検索エンジンにインデックスされなくなります。

タグページを個別にnoindexする

カテゴリー編集ページと同様に、タグ編集ページにnoindexの設定項目を追加するコードです。

?>
<?php
//----------------------------------------------------------
//  タグ編集ページにカスタムフィールドを追加する
//----------------------------------------------------------
add_action('edit_tag_form_fields', function ($term) {
  $tag_id = $term->term_id;
  $custom_field = 'tag_noindex'; //カスタムフィールド名
  $value = get_post_meta($tag_id, $custom_field, true); //現在の値
?>
  <!-- 出力するHTML -->
  <table class="form-table" role="presentation">
    <tbody>
      <tr class="form-field form-required term-name-wrap">
        <th scope="row">noindex</th>
        <td>
          <label>
            <input id="<?php echo $custom_field ?>" name="<?php echo $custom_field ?>" type="checkbox" <?php checked($value, 'on'); ?>>
            <span class="widefat">noindex</span>
          </label>
          <p class="description">タグページをnoindexするかどうか。</p>
        </td>
      </tr>
    </tbody>
  </table>
<?php
}, 11);

//----------------------------------------------------------
//  値の保存
//----------------------------------------------------------
add_action('edited_post_tag', function ($id) {
  $custom_field = 'tag_noindex';
  $result = '';
  if (isset($_POST[$custom_field])) {
    $result = $_POST[$custom_field];
  }
  // フィールドを更新
  update_post_meta($id, $custom_field, $result);
});

//----------------------------------------------------------
//  noindexの出力
//----------------------------------------------------------
add_action('wp_head', function () {
  $custom_field = 'tag_noindex';
  if (is_tag() === true) {
    $tag_id = get_query_var('tag_id');
    $noindex = get_post_meta($tag_id, $custom_field, true);
    //タグページにチェックが入っている場合はnoindexを追加する
    if ($noindex === 'on') {
      echo '<meta name="robots" content="noindex">';
    }
  }
});

タグ編集ページでは以下のフックを使っています。

送信された URL に noindex タグが追加されています(エラー)

サイトマップ送信はWordPressにデフォルトで備わっている機能です。

noindexを利用する場合は、サイトマップからnoindex指定したページを除外しなければいけません

除外しないとSearch Consoleで「送信された URL に noindex タグが追加されています」というエラーが発生します。

送信された URL に noindex タグが追加されています

解決方法は、XML Sitemapsプラグインを使うことです。

XML Sitemapsを使えば、簡単に特定ページをサイトマップから除外できます。

ブログを作りたい人へ。
ブログを始めたいと思っても実際に何をすればいいか分からないかもしれません。ブログを作りたい人へWordPressの始め方と必要な基礎知識を解説します。具体的なブログの始め方と関連記事を一覧にまとめているので参考にしてください。
Read More