JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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の「リッチリザルトテスト」などを活用して、構造化データが正しく認識されているか必ず確認しておきましょう。

  1. データバックアップの正しい方法とは?3-2-1ルールで大切なデータを守る

    現代のIT社会において、包括的なバックアップ戦略を持つことは不可欠です。データが失われる原因は数多く存在し、バックアップを適切に行う方法を理解することは、深刻な事態を回避するために極めて重要です。では、具体的にどのようにデータをバックアップすればよいのでしょうか?データ損失のリスクサイバー攻撃、内部犯行、自然災害、記録メディアの破損、人的ミスなど、データを失う要因は枚挙にいとまがありません。個人にとってデータ損失は煩わしく心を痛める出来事ですが、企業にとっては取り返しのつかない結果をもたらしかねません。Consoltechによる以下の衝撃的な統計をご覧ください。重大なデータ損失を経験した企業の

  2. Androidのデータバインディング入門:Data Binding Libraryでレイアウトとデータを結びつける方法

    データバインディングとは、アプリが扱う「データ」と、画面上の視覚的なUI要素を結びつける(バインドする)ための手法です。この仕組みを使うと、UI側の値が更新されるたびに、裏側で保持しているデータも自動的に更新されます。 決して目新しい概念ではなく、AngularJS、React、Vueなど、多くのフロントエンドフレームワークがすでにこの仕組みを設計に取り入れています。 しかし本記事で注目するのはフロントエンドフレームワークではなく、モバイル開発です。GoogleはAndroid向けにData Binding Libraryを提供しており、これはAndroid Jetpackの一部として位置づけ