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