検索結果でのパンくずに対応するテンプレート記述

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> &gt; </span>
<?php } ?>
<?php // 中間階層:カテゴリとエントリー(ページ階層は未実装)
	if(is_category()){
	// カテゴリの場合:上位のカテゴリリンクを生成
		$breadcrumb = "<span>" . get_category_parents($cat, true, ' &gt; </span><span>') . "</span>";
		// 最下層を削除
		$pattern = '/<span><a href="([^>]+)">([^<]+)</a> &gt; </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, ' &gt; </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でパンくずが表示されるというものではありません。

検索結果でのパンくずに対応するテンプレート記述にコメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です