【WordPress】noindex付与方法【全体・アーカイブ・カテゴリ・投稿ページ】

WordPressの各ページの<head>にnoindexを付与する方法。Webサイト全体に一括で付与する方法のほか、アーカイブのみ、カテゴリー個別指定、または投稿ページに個別にnoindexを付与するなどのパターンを想定。

WordPress全体にnoindexを付与する方法

  1. ダッシュボード > 設定 > 表示設定 へアクセスする。
  2. 検索エンジンでの表示のチェックボックスにチェックを入れる。
  3. 変更を保存をクリックする。

出力されるコード。

<meta name='robots' content='noindex, nofollow' />

アーカイブページにnoindexを付与する方法

  1. functions.phpに以下のコードを入力する。
  2. アーカイブテンプレートで生成されるカテゴリーページ、タグページ、著者ページ、および、404ページにnoindexが付与される。
function snkt_add_noindex() {
  if (is_archive() || is_404()) {
    echo '<meta name="robots" content="noindex,nofollow" />';
  }
}
add_action('wp_head', 'snkt_add_noindex');

カテゴリーページに個別にnoindexを付与する方法

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

参考: https://cooeil.com/wp-category-noindex/

投稿画面にチェックボックスを表示して特定ページをnoindexする方法

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 ) );
            }
        }
    }
}

header.phpの</head>の前に下記を追記する。

<?php
if(is_singular() && get_post_meta($post->ID , 'noindex' , true)){
    echo '<meta name="robots" content="noindex,follow" />';
}
?>

投稿画面の右パネルに、noindexを付与するチェックボックスが追加される。

参考: https://tcd-theme.com/2021/07/wordpress-noindex.html