web-dev-qa-db-ja.com

JSON-LDのベストプラクティス:複数の<script>要素を使用していますか?

Schema.orgのサイトにJSON-LDを適用するためのベストプラクティスに興味があります。

Articleを含むページがあり、ページでWebSiteを定義したい場合、次のようにします。

<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "http://www.example.com/",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "http://www.example.com/search?&q={query}",
      "query-input": "required"
    }
}
</script>

<!- … -->

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Article",
  "author": "John Doe",
  "interactionCount": [
    "UserTweets:1203",
    "UserComments:78"
  ],
  "name": "How to Tie a Reef Knot"
}
</script>

これは正しいですか、間違っていますか?これらを同じスクリプトまたはアイテムの配列にマージする利点または必要性はありますか?

56
Stu Furlong

有効です必要な数のデータブロック(= script要素)を持つことができます。

script要素を1つだけ使用することの利点:複数のアイテム間の関係を簡単にすることができます(たとえば、 hasPart または mainEntity )。アイテムをネストするだけです。
しかし、個別のデータブロックを使用する場合、@idthanks、@ Gregg Kellogg )でアイテムのURIを参照することにより、これらの関係を作成することももちろん可能です。

(参照用に、 単一のscriptに2つ以上のトップレベル項目を追加@graphで可能です。)

43
unor

Webサイトでスキーマデータを保存および管理する方法に関する制限を除いて、単一または複数のデータブロックを使用してもメリットはありません。

たとえば、Webサイト内の異なるコンポーネントが各データブロックを個別に生成する場合、それらを個別に必要とする場合があります。あるいは、Webサイトが1ページのすべてのスキーマを1か所で管理できる場合、単一のデータブロックを管理し、これを単一のscript要素としてレンダリングする方が簡単な場合があります。

次のように各スキーマを配列としてリストすることにより、これらを単一のスクリプトに結合できます。

<script type="application/ld+json">
[
  {
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "http://www.example.com/",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "http://www.example.com/search?&q={query}",
      "query-input": "required"
    }
  },
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "author": "John Doe",
    "interactionCount": [
      "UserTweets:1203",
      "UserComments:78"
    ],
    "name": "How to Tie a Reef Knot"
  }
]
</script>
50
teaforchris