HugoでJSON-LD形式のパンくずリストを出力する
HugoでパンくずリストをJSON-LD形式で出力するpartialテンプレートを作成しました。
はじめに
以前アップした記事「Hugoでmicrodata形式のパンくずリストを出力する」ではmicrodata形式の構造化データ形式でパンくずリストを出力しました。
microdata形式の場合はページを構成するHTMLに構造化データをマークアップする必要がありましたがJSON-LD形式の場合はその必要がありません。
Googleの構造化データに関する一般的なガイドラインではJSON-LD形式の構造化データが推奨となっていますので、このブログのパンくずリストをmicrodata形式からJSON-LD形式の構造化データに変更することにしました。
構造化データに関する一般的なガイドラインを遵守してください。こちらのガイドラインは、構造化データが Google 検索のリッチリザルトに表示されるようにするために役立ちます。
JSON-LD形式について
JSON-LD形式の構造化データはtype属性にapplication/ld+jsonを指定した<script>
要素にJSON形式で記述します。
HTMLの要素の属性などに記述するRDFaやmaicrodata形式の構造化データよりも表現できることが多く推奨されている形式です。
以下はJSON-LD形式のパンくずリストの構造化データのサンプルです。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "トップページ",
"item": "https://example.com/"
},{
"@type": "ListItem",
"position": 2,
"name": "記事一覧ページ",
"item": "https://example.com/posts/"
},{
"@type": "ListItem",
"position": 3,
"name": "記事ページ"
}]
}
</script>
パンくずリストの構造化データの場合は@type
にBreadcrumbList
を指定したJSONのitemListElement
プロパティーにパンくずリストのページの一覧を設定します。
パンくずリストのアイテムのそれぞれのページはitem
プロパティーにそのページのURLを設定します。
最後のアイテムの場合はitem
プロパティーが必須ではなくURLが設定されていない場合は現在のページのURLが使用されます。
ウェブページにパンくずリスト マークアップを追加して、ユーザーがウェブサイトをより効果的に理解し、探索する方法をご確認ください。
JSON-LD形式のパンくずリストの出力
JSON-LD形式のパンくずリストを出力するpartialテンプレートを作成しました。
このpartialテンプレートはページにHTMLやJSONを出力するのではなくreturn
を使って値を返すことができる機能を利用してJSONのもととなるdict
を返却します。
{{- return $breadcrumb -}}
このテンプレートを利用する側のレイアウト用のテンプレートではこのテンプレートから返却されたdict
をjsonify
関数でJSON形式に変換して出力します。
{{- with partial "partials/jsonld/breadcrumb" . -}}
<script type="application/ld+json">
{{- . | jsonify | safeJS -}}
</script>
{{- end -}}
またインラインにpartialを2つ定義しています。
- トップページからのページ一覧を取得するpartial
- トップページからのJSON-LDのListItemを取得するpartial
これらもreturn
で値を返すことができる機能を利用して関数のように使用しています。
構造化データのマークアップのテスト
正しく構造化データのマークアップができているかの検証はGoogleのリッチリザルト テストのページで行うことができます。
正しくパンくずリストの構造化データのマークアップができていれば検出された構造化データにパンくずリストが有効なアイテムとして表示されます。
おわりに
以前作成したmicrodata形式の構造化データのパンくずリストの場合はposition
を設定するためにページに必要のないmeta
タグをパンくずリストのHTMLにマークアップする必要がありました。
microdata形式のパンくずリストからJSON-LD形式の構造化データに変更してみた感想としてはJSON-LD形式の場合はページを構成するHTMLとは別に構造化データを定義できる点が大きいメリットだと思いました。