WordPressの表示設定ではサイト全体をインデックスする・しないを設定できます。
インデックスする設定(チェックをいれない)を行うと、インターネットでキーワード検索をした際にそのサイトが検索結果に表示されるようになるということです。
反対にインデックスしない設定(チェックを入れる)を行うと、インターネットでキーワード検索をした際にそのサイトが検索結果に表示されなくなります。
ほとんどの場合サイト全体の制御を行えば問題ありませんが、特定のページだけ検索結果に表示させたくないと思う日もあると思います。
今回は特定の記事にだけインデックスさせないようにするためのカスタマイズを紹介します。
こちらの記事の内容を丸パクリ参考に作成しています。
コードの紹介
以下のコードをfunctions.phpに貼り付けましょう。
/*-------------------------------------------*/
/* サイトをインデックスしない制御 */
/*-------------------------------------------*/
// メタボックスの追加
add_action( 'admin_menu', 'add_noindex_metabox' );
function add_noindex_metabox() {
add_meta_box( 'custom_noindex', 'インデックス設定', 'create_noindex', array('post', 'page'), 'side' );
}
// 管理画面にフィールドを出力
function create_noindex() {
$keyname = 'noindex';
global $post;
$get_value = get_post_meta( $post->ID, $keyname, true );
wp_nonce_field( 'action_' . $keyname, 'nonce_' . $keyname );
$value = 'noindex';
$checked = '';
if( $value === $get_value ) $checked = ' checked';
echo '<label><input type="checkbox" name="' . $keyname . '" value="' . $value . '"' . $checked . '>' . $keyname . '</label>';}
// カスタムフィールドの保存
add_action( 'save_post', 'save_custom_noindex' );
function save_custom_noindex( $post_id ) {
$keyname = 'noindex';
if ( isset( $_POST['nonce_' . $keyname] )) {
if( check_admin_referer( 'action_' . $keyname, 'nonce_' . $keyname ) ) {
if( isset( $_POST[$keyname] )) {
update_post_meta( $post_id, $keyname, $_POST[$keyname] );
} else {
delete_post_meta( $post_id, $keyname, get_post_meta( $post_id, $keyname, true ) );
}
}
}
}
// <head>タグ内に出力
function my_custom_meta_robots( array $robots ) {
if ( is_singular() && get_post_meta( get_the_ID(), 'noindex', true ) ) {
$robots['noindex'] = true; // noindexを有効化
$robots['nofollow'] = true; // nofollowを有効化
$robots['max-image-preview'] = false;//デフォルトのrobotsを無効化
}
return $robots;
}
add_filter( 'wp_robots', 'my_custom_meta_robots' );
使い方
各記事の編集画面に項目が追加されています。
インデックス登録したくない記事にチェックを入れます。クラシックエディタの場合とブロックエディタの場合で見た目が変わります。
カスタマイズ
ご自身のサイトでより使いやすくするためのカスタマイズ方法を紹介します。
39、40行目の
$robots['noindex'] = true; // noindexを有効化
$robots['nofollow'] = true; // nofollowを有効化
でmetaタグの内容を設定しています。このままの状態ですと、
<meta name='robots' content='noindex, nofollow' />
が出力されます。
例えば、noindexだけが必要な方は40行目をコメントにしておきましょう。/を2つ続けて入力するとphpではコメント扱いになり、スラッシュを入れた行の最後まで処理が実行されなくなります。
$robots['noindex'] = true; // noindexを有効化
//$robots['nofollow'] = true; // nofollowを追加しない
nofollowだけを表示させたいのならば、逆に39行目をコメントにしておきましょう。
まとめ
使用しているテーマやプラグインでインデックスを個別に設定できる場合もあります。
wp_robotsというフィルターフックがWordPressのバージョン5.7で新しく追加されたみたいで、ちょうどあったらいいなと思っていたフックだったので使ってみました。