カテゴリーページのSEOにも!記事数を<title>タグに入れる方法

カテゴリ記事一覧の HTML に 「全○記事」 を表示

今回は、WordPress カテゴリーページ で、カテゴリー内の記事数をページタイトルに表示する方法を紹介したい。カテゴリーページには noindex を指定して検索結果に表示させないのが基本だが、記事が増えてくれば話は別だ。SEO対策で検索上位にも表示しやすくなる。

当ブログでも、WordPress の記事一覧 ではカテゴリー内の全記事数を取得し、HTML の<title>タグを次のように動的出力している。

WordPress サイト作成とブログカスタマイズの全12記事

「全○記事」 の 「○」 の部分は、現在の記事数が自動的に入る仕組みだ。つまり、カテゴリーの記事が増えれば、Google の検索結果にも反映される。具体的な数字が入っているとクリックされやすくなるので、なるべく自然なタイトルになるよう工夫しつつ、ぜひ活用して欲しい。

基本となるソースコード

カテゴリー内の公開済みの全記事数を取得し、ページタイトルに表示する最も 「基本」 となるソースコードは以下のとおり。

なお、WordPress のバージョンは 4.4 以降で動作確認している。

/** カテゴリーの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリーページなら
    if(is_category()) {
        // カテゴリー情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリー内の記事数が2以上なら
        if($cat->count >= 2) {
            // カテゴリー名+カテゴリー内の公開済み記事数を使って動的にページタイトルを生成
            $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
        }
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

基本的には上記コードをコピペしてタイトルを調整するだけなので、意外とかんたん。PHPを追加する方法は、以下の記事を参考にしよう。

子テーマの functions.php 編集はもう時代遅れ?経験者も注意!

なお、「全0記事」 や 「全1記事」 といった間抜けな表示にならないよう、記事数による判定用のロジックも追加してある。全てのカテゴリーで2本以上記事が公開されている場合は、以下のさらにシンプルなコードを使うことができる。

/** カテゴリーの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリーページなら
    if(is_category()) {
        // カテゴリー情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリー名+カテゴリー内の公開済み記事数を使って動的にページタイトルを生成
        $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

少し応用させたソースコード

ここでは、上記の基本となるコードをベースに少し応用させたバージョンも紹介しておく。

指定カテゴリーでのみ表示する

全てのカテゴリーでなく、特定カテゴリーのみ記事数を表示したい人もいるはず。それなら、WordPress の 「カテゴリー編集画面」 を開き、カテゴリーIDを確認して指定すれば良い。

/** 指定したカテゴリーの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリーID
    $cat_id = 1;
    // 指定したカテゴリーの記事一覧ページなら
    if(is_category( $cat_id )) {
        // カテゴリー情報を取得
        $cat = get_category($cat_id);
        // ページタイトルの後ろにカテゴリー内の公開済み記事数を繋げて出力
        $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

タグの記事一覧でも表示する

例:旅行のタグが付いた記事一覧 | 全14記事

僕はそもそもタグの利用を推奨しないが、もしタグを利用していて、タグの記事一覧ページのページタイトルでも記事数を表示したいなら、以下のように変更すれば良い。

/** カテゴリーとタグの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリーページなら
    if(is_category()) {
        // カテゴリー情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリー内の記事数が2以上なら
        if($cat->count >= 2) {
            //カテゴリー名+カテゴリー内の公開済み記事数を使って動的にページタイトルを生成
            $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
        }
    }
    // タグの記事一覧ページなら
    elseif(is_tag()) {
        // タグ情報を取得
        $tag_id = get_queried_object()->term_id;
        $tag = get_tag($tag_id);
        // タグのついている記事数が2以上なら
        if($tag->count >= 2) {
            //タグ名と記事数を使って動的にページタイトルを生成
            $title = $tag->name . 'のタグが付いた記事一覧 | 全' . $tag->count . '記事';
        }
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

記事数をざっくり表示する

例:WordPressの記事一覧 | 全30記事以上

表示される記事数が多くなってくると、自然なタイトルにするために 「ざっくり」 した数字を表示した方が良い。そんなときは、ロジックを追加して以下のようにすると良いだろう。

/** カテゴリーの記事一覧ページで全記事数を取得してページタイトルに表示 */
function dynamic_category_page_title($title) {
    // カテゴリーの記事一覧ページなら
    if(is_category()) {
        // カテゴリー情報を取得
        $cat_id = get_queried_object()->term_id;
        $cat = get_category($cat_id);
        // カテゴリー内の記事数が2以上30未満なら
        if($cat->count >= 2 && $cat->count < 30) {
            // カテゴリー名+カテゴリー内の公開済み記事数を使って動的にページタイトルを生成
            $title = $cat->name . 'の記事一覧 | 全' . $cat->count . '記事';
        }
        // カテゴリー内の記事数が30以上なら
        elseif($cat->count >= 30) {
            // 一の位を切り捨てて全記事数はざっくりと表示
            $rough_count = floor($cat->count / 10) * 10;
            $title = $cat->name . 'の記事一覧 | 全' . $rough_count . '記事以上';
        }
    }
    return $title;
}
add_filter('pre_get_document_title', 'dynamic_category_page_title');

