今回は、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を追加する方法は、以下の記事を参考にしよう。
なお、「全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 を使っているサイトでは、基本のソースコードの add_filter() で指定されているフック名を ‘pre_get_document_title’ から ‘wpseo_title’ に変更すれば OK だ。
add_filter('wpseo_title', 'dynamic_category_page_title');
なお、’wpseo_title’ のフックを使う場合は、$title パラメータに 「Yoast SEO で設定された SEO タイトル (以下図) 」 が引き渡される。
そのため、$cat->name でページタイトルを作り直す必要はなく、$title の後ろに文字列を追加するだけで良い。
// ページタイトルの後ろにカテゴリー内の公開済み記事数を繋げて出力
$title .= 'の記事一覧 | 全' . $cat->count . '記事';
WordPress 管理画面のカテゴリー編集ページで 「スニペットプレビュー」 から SEO タイトルを設定し、各カテゴリーで自然なページタイトルとなるよう工夫することをおすすめする。
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 » 一般設定 » タイトル設定 » カテゴリータイトルのフォーマット (以下図) 」 を使って生成されたページタイトルが引き渡される。
フォーマットでの設定までしかできないため 「Yoast SEO」 と比べれば柔軟さに欠けるが、以下のような書き方は可能である。
// ページタイトルの後ろにカテゴリー内の公開済み記事数を繋げて出力
$title .= 'の記事一覧 | 全' . $cat->count . '記事';
あとがき+参考リンク
カテゴリー記事一覧ページは、記事数が増えるにつれて 「コンテンツとしての価値」 が上がるため、ページタイトルに全記事数を表示すれば 「検索結果画面でのCTR(クリック率)」 を高めるのにも役立つはずだ。
また今回の方法は、PHPコードを修正して応用すれば 「どんなページでも」 動的なタイトルを出力できるようになる。
僕は、サイト内検索の 「検索結果」 を表示するページでもページタイトルを動的にしている。