WordPressでトップページ以外を「noindex, nofollow」にする3つの方法【AIOSEO対応】

WordPressサイトで、トップページのみをインデックス対象とし、それ以外のページは noindex, nofollow に設定したいという要件は、運用ポリシーやSEO設計上、一定のニーズがあります。

このような制御を行う際に、All in One SEO(AIOSEO)を使用している場合は、同プラグインが自動的に <meta name="robots"> タグを出力するため、適切な方法での調整が必要です。

この記事では、AIOSEOを使用している環境で、トップページ以外を noindex, nofollow にする3つの方法を紹介します。


方法1:明示的な関数でフィルターフックを利用する

最も基本的な方法は、AIOSEOが提供する aioseo_robots_meta フィルターを使って meta robots の出力内容をカスタマイズすることです。

// AIOSEOのmeta robots出力をカスタマイズ
add_filter( 'aioseo_robots_meta', 'aioseo_filter_robots_meta' );

function aioseo_filter_robots_meta( $attributes ) {
    // トップページ以外を noindex, nofollow にする
    if ( ! is_front_page() ) {
        $attributes['noindex']  = 'noindex';   // 検索エンジンにインデックスさせない
        $attributes['nofollow'] = 'nofollow';  // リンクをたどらせない
    }
    return $attributes;
}

解説

  • is_front_page() でトップページかどうかを判定
  • $attributes 配列に文字列として noindex, nofollow を追加
  • AIOSEOがこの配列を元に <meta name="robots"> を出力します

方法2:無名関数(クロージャ)で簡潔に記述する

処理がシンプルな場合、無名関数をそのまま add_filter() に渡すことで短く記述することも可能です。

add_filter( 'aioseo_robots_meta', function( $attributes ) {
    // トップページ以外にだけ noindex, nofollow を適用
    if ( ! is_front_page() ) {
        $attributes['noindex']  = 'noindex';   // インデックス禁止
        $attributes['nofollow'] = 'nofollow';  // リンク追跡禁止
    }
    return $attributes;
});

解説

  • 方法1と動作は同じ
  • 1ファイル内で処理を完結させたいときや、関数を使い回す必要がない場合に便利です

方法3:AIOSEOのrobotsタグを削除して自分で出力する

特定の環境やテーマ構成では、AIOSEOのフィルターが反映されないケースがあります。そのような場合は、AIOSEOの出力自体を削除し、独自に <meta name="robots"> を出力する方法が有効です。

/**
 * AIOSEOが出力する<meta name="robots">タグを削除し、
 * トップページ以外を noindex, nofollow にするカスタム制御を行う。
 */

// --- HTML出力を一時的にバッファリングする ---
function buffer_start() {
    ob_start('remove_aioseo_robots_tag');
}
add_action('wp_head', 'buffer_start', 0);

// --- バッファ内の<meta name="robots">タグを削除する ---
function remove_aioseo_robots_tag($buffer) {
    return preg_replace('/<meta name="robots"[^>]+>\s*/i', '', $buffer, 1);
}

// --- 自分でrobotsタグを出力 ---
function custom_robots_meta_tag() {
    if ( is_front_page() ) {
        echo '<meta name="robots" content="index, follow, max-image-preview:large">' . "\n";
    } else {
        echo '<meta name="robots" content="noindex, nofollow, max-image-preview:large">' . "\n";
    }
}
add_action( 'wp_head', 'custom_robots_meta_tag', 1 );

解説

  • AIOSEOのrobotsタグ出力をバッファ操作で除去
  • 自前で正しい内容を出力するため、出力内容を完全にコントロールできます
  • 他のSEO情報(canonical、OGP、JSON-LDなど)はAIOSEOのまま維持できます

補足:AIOSEOで設定できるrobots属性とその意味

AIOSEOでは、以下のような属性を aioseo_robots_meta フィルターを通じて制御できます(公式ドキュメント より引用・補足)。

$attributes = [
    'noindex'           => '', // 検索結果に掲載しない
    'nofollow'          => '', // ページ内のリンクを辿らせない
    'noarchive'         => '', // キャッシュ(アーカイブ)を作成させない
    'nosnippet'         => '', // スニペット(検索結果の説明文)を表示させない
    'noimageindex'      => '', // 画像を検索エンジンにインデックスさせない
    'noodp'             => '', // ODP(Open Directory Project)情報を使わせない(現在は無効化済)
    'notranslate'       => '', // Google翻訳リンクを表示させない
    'max-snippet'       => '', // スニペットの最大文字数(例:'0' で非表示)
    'max-image-preview' => '', // 画像プレビューの最大サイズ(例:'none', 'standard', 'large')
    'max-video-preview' => ''  // 動画プレビューの最大長さ(例:'0')
];

まとめ

方法特徴難易度
方法1:関数での明示的な定義再利用性が高く拡張しやすい★★
方法2:クロージャで簡潔に記述記述量が少なくすっきり
方法3:AIOSEOの出力を削除して自前で出力最も確実だがやや上級者向け★★★

AIOSEOは強力なSEOプラグインですが、robotsタグの出力を細かく制御したい場合には、正しい形式・正しいタイミングでフックを使うことが重要です

特に、robotsタグは検索エンジンのインデックス可否に直結する要素なので、タグが二重になっていないか・意図したページに正しく出力されているかを確認することが大切です。

コメント

タイトルとURLをコピーしました