Beste JSON-LD-Methoden: Verwenden mehrerer <script> -Elemente?

71

Ich bin gespannt auf die bewährte Methode zum Anwenden von JSON-LD auf eine Website für schema.org.

Wenn ich eine Seite mit einem habe Articleund diese auch WebSiteauf meiner Seite definieren möchte , hätte ich Folgendes:

<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>

Ist das richtig oder falsch? Gibt es einen Vorteil oder eine Notwendigkeit, diese in demselben Skript oder Array von Elementen zusammenzuführen?

Stu Furlong
quelle
1
Lesen Sie diese w3.org/TR/json-ld/#h3_advanced-context-usage , verwenden Sie einfach eine einfache Liste
hsrv

Antworten:

52

Es ist gültig. Sie können beliebig viele Datenblöcke (= scriptElemente) haben.

Ein möglicher Vorteil der Verwendung nur eines scriptElements: Es erleichtert die Beziehung zwischen mehreren Elementen (z. B. falls Sie sich für die Verwendung von hasPartoder entscheiden mainEntity), da Sie die Elemente einfach verschachteln müssen.
Das Herstellen dieser Beziehungen ist natürlich auch möglich, wenn separate Datenblöcke verwendet werden, indem auf die URI des Elements mit verwiesen wird @id( danke, @ Gregg Kellogg ).

(Als Referenz, das Hinzufügen von zwei oder mehr Elementen der obersten Ebene in einem einzigenscript möglich mit @graph.)

unor
quelle
8
Sie können die Knoten im JSON-LD-Skriptblock auch mit @id verknüpfen. Aus Modellsicht werden sie alle in einem gemeinsamen Diagramm als Tripel behandelt. Suchmaschinen können jedoch "optimieren" und nicht so, wie Sie es erwarten. Bei Verwendung von JSON-LD-Algorithmen gibt es wahrscheinlich keinen guten Grund, separate Skriptblöcke zu verwenden. Führen Sie sie einfach zu einem gemeinsamen Objekt oder sogar zu einer Reihe von Objekten zusammen.
Gregg Kellogg
@ GreggKellogg und unor - Danke für die Antworten! Mein Hauptanliegen war auf die Einschränkungen eines CMS zurückzuführen, da ich WebSite auf globaler Ebene und Artikel auf Seitenebene angeben würde. Ich war mir nicht ganz sicher, was mich in diesem Szenario erwarten würde. Googles Structured Data Tool gibt es in Ordnung, aber ich bin dort immer ein wenig skeptisch :)
Stu Furlong
@ GreggKellogg also ist es 2017, ist die Empfehlung jetzt @graphoder eine Reihe von Objekten? Die relevante Diskussion wurde 2012 geführt ( github.com/json-ld/json-ld.org/issues/96 ), und der Konsens aus meiner Lektüre war @graphfür mehrere Objekte der obersten Ebene. Danke im Voraus.
Amir Rustamzadeh
1
@AmirR Normalerweise verwenden Sie @graph(oder einen Alias ​​von @graph), um die Verwendung eines einzelnen Objekts der obersten Ebene mit gemeinsam genutztem Kontext zu ermöglichen. Beide sind jedoch durchaus legitim. Beachten Sie, dass ein anderes Muster darin besteht, eine umgekehrte Eigenschaft mit einem gemeinsamen Objektwert zu verwenden, der als Objekt der obersten Ebene verwendet wird und mit allen Ressourcen verknüpft ist, die darauf verweisen. Siehe Reverse-Eigenschaften .
Gregg Kellogg
57

Es hat keinen Vorteil, einzelne oder mehrere Datenblöcke zu haben, außer Einschränkungen hinsichtlich des Speicherns und Verwaltens von Schemadaten auf Ihrer Website.

Beispielsweise benötigen Sie sie möglicherweise separat, wenn verschiedene Komponenten auf Ihrer Website für die unabhängige Generierung jedes Datenblocks verantwortlich sind. Wenn Ihre Website in der Lage ist, alle Schemas für eine Seite an einem Ort zu verwalten, ist es möglicherweise einfacher, einen einzelnen Datenblock zu verwalten und als einzelnes scriptElement zu rendern .

Sie können diese zu einem einzigen Skript kombinieren, indem Sie jedes Schema wie folgt als Array auflisten:

<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>
Teaforchris
quelle
warum nicht graph upbuild.io/blog/…
ujwal dhakal