it-swarm.dev

Najlepsze praktyki JSON-LD: używanie wielu elementów <script>?

Jestem ciekawy najlepszej praktyki stosowania JSON-LD na stronie schema.org.

Jeśli mam stronę z Article i chcę również zdefiniować WebSite na mojej stronie, miałbym to:

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

Czy to jest poprawne czy złe? Czy jest jakaś korzyść lub potrzeba scalenia ich w tym samym skrypcie lub tablicy elementów?

56
Stu Furlong

To jest ważne. Możesz mieć tyle bloków danych (= script elements), ile chcesz.

Możliwa korzyść z użycia tylko jednego elementu script: pozwala to na łatwiejsze relacje między wieloma elementami (np. Jeśli zdecydujesz się użyć hasPart lub mainEntity ), ponieważ wystarczy zagnieździć elementy.
Ale stworzenie tych relacji jest oczywiście możliwe również przy użyciu oddzielnych bloków danych, poprzez odniesienie URI elementu za pomocą @id ( dzięki, @ Gregg Kellogg ).

(Dla porównania dodanie dwóch lub więcej elementów najwyższego poziomu w jednym script jest możliwe za pomocą @graph.)

43
unor

Posiadanie jednego lub wielu bloków danych nie ma żadnych korzyści poza ograniczeniami dotyczącymi sposobu przechowywania i zarządzania danymi schematu w witrynie.

Na przykład możesz potrzebować ich osobnych, jeśli różne komponenty w Twojej witrynie są odpowiedzialne za generowanie każdego bloku danych niezależnie. Alternatywnie, jeśli twoja witryna jest w stanie zarządzać wszystkimi schematami dla jednej strony w jednym miejscu, łatwiejsze może być zarządzanie pojedynczym blokiem danych i renderowanie go jako pojedynczego elementu script.

Możesz połączyć je w jeden skrypt, wymieniając każdy schemat jako tablicę w następujący sposób:

<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