WordPress
カスタマイズ事例

WORDPRESS CUSTOMIZATION

アーカイブ(一覧)ページのSEO用メタタグ情報の設定

WordPressっていつになればアーカイブ(一覧)ページのSEO用メタタグ情報(keyword,description)設定ができるようになるんでしょうか?
そう思っているWordPressエンジニアの方多いのではないでしょうか。

諸説ありますが、アーカイブページは詳細ページと内容が重複するからSEO用メタタグ情報はいらないという説もあります。
むしろnoindexにするサイトもあるそうです。

ですから、これからご紹介するのはあくまでアーカイブページにSEO用メタタグ情報を埋め込みたいと考える方向けです。
 
それでは、SEO用プラグインには All in one SEO Pack を使い、それにフィルターをかけて
カスタム投稿「blog」とカテゴリー「news」のアーカイブページに meta ディスクリプションを埋め込んでみます。

まず、カスタム投稿「blog」とカテゴリー「news」のmeta ディスクリプションを設定するためだけの中身空の固定ページを登録し、meta ディスクリプションを設定します。
このページがgoogleにインデックスされては困るのでnoindexに設定しましょう。
このページのIDを確認します。
カスタム投稿「blog」用の固定ページIDが998、カテゴリー「news」用の固定ページIDが999だったとすると、
テーマのfunctions.phpには以下のように記載します。

/* All In ONE SEOのaioseo_postsを$wpdbに対応させる */
function add_db_aioseo() {
  global $wpdb;

  $table_name = $wpdb->prefix. "aioseo_posts";
  if (!isset($wpdb->aioseo_posts))
  {
    $wpdb->aioseo_posts = $table_name;
    $wpdb->tables[] = str_replace($wpdb->prefix, '', $table_name);
  }
}
add_action( 'init', 'add_db_aioseo');

/* Ver3で運用していたがVer4になってしまったサイトにも対応 */
function aioseo_description_extention($description){
    global $wpdb,$post;
    $pid = $post->ID;
    if(is_post_type_archive('blog')){ //カスタム投稿「blog」
        $pid = 998;
    } elseif (is_category('news')){ //カテゴリー「news」
        $pid = 999;
    }
    $desc0 = $wpdb->get_var($wpdb->prepare("SELECT description FROM $wpdb->aioseo_posts WHERE post_id = %d", $pid));
    $desc1 = get_post_meta($pid, '_aioseo_description', true);
    $desc2 = get_post_meta($pid, '_aioseop_description', true);
    if ($desc0 != '' && $desc0 != '#post_content') {
      $description = $desc0;
    } elseif ($desc1 != '') {
      $description = $desc1;
    } elseif ($desc2 != '') {
      $description = $desc2;
    }else{
      $description = get_the_excerpt($pid);
    }
    return $description;
}
add_filter('aioseo_description', 'aioseo_description_extention');


/* All in one SEO Ver3以前ならこちらだけでOK */
function aioseop_description_extention($description){
    if(is_post_type_archive('blog')){ //カスタム投稿「blog」
        $description = get_post_meta(998, '_aioseop_description', true);
    }
    if(is_category('news')){ //カテゴリー「news」
        $description = get_post_meta(999, '_aioseop_description', true);
    }
    return $description;
}
add_filter('aioseop_description', 'aioseop_description_extention');

これで、ページがカスタム投稿「blog」かカテゴリー「news」のアーカイブページだった時に、それぞれ、固定ページID:998で設定したディスクリプション、固定ページID:999で設定したディスクリプションをmeta descriptionに出力させることができます。
 
※ 実はAll in one SEOがVer3までは割と簡単な記述だったんですが、Ver4でメジャーアップデートがあり、プラグインが個別に持つテーブルで管理するようになった関係で、結構面倒なコードとなりました。このあたりは「【All in One SEO】バージョン3系から4系になってmetaディスクリプションが短くなってしまった方へ」の記事で詳しく触れていますので興味のある方はどうぞ。

【100ウェブ新着情報メルマガ】

WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!