WordPressで重複しないタイトルタグとdescriptionを生成する

Search Consoleで 次のような通知を見たことはありませんか?
こちらは [検索での見え方] > [HTMLの改善] で表示できます。

html-tag

重複しているとSEO的に評価されづらくなるということで、ページごとに設定するに越したことはありません。
とはいえ、極力自動化させたい・・・ということで、WordPress上で実装したのが以下のコードです。

重複しないタイトルタグ

WordPressで設定できるサイト名、サイトのキャッチフレーズを利用して、以下のように表示されるタイトルタグを生成します。
アーカイブではページ数を表示し、同じカテゴリーでもタイトルタグがページごとに異なるようにしています。

site-setting

タイトルタグ表示例

TOP サイト名|サイトのキャッチフレーズ
記事 記事タイトル|サイト名
カテゴリーアーカイブ カテゴリー名|サイト名 – サイトのキャッチフレーズ(ページ番号)
カテゴリーアーカイブ
(子カテゴリー有り)
親カテゴリー名:子カテゴリー名(ページ番号)|サイト名 – サイトのキャッチフレーズ
タグアーカイブ タグ名 タグ一覧(ページ番号)|サイト名 – サイトのキャッチフレーズ
カスタム投稿アーカイブ or タクソノミーアーカイブ ターム名(ページ番号)|サイト名 – サイトのキャッチフレーズ
function title_tag() {
  $pageno = (get_query_var('paged')) ? '('.get_query_var('paged').')' : '';
  $site_description = get_bloginfo('name').' - '.get_bloginfo('description');
  if ( is_home() || is_front_page() ){
    echo get_bloginfo('name').'|'.get_bloginfo('description').$pageno;
  } elseif ( is_post_type_archive() || is_tax() ) {
    echo single_term_title( '' , false).$pageno.'|'.$site_description;
  } elseif( is_category() ){
    $cat = get_queried_object();
    if($cat -> parent != 0){
      $ancestors = array_reverse(get_ancestors( $cat -> cat_ID, 'category' ));
      foreach($ancestors as $ancestor){
        echo get_cat_name($ancestor).':';
      }
    }
    echo single_cat_title( '' , false).$pageno.'|'.$site_description;
  } elseif( is_tag() ){
    echo single_tag_title( '' , false).$pageno.' タグ一覧|'.$site_description;
  } elseif ( is_404() ) {
    echo 'お探しのページは存在しません|'.$site_description;
  } else {
    echo wp_title('', false).'|'.get_bloginfo('name');
  }
}

重複しないdescription

descriptionは、記事の抜粋を利用しています。
入力されていなかった場合は、管理画面から設定できるサイトのキャッチフレーズを表示するようにしています。

img-excerpt

アーカイブページではサイトのキャッチフレーズにページ番号を付けることでページごとに異なるdescriptionを生成しています。

description表示例

記事 or 固定ページ 記事の抜粋
カテゴリーアーカイブ カテゴリー名一覧:記事の抜粋 Page – ページ番号
タグアーカイブ タグ名タグ一覧:記事の抜粋 Page – ページ番号
タクソノミーアーカイブ タクソノミー名:記事の抜粋 Page – ページ番号
カスタム投稿アーカイブ カスタム投稿タイプの説明 Page – ページ番号
上記以外 サイトのキャッチフレーズ
function description_tag() {
  $pageno = (get_query_var('paged')) ? ' Page - '.get_query_var('paged') : '';
  $home_id = get_option( 'page_on_front' );
  if ( get_the_excerpt() ){
    echo get_the_excerpt();
  } elseif( is_tax() ) {
    echo single_term_title( '' , false).':'.get_bloginfo('description').$pageno;
  } elseif( is_category() ) {
    echo single_cat_title( '' , false).'一覧:'.get_bloginfo('description').$pageno;
  } elseif( is_tag() ) {
    echo single_tag_title( '' , false).'タグ一覧:'.get_bloginfo('description').$pageno;
  } elseif( is_post_type_archive() && get_post_type_object( get_post_type() )->description ) {
    echo get_post_type_object( get_post_type() )->description.$pageno;
  } else {
    echo get_bloginfo('description');
  }
}

RELATED POSTS