検索結果でのパンくずに対応するテンプレート記述
公開日:
更新日:
Googleの検索結果に表示されるパンくずのマークアップが可能となりましたので、WordPressのテンプレートを対応させてみました。
パンくずのマークアップ方法については、Googleのヘルプページをご参照ください。
WordPressでは、get_category_parentsという関数を使い、自動的にaタグのついたパンくずを出力することが多いと思いますので、microdataよりもRDFaの方が適しています。
では、さっそくサンプルコードです。
<div id="bread" xmlns:v="http://rdf.data-vocabulary.org/#">
<?php // 1階層目:ホーム以外の場合、ホームへのリンクを出力
if(!is_home()){
?>
<span typeof="v:Breadcrumb"><a href="<?php bloginfo('url'); ?>/" rel="v:url" property="v:title"><?php bloginfo('name'); ?></a> > </span>
<?php } ?>
<?php // 中間階層:カテゴリとエントリー(ページ階層は未実装)
if(is_category()){
// カテゴリの場合:上位のカテゴリリンクを生成
$breadcrumb = "<span>" . get_category_parents($cat, true, ' > </span><span>') . "</span>";
// 最下層を削除
$pattern = '/<span><a href="([^>]+)">([^<]+)</a> > </span><span></span>/i';
$breadcrumb = preg_replace($pattern,'',$breadcrumb);
// aタグ部分をRDFaでマークアップ
$breadcrumb = preg_replace('/<a href="([^>]+)">/i','<a href="\1" rel="v:url" property="v:title">',$breadcrumb);
$breadcrumb = str_replace('<span>','<span typeof="v:Breadcrumb">',$breadcrumb);
// ページに出力
echo $breadcrumb;
}elseif(is_single()){
// エントリーの場合:カテゴリリンクを生成
// 添付ファイルの場合は、所属カテゴリをエントリーのカテゴリとする
if(is_attachment()){
$this_cats = wp_get_post_categories($post->post_parent);
}else{
$this_cats = wp_get_post_categories($post->ID);
}
// 複数カテゴリに紐付いている場合は配列の最後を使う
$this_cat = $this_cats[count($this_cats)-1];
$breadcrumb = "<span>" . get_category_parents($this_cat, true, ' > </span><span>') . "</span>";
// 不要なspanタグを削除
$breadcrumb = str_replace('</span><span></span>','</span>',$breadcrumb);
// aタグ部分をRDFaでマークアップ
$breadcrumb = preg_replace('/<a href="([^>]+)">/i','<a href="\1" rel="v:url" property="v:title">',$breadcrumb);
$breadcrumb = str_replace('<span>','<span typeof="v:Breadcrumb">',$breadcrumb);
// ページに出力
echo $breadcrumb;
}
?>
<?php // 最下層:表示中のページ
// 日付アーカイブの場合(年月を想定)
if(is_date()){
$date = single_month_title('',FALSE);
?>
<span typeof="v:Breadcrumb"><b><strong property="v:title"><? echo ereg_replace('^[0-9]+.?月','',$date).' 年 '.ereg_replace('[0-9]+$','',$date); ?></strong></b></span>
<?php
// エントリーページ
}elseif(is_single()){
?>
<span typeof="v:Breadcrumb"><b><strong property="v:title"><?php the_title(''); ?></strong></b></span>
<?php
// それ以外のものはwp_titleで対応する
}elseif(!is_home()){
?>
<span typeof="v:Breadcrumb"><b><strong property="v:title"><?php wp_title(''); ?></strong></b></span>
<?php
}
?>
</div>
まずはパンくずを括っているdivに、このdivの中身がパンくずであるという意味を示すネームスペースを宣言します。
各パンくずはspanで囲い、typeof=”v:Breadcrumb”としてパンくずの要素であることを識別できるようにします。
パンくずのリンク部分には、aタグにrel要素とproperty要素を追加し、URLとパンくずのタイトルであることを明示します。
なお、サンプルコードは当サイトで使用しているものとは若干異なりますので、自己責任にてカスタマイズ等を行ってください。
また、パンくずをマークアップしたからと言って、確実にSERPでパンくずが表示されるというものではありません。