Next.js(React)でJSON-LDデータをレンダリングする方法をわかりやすく解説
Next.jsやその他のReactプロジェクトで、JSON-LD(application/ld+json)スキーマを正しく動作させる方法を解説します。
JSON-LDをレンダリングするために必要なもの
Next.js(または任意のReactアプリケーション)でJSON-LDデータをレンダリングするには、以下の3つの要素を使用します。
<script>要素dangerouslySetInnerHTML属性JSON.stringifyメソッド(シリアライズ用)
JSON-LDとは?
JSON-LDは「JavaScript Object Notation for Linked Data」の略称です。Webサイトのコンテンツに関するSchema.orgのデータを、検索エンジンに対して軽量に伝えるための手法です。適切に実装することで、検索結果にレビュー評価などのリッチリザルトが表示される可能性があります。
実装手順
それでは、実際の例を見ていきましょう。まず、次のようなHTMLのJSON-LDスキーマがあると仮定します。
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Name of service",
"image": "https://somewebsite.com/static/images/some-image.jpg",
"description": "I seek the means to fight injustice. To turn fear against those who prey on the fearful. Someone like you. Someone who'll rattle the cages. My anger outweighs my guilt.",
"brand": "Company Name",
"review": {
"@type": "Review",
"name": "Company Name ",
"reviewBody": "It was a dog. It was a big dog. It's not who I am underneath but what I do that defines me. Well, you see... I'm buying this hotel and setting some new rules about the pool area.",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5"
},
"datePublished": "2020-04-06",
"author": {"@type": "Person", "name": "Emma"}
}
}
</script>
1. スクリプトタグを取り除く
このJSON-LDスキーマをNext.jsで動作させるには、まずHTMLの<script>タグを取り除き、JSON-LDオブジェクトだけの状態にします。
2. 変数に代入する
次に、そのJSON-LDオブジェクトを変数に代入します。
const schemaData =
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Name of service",
"image": "https://somewebsite.com/static/images/some-image.jpg",
"description": "I seek the means to fight injustice. To turn fear against those who prey on the fearful. Someone like you. Someone who'll rattle the cages. My anger outweighs my guilt.",
"brand": "Company Name",
"review": {
"@type": "Review",
"name": "Company Name ",
"reviewBody": "It was a dog. It was a big dog. It's not who I am underneath but what I do that defines me. Well, you see... I'm buying this hotel and setting some new rules about the pool area.",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5"
},
"datePublished": "2020-04-06",
"author": {"@type": "Person", "name": "Emma"}
}
}
3. JSON.stringify()でシリアライズする
続いて、schemaData変数をJSON.stringify()でシリアライズします。
JSON.stringify(schemaData)
4. dangerouslySetInnerHTMLで出力する
最後に、JSON.stringify(schemaData)を<script>要素内のdangerouslySetInnerHTML属性のオブジェクト値として渡せば、ブラウザ上にレンダリングされます。
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }}
/>
完全なコード例
イメージしづらい場合は、このチュートリアルのコードをもとにした完全なページ例をご覧ください。すべてのNext.js/Reactサイトでそのまま動作するはずです。
import React from 'react';
const schemaData =
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Name of service",
"image": "https://somewebsite.com/static/images/some-image.jpg",
"description": "I seek the means to fight injustice. To turn fear against those who prey on the fearful. Someone like you. Someone who'll rattle the cages. My anger outweighs my guilt.",
"brand": "Company Name",
"review": {
"@type": "Review",
"name": "Company Name ",
"reviewBody": "It was a dog. It was a big dog. It's not who I am underneath but what I do that defines me. Well, you see... I'm buying this hotel and setting some new rules about the pool area.",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5"
},
"datePublished": "2020-04-06",
"author": {"@type": "Person", "name": "Emma"}
}
}
const SomePage = () => {
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaData) }}
/>
<div>Your content</div>
</>
);
};
export default SomePage;
まとめ
Next.jsやReactでJSON-LDをレンダリングする際は、「JSONオブジェクトを変数に格納 → JSON.stringify()で文字列化 → dangerouslySetInnerHTMLでscript要素に出力」という流れを押さえておけば問題ありません。実装後は、Googleの「リッチリザルトテスト」などを活用して、構造化データが正しく認識されているか必ず確認しておきましょう。
-
データバックアップの正しい方法とは?3-2-1ルールで大切なデータを守る
現代のIT社会において、包括的なバックアップ戦略を持つことは不可欠です。データが失われる原因は数多く存在し、バックアップを適切に行う方法を理解することは、深刻な事態を回避するために極めて重要です。では、具体的にどのようにデータをバックアップすればよいのでしょうか?データ損失のリスクサイバー攻撃、内部犯行、自然災害、記録メディアの破損、人的ミスなど、データを失う要因は枚挙にいとまがありません。個人にとってデータ損失は煩わしく心を痛める出来事ですが、企業にとっては取り返しのつかない結果をもたらしかねません。Consoltechによる以下の衝撃的な統計をご覧ください。重大なデータ損失を経験した企業の
-
Androidのデータバインディング入門:Data Binding Libraryでレイアウトとデータを結びつける方法
データバインディングとは、アプリが扱う「データ」と、画面上の視覚的なUI要素を結びつける(バインドする)ための手法です。この仕組みを使うと、UI側の値が更新されるたびに、裏側で保持しているデータも自動的に更新されます。 決して目新しい概念ではなく、AngularJS、React、Vueなど、多くのフロントエンドフレームワークがすでにこの仕組みを設計に取り入れています。 しかし本記事で注目するのはフロントエンドフレームワークではなく、モバイル開発です。GoogleはAndroid向けにData Binding Libraryを提供しており、これはAndroid Jetpackの一部として位置づけ