SEO プラグインへの対応

WordPress で本格的にサイト作成をしている人なら、SEO プラグインの設定をしている人がほとんどのはずだ。

ただ、SEO プラグインが有効になっていると 「プラグインで設定されたページタイトル」 が優先されるため、上で紹介したソースコードを少し修正する必要がある。

ここでは、主要な2つのプラグインに対応する方法を紹介しておく。

Yoast SEO の場合

WordPress で SEO と言えば 「Yoast SEO」 というくらいで、僕も自身で運営するサイトでは全て 「Yoast SEO」 を使っている。

Yoast SEO

Yoast SEO を使っているサイトでは、基本のソースコードの add_filter() で指定されているフック名を ‘pre_get_document_title’ から ‘wpseo_title’ に変更すれば OK だ。

add_filter('wpseo_title', 'dynamic_category_page_title');

なお、’wpseo_title’ のフックを使う場合は、$title パラメータに 「Yoast SEO で設定された SEO タイトル (以下図) 」 が引き渡される。

Yoast SEO のスニペットプレビューで設定する SEO タイトルの例

そのため、$cat->name でページタイトルを作り直す必要はなく、$title の後ろに文字列を追加するだけで良い。

// ページタイトルの後ろにカテゴリー内の公開済み記事数を繋げて出力
$title .= 'の記事一覧 | 全' . $cat->count . '記事';

WordPress 管理画面のカテゴリー編集ページで 「スニペットプレビュー」 から SEO タイトルを設定し、各カテゴリーで自然なページタイトルとなるよう工夫することをおすすめする。

All in One SEO Pack の場合

All in One SEO Pack

日本国内でのみ利用者が多いプラグインだが、こちらの SEO プラグインを利用している人はフック名を ‘pre_get_document_title’ から ‘aioseop_title’ に変更しよう。

// add_filter('pre_get_document_title', 'dynamic_category_page_title');
add_filter('aioseop_title', 'dynamic_category_page_title');

‘aioseop_title’ のフックを使う場合も、$title パラメータには 「All in One SEO » 一般設定 » タイトル設定 » カテゴリータイトルのフォーマット (以下図) 」 を使って生成されたページタイトルが引き渡される。

All in One SEO Pack で設定できるカテゴリーーのページタイトルのフォーマット

フォーマットでの設定までしかできないため 「Yoast SEO」 と比べれば柔軟さに欠けるが、以下のような書き方は可能である。

// ページタイトルの後ろにカテゴリー内の公開済み記事数を繋げて出力
$title .= 'の記事一覧 | 全' . $cat->count . '記事';

あとがき+参考リンク

カテゴリーの記事数を増やしてコンテンツ化させよう

カテゴリー記事一覧ページは、記事数が増えるにつれて 「コンテンツとしての価値」 が上がるため、ページタイトルに全記事数を表示すれば 「検索結果画面でのCTR(クリック率)」 を高めるのにも役立つはずだ。

また今回の方法は、PHPコードを修正して応用すれば 「どんなページでも」 動的なタイトルを出力できるようになる。

僕は、サイト内検索の 「検索結果」 を表示するページでもページタイトルを動的にしている。

Google カスタム検索 × WordPress 検索の美しいカスタマイズ方法