WordPressに「パンくずリスト」を追加したいとき、定番プラグインとして有名なのがBreadcrumb NavXT。
しかし、テンプレートに bcn_display(); でHTMLを出力するだけでは、見た目はパンくずリストだけど、構造化データとしてはエラー。schema.orgやGoogleのリッチリザルトテストでも「パンくずリスト」とは認識されない。当然サーチコンソールも認識せず。
この解決方法を調べると、「そもそもBreadcrumb NavXTのHTMLマークアップに問題がある」という趣旨で、設定からproperty属性をitempropに書き換えるなど、手動でコードを変更する解決策が見つかります。この方法でも確かに解決はできる。

単純にJSON-LDをhead内に出力させるだけで解決
しかし、実はわざわざマークアップ設定を個別に修正しなくても、単純にJSON-LD形式のコードを、<head>内に出力するだけで問題は解決します。
解決というか、そもそもの話、これが正しいBreadcrumb NavXTの設置方法なのではないだろうか。
カスタマイズを加える必要もなく、ちゃんと公式が関数を用意しています。
functions.php
add_action('wp_head', 'my_json_ld_breadcrumb_trail', 10);
function my_json_ld_breadcrumb_trail()
{
if (function_exists('bcn_display_json_ld')) {
printf('', bcn_display_json_ld(true));
}
}※テンプレートに直接追加する場合はこちら
<?php if (function_exists('bcn_display_json_ld()')) {?>
<script type="application/ld+json"><?php bcn_display_json_ld();?></script>
<?php } ?>header.php(例)
参照元
Fun with bcn_display_json_ld() — the Basics
https://mtekk.us/archives/guides/fun-with-bcn_display_json_ld-the-basics/
出力結果(例)
<script type="application/ld+json">
{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[
{"@type":"ListItem","position":1,"item":{"@id":"https://example.com","name":"ホーム"}},
{"@type":"ListItem","position":2,"item":{"@id":"https://example.com/parent/","name":"親ページ"}},
{"@type":"ListItem","position":3,"item":{"@id":"https://example.com/parent/children/","name":"子ページ"}}]}
</script>チェック結果

これだけ。
いちいちマークアップのコードをitempropに書き換える必要はありません。基本的に初期のコードのまま構造化データのエラーは解消するので、デフォルト設定でOK。まあ装飾用にliの追記作業とかはあるかもしれないけど。
まとめ:bcn_display(); だけでは不十分。bcn_display_json_ld();もセットで設置する
Breadcrumb NavXTは、「インストール後、テンプレートにbcn_display();を追加するだけ!」という解説で終わっている記事が多いですが、これだけではGoogleには「パンくずリスト」として認識されないので注意です。
かといって、設定欄から個別にマークアップを構造化データに対応・修正する必要もありません。
bcn_display();の他、bcn_display_json_ld();でJSON-LDもセットで出力すればそれでOK。それだけで解決します。現場からは以上です。
まあ、そもそもbcn_display();で出力されるデフォルトのマークアップが、最初からitempropで書かれていたら、別途JSON-LDを出力する必要も無いんだけど…。
なんでそこは別々なんだろ。
【了】









