it-swarm.dev

Best practice JSON-LD: utilizzo di più elementi <script>?

Sono curioso delle migliori pratiche per l'applicazione di JSON-LD su un sito per schema.org.

Se ho una pagina con un Article e voglio anche definire WebSite sulla mia pagina, avrei questo:

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

È corretto o sbagliato? C'è qualche vantaggio o necessità di unirli nello stesso script o array di elementi?

56
Stu Furlong

È valido Puoi avere tutti i blocchi di dati (= script elementi) che desideri.

Un possibile vantaggio dell'utilizzo di un solo elemento script: consente di semplificare le relazioni tra più elementi (ad esempio, se si decide di utilizzare hasPart o mainEntity ), in quanto devi semplicemente nidificare gli elementi.
Ma rendere queste relazioni ovviamente è possibile anche quando si utilizzano blocchi di dati separati, facendo riferimento all'URI dell'elemento con @id ( grazie, @ Gregg Kellogg ).

(Per riferimento, l'aggiunta di due o più elementi di livello superiore in un singolo script è possibile con @graph.)

43
unor

Non vi è alcun vantaggio nell'avere blocchi di dati singoli o multipli, oltre alle limitazioni su come archiviare e gestire i dati dello schema nel tuo sito Web.

Ad esempio, potresti averne bisogno separatamente se componenti diversi all'interno del tuo sito Web sono responsabili della generazione indipendente di ciascun blocco di dati. In alternativa, se il tuo sito Web è in grado di gestire tutti gli schemi per una pagina in un unico posto, potrebbe essere più semplice gestire un singolo blocco di dati e renderlo come un singolo elemento script.

Puoi combinarli in un singolo script elencando ogni schema come un array come questo:

<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