Лучшие практики JSON-LD: использование нескольких элементов <script>?
Мне любопытно, как лучше всего применять JSON-LD на сайте schema.org.
Если у меня есть страница с 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>
Это правильно или неправильно? Есть ли какая-то выгода или необходимость объединить их в один и тот же сценарий или массив элементов?
3 ответа
Это действительно. Вы можете иметь столько блоков данных (= script
элементы), как вы хотите.
Возможное преимущество использования только одного script
элемент: он позволяет упростить отношения между несколькими элементами (например, если вы решите использовать hasPart
или же mainEntity
), так как вы просто должны вложить элементы.
Но создание этих отношений, конечно, также возможно при использовании отдельных блоков данных путем ссылки на URI элемента с помощью @id
( спасибо, @ Грегг Келлогг).
(Для справки, добавление двух или более элементов верхнего уровня в одном script
возможно с @graph
.)
Нет смысла иметь один или несколько блоков данных, кроме ограничений на то, как вы можете хранить данные схемы и управлять ими на своем веб-сайте.
Например, они могут понадобиться вам отдельно, если разные компоненты вашего сайта отвечают за создание каждого блока данных независимо. В качестве альтернативы, если ваш веб-сайт может управлять всеми схемами для одной страницы в одном месте, может быть проще управлять одним блоком данных и отображать его как один 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>
Только что проверил это на Google Rich Result Test.
У меня есть один скрипт, который содержит информацию, которая всегда должна присутствовать в схеме: название, бренд, описание и т. д. У меня есть еще один скрипт, который содержит необязательные вещи: обзоры и сводные рейтинги.
К сожалению, RRT сообщает мне, что в нем отсутствуют свойства обзоров и сводных рейтингов.
Несколько сценариев JSON-LD не поддерживаются.
Это настоящая проблема, потому что пустой массив отзывов и количество отзывов, равное 0 (для совокупного рейтинга), также не поддерживаются.
Условные свойства JSON-LD оказываются довольно сложной задачей для тех, кто хочет динамически размещать их на странице.