
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ディスクリプションが短くなってしまった方へ」の記事で詳しく触れていますので興味のある方はどうぞ。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!