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

Googleの検索結果に表示されるパンくずのマークアップが可能となりましたので、WordPressのテンプレートを対応させてみました。
パンくずのマークアップ方法については、Googleのヘルプページをご参照ください。

WordPressでは、get_category_parentsという関数を使い、自動的にaタグのついたパンくずを出力することが多いと思いますので、microdataよりもRDFaの方が適しています。
では、さっそくサンプルコードです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<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でパンくずが表示されるというものではありません。

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

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