WordPress の noindex nofollow の制御をページ単位にカスタムフィールドを利用して設定する方法

更新日: 公開日:2015/09/08
WordPress

WordPress の個別投稿ページや固定ページにおいて、SEO の面で状況により検索エンジンのロボットに対象のページをインデックスして欲しくない場合や、リンクを辿って欲しくない場合があります。これらの制御は meta タグを利用して、noindex や nofollow を設定することで、実現することができます。

  • noindex : 検索エンジンロボットにインデックスさせない
  • nofollow : 検索エンジンロボットにリンク先を辿らせない

最終的なゴールのイメージは、次の meta タグを指定ページの head 内に生成することです。

生成する meta タグ
<!--noindex だけ定義-->
<meta name='robots' content='noindex,follow' />

<!--noindex と nofollow を定義-->
<meta name='robots' content='noindex,nofollow' />

既存の標準機能だけで実現できるか

WordPress の標準機能では、サイト全体を Google や Yahoo などの検索エンジンにインデックスさせない設定を行うことはできます。ダッシュボードから [設定] → [表示設定] を開き、[検索エンジンがサイトをインデックスしないようにする] にチェックを入れると反映されます。

WordPress 全体をインデックスさせない方法

この機能は、Web ページを公開する前の作成途中の段階でよく利用される機能です。初期設定ではチェックが外れています。

ページ指定ができない

この機能は、あくまでも公開前に内容を確認するために利用するものです。しかも、サイト内の全てのページに対して設定される内容です。つまり WordPress の標準機能だけでは、指定したページのみ noindex を付与することは出来ません。

そこで今回はカスタムフィールドを使って一工夫し、ページ単位に noindex や nofollow が設定できる方法を説明します。なお、カスタムフィールドを利用は簡単に実装できるため、カスタムフィールド関連のプラグインは利用しません。

WordPress のカスタムフィールドを利用する

カスタムフィールドとは?

通常 WordPress の投稿データには、投稿内容やカテゴリー、公開に関する情報など、予め用意された様々な入力データがあります。通常はこれらの定められた項目が画面上に表示されますが、カスタムフィールドを利用すれば、オリジナルのデータ入力項目が追加できます。

そして、登録されたカスタムフィールドの入力データは、post_id に対するデータとして wp_postmeta テーブルへ格納されます。論理上は、追加できるカスタムフィールドの数に上限はありません。ただしサーバー側の php.ini の設定により、上限が設定されています。

一般的な個人ブログでは、カスタムフィールドの追加可能上限値を意識する必要はありません。しかも DOS 攻撃予防として設定している上限数であるため、上限を超えるようなケースではリスクを把握した上で変更を行うようにしてください。詳細は次のページを。

※ max_input_vars を 2000 にすると 165 個まで登録可能になる

カスタムフィールドを使ってみよう

話が脱線してしまったので元の話に戻します。このカスタムフィールドは、WordPress の投稿画面で自由に追加することができます。普段は非表示であるため、投稿画面右上の [表示オプション] から [カスタムフィールド] にチェックを入れれば、投稿画面下部にカスタムフィールドが登場します。

カスタムフィールドの表示

今回追加する変数名は、直感的に分かりやすいように noindexnofollow にしましょう。そしてこの変数が定義された場合に、noindex や nofollow の meta タグが組み込まれる仕組みとします。

変数名変数値と設定時の動作
noindex0 以外が設定された場合、noindex を設定する
nofollow0 以外が設定された場合、nofollow を設定する

nofollow や noindex を定義する場合に限りカスタムフィールドを使います。値は 0以外であれば何でも良いのですが、習慣として「1」をセットと良いでしょう。

カスタムフィールドへ値を設定

このままページを公開すれば、データ側の準備は完了です。

説明順の都合で、カスタムフィールドの編集方法から説明しましたが、テーマファイル編集を先に行っておかないと、ページの公開と共にインデックス対象になってしまうので十分注意してください。

カスタムフィールドの設定値を利用して noindex nofollow を出力

noindex や nofollow を定義する meta タグは、head タグの中に記述する必要があります。標準的なテーマファイルであれば、header.php を編集することになります。 head タグ内であればどこでも構わないので、以下のコードを追記してください。

header.php の head タグ内の追記コード

<?php 
// 投稿個別ページと固定ページだけを対象にする
if ( is_single() || is_page() ) {
  // noindex が設定された場合
  if( get_post_meta($post->ID, "noindex", true) ) {
    // noffolow が設定された場合
    if( get_post_meta($post->ID, "nofollow", true) ) {
      // noindex と nofollow を設定
      echo "<meta name='robots' content='noindex,nofollow' />";
    }
    else {
      // noindex のみを設定
      echo "<meta name='robots' content='noindex,follow' />";
    }
  }
  // nofollow のみは基本的に需要が無いので処理から除外
}
?>

3行目の分岐は、トップ画面やアーカイブ画面で noindex が出力されないように制御するためのものです。また、16行目にコメントを記載した通り、インデックスはするけれどリンク先を辿らせない設定はメリットが無いので、そちらは必要に応じてアンカータグの属性に rel = “nofollow” を定義するようにしてください。

基本的に noindex を設定したい時だけカスタムフィールドを利用

noindex を出力するプログラムを仕掛けた後、これまで通りインデックスさせるようにする場合は、カスタムフィールドへ値を設定する必要はありません。つまりインデックスさせたくない場合に限り、カスタムフィールドを利用すれば大丈夫です。

2回目からプルダウン選択が可能になる

カスタムフィールドは変数名も直接入力を行いましたが、過去に登録したカスタムフィールド名は、下記のようにプルダウンから選択することができます。

カスタムフィールドのプルダウン選択

これで変数名のスペルを忘れてしまっても安心ですね。設定を有効にするには 1 を設定すれば良いことだけ覚えておきましょう。

以上 WordPress のカスタムフィールドを利用して、noindex nofollow の制御を行う方法の紹介でした。

\ この記事をシェアする /

このブログの運営者

NJ

Web系メインで従事していた元システムエンジニア。現在は個人事業主として独立。Webサイト運営における「困った問題」の解決方法をブログで発信。Web サイト運営、ポップデザインや動画制作など、パソコンでモノづくりをしている。