WordPress のカテゴリーページなどの meta description をベストな形で管理する

SEO において直接の影響は無いものの、CTA には少なからず影響すると考えられる meta description ですが、ワードプレスサイトではカテゴリーページなど、投稿・固定ページ以外に自動で生成されるページもあるため、メタディスクリプションの管理は結構面倒であったりします。
そこで今回は、個人的にもっとも運用しやすい方法を思いついたので少し書いてみます。

meta description はなるべく1箇所で管理したい

何のひねりも無いと言われればおしまいですが、各種ページのメタディスクリプションを、テンプレートファイルで定義し、関数で呼び出すといった方法です。
クライアント側で編集できる必要があるなら現実的では無いかもしれませんが、投稿・固定ページ以外の meta 情報まで気にされる方はあまりいないような気もします。
関数で定義してしまうのでメタディスクリプションだけでなく、OGP 設定にも流用することができ、何より1箇所ですべての内容を管理できるのは楽です。

ワードプレスで meta description を書くべきページ

サイトの形態によって微調整は必要ですが、以下のような感じにすると目的が実現できると思います。

  • カテゴリーページなど、ループによって生成されるページは個別に指定していく
  • 投稿・固定ページのメタディスクリプションは「抜粋」に記述し、その内容を出力する
    • カスタムフィールドを作ってそちらを出力するという方法もあると思います
  • 上記以外の指定が無いものは、本文の内容を指定文字数取得する

ただ、若干面倒な部分があり、is_search() || is_404() など、「どの条件にも合致せず」「メタディスクリプションを生成する必要がないページ」に関しては、空の文字列を指定しておかないと、PHP のエラー警告文がページに表示されてしまいます。

<?php if ( !defined( 'ABSPATH' ) ) exit; ?>
<?php

function get_description() {
    if( is_front_page() ) {
        return 'サイトトップページの meta description です。';
    }
    elseif( is_search() || is_404() ) {
        return '';
    }
    elseif( is_home() ) {
        return 'ブログ一覧です。';
    }
    elseif( is_category('wordpress') ) {
        return 'ワードプレスに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('shopify') ) {
        return 'Shopifyに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('tools') ) {
        return 'ウェブ制作が捗る便利なツールなどに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('python') ) {
        return 'Pythonに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('ruby') ) {
        return 'Rubyに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('linux') ) {
        return 'Linuxに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('javascript') ) {
        return 'JavaScriptに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('hugo') ) {
        return 'HUGOに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('html') ) {
        return 'HTMLに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('css') ) {
        return 'CSSに関するブログ記事の一覧のページです。';
    }
    elseif( is_category('git-github') ) {
        return 'Git / GitHubに関するブログ記事の一覧のページです。';
    }
    elseif( has_excerpt() ) {
        return the_excerpt();
    }
    else {
        global $post;
        $summary = strip_tags($post->post_content);
        $summary = str_replace("\n", "", $summary);
        $summary = mb_substr($summary, 0, 120) . "…";
        return $summary;
    }
}

?>

あとは上記で定義した関数を呼び出すだけなので、以下のような感じの記述で情報を引っ張ってこれると思います。

<meta name="description" content="<?php echo get_description(); ?>" />
<meta property="og:description" content="<?php echo get_description(); ?>">