サイト内で記事(Article、NewsArticle、BlogPosting) やパンくずリスト(BreadcrumbList)などの構造化データ (JSON-LD) を実装したい場面が多々ある。
しかしNext.jsで提供されているMetadata APIに該当の機能は含まれておらず、自前で上記のようなオブジェクトを定義して<script>
内に埋め込む必要がある。
そこで調べたところGoogle製のschema-dtsを使うことでTypeScriptの型安全性を享受できそうだったので、今回はパンくずリストを例に構造化データを実装してみる。
1. schema-dtsをインストール
2. BreadcrumbListのオブジェクトを生成
schema-dts
から提供される型 (今回はBreadcrumbList
) を利用することで、上記のように型安全に対象スキーマのオブジェクトを生成できる。もちろんitemListElement
の各要素にも型補完が効くのでとても便利。
もし@context
を含めたい場合はWithContext
でラップする。
3. <script>内に埋め込む
JSON-LD出力用のコンポーネントを実装する。Propsの型をThing
にすることでschema-dts
のスキーマの型を幅広く受け入れるようにしている。
4. パンくずリストのコンポーネントを実装
先ほど実装した汎用関数でJSON-LDを生成し、パンくずリスト本体と共に出力するコンポーネントを実装する (JSON-LDは<body>
内に含めても無問題) 。
あとは上記のようにサイト構造やページ階層に応じて適切なitems
を渡してあげる。
これで目当ての構造化データが出力された。