2015-06-09 7 views
35

Ich bin neugierig auf die beste Vorgehensweise für die Anwendung von JSON-LD auf eine Website für schema.org.Beste JSON-LD-Praktiken: Verwenden mehrerer <script> Elemente?

Wenn ich eine Seite mit einem Article haben und ich mag auch WebSite auf meiner Seite definieren, würde ich diese:

<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 müssen Sie diese in dasselbe Skript oder Array von Elementen zusammenführen?

+0

dieses lesen https://www.w3.org/TR/json-ld/#h3_advanced-context Verwenden Sie einfach eine einfache Liste – hsrv

Antwort

23

Es ist gültig. Sie können so viele Datenblöcke (= script Elemente) haben, wie Sie möchten.

Ein möglicher Vorteil von nur ein script Elemente mit: es ermöglicht Beziehungen zwischen mehreren Elementen leichter zu machen (zum Beispiel Sie hasPart oder mainEntity verwenden sollten entscheiden), wie Sie einfach die Elemente Nest haben.
Aber diese Beziehungen sind natürlich auch möglich, wenn Sie separate Datenblöcke verwenden, indem Sie den URI des Artikels mit @id (thanks, @ Gregg Kellogg) referenzieren.

(Als Referenz ist adding two or more top-level items in a single script möglich mit @graph.)

+5

Sie können auch die Knoten im JSON-LD-Skriptblock mit @id verknüpfen. Aus einer Modellperspektive werden sie alle als Tripel in einem gemeinsamen Graphen behandelt. Suchmaschinen können jedoch "optimieren" und nicht so, was Sie erwarten. Mit JSON-LD-Algorithmen gibt es wahrscheinlich keinen guten Grund, separate Skriptblöcke zu verwenden. füge sie einfach in ein gemeinsames Objekt oder sogar ein Array von Objekten ein. –

+0

@GreggKellogg und unor - Danke für die Antworten! Mein Hauptanliegen war aufgrund der Einschränkungen eines CMS, da WebSite ich auf globaler Ebene angeben würde und Artikel auf Seitenebene angegeben wird. Ich war mir nicht sicher, was ich in diesem Szenario erwarten würde. Google's Structured Data Tool gibt es ein Okay, aber ich bin immer ein bisschen skeptisch da :) –

+0

@GreggKellogg so ist es 2017, ist die Empfehlung jetzt "@ Graph" oder ein Array von Objekten? Die entsprechende Diskussion fand 2012 statt (https://github.com/json-ld/json-ld.org/issues/96), und der Konsens aus meiner Lektüre war "@ graph" für mehrere Top-Level-Objekte. Danke im Voraus. –

23

Es gibt keinen Nutzen einzelne oder mehrere Datenblöcke in mit, andere als Einschränkungen um, wie Sie vielleicht speichern und Schemadaten in Ihre Website verwalten.

Sie müssen diese beispielsweise trennen, wenn verschiedene Komponenten innerhalb 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 diesen als einzelnes Element zu rendern (script).

Sie können diese in einem einzigen Skript kombinieren, indem jedes Schema als Array-Eintrag wie folgt aus:

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