wp_robotsを使ったnoindex,nofollowの設定

wp_robotsを使ったnoindex,nofollowの設定

WordPressでnoindex,nofollowを設定する方法はいくつかあります。

SEO系のプラグインで設定できる場合やテーマ自体に設定ができるものもありますが、「SEO系のプラグインも使ってないし、そんな多機能なテーマもつかってない!」という方のためにfunctions.phpファイルへ追記することで設定ができる方法を解説したいと思います。

目次

noindex nofollowとは

noindexは、検索結果に表示させないページに対して設定するものです。

例えば、404ページや限定で公開しているページなどは検索エンジンから評価される必要がないのでnoindexの設定をすることがあります。あとは、他のページと内容が重複している部分が多い場合やミラーページを公開するときなども該当します。

この設定をすることで、クローラーは巡回してきますがインデックスしないので検索結果には表示されなくなるというわけです。

次にnofollowです。

このnofllowが設定されたページにあるリンク先をたどらないでと指示するためのものです。

どういうことかというと、例えば、リンク先のページをキャッシュされたくない場合やリンク先へページランクを渡したくないといった場合です。

「ページランクを渡したくない」というのは物凄くザックリ説明すると、AというGoogleから評価されている質の高いページからBというページへのリンクが貼られていたとします。

そうすると、質の高いAというページからリンクを受け取っているBというページも重要であるとみなされ、評価が上がるといったものです。

上記のようなケースにnofollowを設定します。

noindex nofollowの設定方法

今回、noindexnofollowの設定をアーカイブページ全般に設定しようかと思ったのですが、よくよく考えてみるとアーカイブページには各投稿ページへのリンクがあるのでnofllowにするのはどうかな…という結論に至り、アーカイブページにはnoindexのみ設定することにしました。

一応、noindex,nofollowを設定する場合のコードも載せておきますので参考にしてみてください。

noindexを設定する

以前であれば以下のような形で<head>タグ内にnoindexのmetaタグを追記するようにしていました。

function noindex_insert(){
  if(is_archive() || is_404()){
    echo '<meta name="robots" content="noindex">'."\n";
  }
}
add_action('wp_head','noindex_insert');

これでも期待したとおりにmetaタグが追記されるのですが、Wordpressのバージョン5.7.0以降はwp_robotsというフィルターフックを使ってrobots metaタグが制御できるようになりました。

wp_robotsを使った場合はこのようなコードになります。

function meta_robots_control(array $robots){
  if(is_archive() || is_404()){
    $robots['noindex'] = true;
    $robots['max-image-preview'] = false;
  }
  return $robots;
}
add_filter('wp_robots','meta_robots_control');

noindex以外にmax-image-previewというものがありますが、これは2020年からGoogleが導入したもので、検索結果などで表示される画像などをどのように表示させるかという設定をするものです。

noindexを設定するのにこのmax-image-previewの設定があっても意味がないなと思い、ついでに制御しているといったところです。

あってもなくてもそれほど影響があるとは考えにくいのですが、残しておきたいという場合は削除してお使いください。

noindex,nofollow両方を設定する

では次に、noindexnofollow同時に設定する方法です。

先ほどのコードに1行付け足せばOKです。

function meta_robots_control(array $robots){
  if(is_archive() || is_404()){
    $robots['noindex'] = true;
    $robots['nofollow'] = true;
    $robots['max-image-preview'] = false;
  }
  return $robots;
}
add_filter('wp_robots','meta_robots_control');

$robots['nofollow'] = true;を付け足しました。

投稿ページごとにnoindex,nofollowを設定する方法

アーカイブページや404ページにnoindex,nofollowを設定するには上記のコードを使用すればいいのですが、それ以外に個別に投稿ページを設定したいという場合は以下のような方法が考えられます。

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

WordPressがブロックエディタを採用する前から使用している方ならピンとくるかと思いますが、カスタムフィールドを利用してnoindex,nofollowを設定します。

その前に、ブロックエディタでカスタムフィールドを表示させる方法を簡単に説明します。

まず、投稿編集画面右上にあるマークをクリックして設定をクリックします。

「︙」をクリックして設定をクリック
「︙」をクリックして設定をクリック

設定のポップアップが表示されるので一般の一番下にあるカスタムフィールドをクリックしてONにします。

カスタムフィールドをONにする
カスタムフィールドをONにする

すると、再読み込みを促すメッセージとともにページを表示して、リロードというボタンが出るのでクリックします。

「ページを表示して、リロード」をクリック
「ページを表示して、リロード」をクリック

編集画面の再読み込みが完了すると、ブロックエディタ下部にカスタムフィールドが表示されます。

カスタムフィールドが表示される
カスタムフィールドが表示される

表示されたカスタムフィールドへ以下の画像のようにフィールドを追加していきます。

フィールドを追加する
フィールドを追加する

この追加したカスタムフィールドは、新規投稿でも過去に投稿した記事でも編集画面から設定できるようになりますので、下の画像のようにフィールドを選択して設定してください。

フィールドを選択して設定
フィールドを選択して設定

また、「値」はなんでもいいと思うのですが、画像では「0」にしています。

noindexなどをしないページは、そもそもカスタムフィールドの設定をしないと思います。その設定したかしないかという部分を分岐条件としてmetaタグの設定をするようなコードを書いていきますので「値」は分かりやすいものがいいかと思います。

カスタムフィールドの値を取得し分岐

カスタムフィールドの値を取得するのにget_post_meta()を使いました。

値があれば文字列、カスタムフィールドが設定していなければ空の文字列が返ってきます。それを踏まえたうえでコードを書くと以下のようになります。

function meta_robots_control(array $robots){
  global $post;
  $noindex = get_post_meta($post->ID,'noindex',true);
  $nofollow = get_post_meta($post->ID,'nofollow',true);

  if(is_archive() || is_404()){
    $robots['noindex'] = true;
    $robots['nofollow'] = true;
    $robots['max-image-preview'] = false;
  }elseif(!($noindex == '') && ($nofollow == '')){
    // カスタムフィールドでnoindexのみ設定した場合
    $robots['noindex'] = true;
    $robots['max-image-preview'] = false;
  }elseif(($noindex == '') && !($nofollow == '')){
    // カスタムフィールドでnofollowのみ設定した場合
    $robots['nofollow'] = true;
    $robots['max-image-preview'] = false;
  }elseif(!($noindex == '') && !($nofollow == '')){
    // カスタムフィールドでnoindex,nofollowを設定した場合
    $robots['noindex'] = true;
    $robots['nofollow'] = true;
    $robots['max-image-preview'] = false;
  }
  return $robots;
}
add_filter('wp_robots','meta_robots_control');

アーカイブページと404ページに加えて、カスタムフィールドで設定したページにnoindexnofollowがそれぞれ設定されるようになりました。

このコードを先ほど説明した「カスタムフィールドの設定」したあと、functions.phpファイルへ追記します。

取っ掛かりが少し面倒ですが、一度設定してしまえばそれほど難しくもないので、SEO系のプラグインを使ってサイトが重くなるのが嫌だという方は試してみてください。