【WordPress】特定のカテゴリページやタグページにnoindexを設定する方法

やりたいこと

プラグインなどを使わずに、カテゴリやタグのアーカイブページをnoindexにしたい。

解決法

functions.phpにコードを数行追記するだけで実現できる。

カテゴリページ

// 全カテゴリページにnoindex付与
function set_noindex(){
if ( is_category() ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');
// 特定のカテゴリページにnoindex付与
function set_noindex(){
if ( is_category( 'カテゴリID' ) ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

※特定のカテゴリに所属する「投稿」が対象ではないので注意が必要

タグページ

// 全タグページにnoindex付与
function set_noindex(){
if ( is_tag() ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');
// 特定のタグページにnoindex付与
function set_noindex(){
if ( is_tag( 'タグID' ) ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

※特定のタグを登録した「投稿」が対象ではないので注意が必要

特定のカテゴリに所属するページ

// 特定のカテゴリに所属するページにnoindex付与
function set_noindex(){
if ( in_category( 'カテゴリID' ) ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

「〇〇カテゴリの投稿はnoindexにしたい」という場合。

投稿者アーカイブ

// 投稿者アーカイブにnoindex付与
function set_noindex(){
if ( is_author() ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

いわゆる「〇〇さんが投稿した記事一覧」のようなページ。

複数人で運営しているならまだしも、1人でサイトを運営している場合はnoindexに設定して問題なさそう。

「次のページ」や2ページ目以降

// 2ページ目以降にnoindex付与
function set_noindex(){
if ( is_paged() ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

トップページにページネーションが無くとも、ほとんどのサイトで「page」というページが存在している。

こちらテーマ側で設定できないものの方が多いので、今回のように追記して設定してあげる。

特定の投稿や固定ページ

// 特定の投稿や固定ページにnoindex付与
function set_noindex(){
if ( is_single( '記事ID' ) ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

今時だとテーマ側でnoindexを設定できるものが多いが、もしそれに対応していないテーマの場合はこの方法で実現できる。

複数の条件を指定する場合

// カテゴリページとタグページにnoindex付与
function set_noindex(){
if ( is_category() || is_tag() ) {
echo '<meta name="robots" content="noindex" />';
}
}
add_action('wp_head', 'set_noindex');

「カテゴリページとタグページにnoindexを設定したい」というこれまで紹介してきたケースを組み合わせたい場合は、上のようにif文の条件を変えてあげればOK。

// 全カテゴリページにnoindex付与
function set_noindex(){
if ( is_category() ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');
// 全タグページにnoindex付与
function set_noindex(){
if ( is_tag() ) {
echo '<meta name="robots" content="noindex" />';
}
}
set_action('wp_head', 'set_noindex');

間違ってもこのように別々に同じ関数を作って呼び出す、ということは避けた方が良さげ。

関数名をそれぞれ別にすればこの書き方でも問題ないが、冗長な書き方になるため。

カテゴリページやタグページにnoindexを設定すべき理由

この辺りは意見が割れるところではあるが、自分はカテゴリやタグといったアーカイブページにはnoindexを設定すべきだと思う。その理由は以下の通り。

  • 低品質コンテンツと判断されてしまう
  • 検索流入が見込めないため
  • 他のページにクローラーのリソースを割けるため

低品質コンテンツと判断されてしまう

カテゴリやタグのアーカイブのページはGoogleのロボットからすればただの「リンクが貼ってあるページ」に過ぎず、低品質なコンテンツと判断されてしまう可能性がある。

そこでそのようなページにnoindexを設定しインデックスさせないことによって、サイト全体の評価低下を防げる。

なお、低品質なコンテンツがサイトの一部にしか存在しない場合でも、サイト全体の掲載順位に影響を与えることがあるということにご注意ください。低品質なページを削除したり、内容の薄いページをまとめて役に立つコンテンツに改善したり、もしくは低品質なコンテンツを他のドメインに移動させたりすることが、最終的に良質なコンテンツの掲載順位を改善することにつながります。

引用元:良質なサイトを作るためのアドバイス – Googleウェブマスター向け公式ブログ

Google公式も上のように言及しており、サイト内の低品質なコンテンツを削除することはSEO的にプラスの効果が見込める。

低品質の記事ならまずリライトするという選択肢もあるかもしれないが、カテゴリやタグといったアーカイブページはそれが難しかったりする。とはいえカテゴリ・タグページそのものを削除してしまっては、サイト内でユーザーが記事を見つけにくくなりユーザビリティが悪くなってしまう。

そこで検索結果に表示させないnoindexを設定するのが最も妥当だと考える。(※サイトリンクにカテゴリを表示させたい場合は例外)

検索流入が見込めない

超大手のサイトなら「サイト名 + カテゴリ名」というキーワードの流入も見込めるかもしれないが、個人ブログの場合そういったキーワードで流入してくることはごく僅か。

とあるジャンルの記事群をインデックスさせたいなら、カテゴリページをインデックスさせるのではなく「まとめ記事」を作るのが適切だと考える。

それからタグページ。こちらに関しては1記事に複数個設定できる性質上カテゴリよりも数が増えてしまうので、尚更インデックスさせる意味はない気がする。タグはカテゴリほどSEO的に重要な役割を持たない、なおかつ管理が大変になってしまうので。

ちなみに、話の論点からは少し逸れるが「そもそも記事にタグを付けないようにする・タグ機能を使わない」というのも1つの手かもしれない。