Много элементов сценария JSON-LD на странице или один с вложенностью?

Допустим, у нас есть электронная коммерция, такая как Adidas. У нас есть базовая структура JSON-LD для WebSsite:

{
  "@context": "http://schema.org",
  "@type": "WebSite",
  "url": "https://adidas.com/us",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://adidas.com/us/search?q = {search_term_string}",
    "query-input": "required name=search_term_string"
  }
}

У нас есть Organization:

{
  '@context': 'http://schema.org',
  '@type': 'Organization',
  'name': 'Adidas',
  'description': 'Sport Shop',
  'email': '[email protected]',
  'url': 'http://www.adidas.us',
  'logo': 'http://www.adidas.us/logo.svg'
}

Веб-сайт также является Store:

 "@context":"http://schema.org",
 "@type":"Store",
 "url": 'http://www.adidas.us',
 "description": "Adidas Shop !",
 "name": "Adidas"
}

А еще у нас есть классический BreadcrumbList:

 "@context":"http://schema.org",
 "@type":"BreadcrumbList",
 "itemListElement":
  [  
    {  
       "@type":"ListItem",
       "position":1,
       "item":{  
          "@type":"Thing",
          "@id":"https://www.adidas.us",
          "name":"Adidas"
       }
    },
    {  
       "@type":"ListItem",
       "position":2,
       "item":{  
          "@type":"Thing",
          "@id":"https://www.adidas.us/shoes",
          "name":"Adidas shoes"
       }
    },
    {  
       "@type":"ListItem",
       "position":3,
       "item":{  
          "@type":"Thing",
          "@id":"https://www.adidas.us/shoes/Featured",
          "name":"Adidas featured shoes"
       }
    }
  ]
}

Эти 3 JSON-LD являются общими (более или менее подробными, конечно), и иногда я обнаруживал на веб-странице 3 элемента script с этими JSON-LD, иногда только 1, иногда 2.

Должны ли мы попытаться вложить их в один script (если да, то как!?), Или лучше оставить их разделенными?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
530
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Важно то, что вы подключаете сущности с подходящими свойствами, не сколькоscript элементами, которые вы используете.

Если у вас есть эти три объекта на странице, вы должен передать, как они связаны. Что вы, вероятно, хотите передать: существует веб-страница, которая является частью этого веб-сайта, которая публикуется этой организацией, и на которой есть этот список хлебных крошек.

Так что вам не хватает сущности, представляющей веб-страницу (→ WebPage), и свойств для соединения всех ваших сущностей (→ publisher, breadcrumb, isPartOf).

В том, сколько элементов script вы укажете эти сущности, зависит от вас:

  • Один script, вмещающий все энты.
  • Один script с несколькими объектами верхнего уровня (с использованием @graph и @id).
  • script на объект (с использованием @id).
  • Комбинация вышеперечисленного.

Первый из них самый простой:

{
  "@context": "http://schema.org",
  "@type": "WebPage",
  "isPartOf": {
    "@type": "WebSite"
  },
  "publisher": {
    "@type": "Organization"
  },
  "breadcrumb": {
    "@type": "BreadcrumbList"
  }
}

Дайте каждой соответствующей организации @id, поэтому вы можете Справка этих сущностей на той же странице (в том же элементе script или в других) или даже на внешних страницах.

Я использую его здесь, чтобы передать, что один и тот же Organization является publisher для WebPage, а также WebSite:

{
  "@context": "http://schema.org",
  "@type": "WebPage",
  "@id": "",
  "isPartOf": {
    "@type": "WebSite",
    "@id": "/#this-site",
    "publisher": {"@id": "/#this-org"}
  },
  "publisher": {
    "@type": "Organization",
    "@id": "/#this-org"
  },
  "breadcrumb": {
    "@type": "BreadcrumbList"
  }
}

Хорошо, это круто. большое спасибо @unor. Так сложно найти подробную информацию об этом. Итак, следуя вашему последнему фрагменту, как мы могли бы добавить 'Store' @type, который я видел, передавая arr of types"@type": ["Website", "Store"]. Это хороший способ сделать это? Или мы можем добавить «Магазин» в качестве нового ключа под "Breadcrumb". А Adidas Store также является «Магазином обуви» ... "@type": ["Website", "Store", "ShoeStore"]? Как видите, меня смущает эта вложенность. Веб-страница также имеет ключевую специализацию (одна из предметных областей, к которой относится содержимое этой веб-страницы) "specialty" : { @type: "Store" }

Héctor León 31.05.2018 13:04

@ HéctorLeón: Пока вы мог добавляете данные в структуру BreadcrumbList, я бы этого не делал (потребители могут пропустить весь элемент, если их не интересуют хлебные крошки). - Существуют различные способы подключения Store - это зависит от вашего конкретного варианта использования (чтобы ответить на этот вопрос, необходимы дополнительные сведения; может потребоваться новый вопрос; если только спросить, какое свойство использовать, возможно, лучше всего в Вебмастерам) . - Кстати: если это ShoeStore, вам не нужно указывать Store дополнительно, потому что ShoeStore имеет Store в качестве родительского типа.

unor 31.05.2018 13:17

И еще один вопрос, почему перед хэштегом стоит косая черта /? в "@id": "/#ID-HERE"

Héctor León 31.05.2018 13:29

О, спасибо, поэтому я не заставляю указывать родителя, они просто наследуют его родительские свойства. Еще раз спасибо, я присоединюсь к этому сообществу и опубликую новый вопрос :)

Héctor León 31.05.2018 13:31

@ HéctorLeón: Цель состоит в том, чтобы указать URI, который представляет реальную вещь, а не только страницу, где это описано; # помогает устранить неоднозначность (подробности). Итак, для веб-сайта по адресу https://example.com/, указав где-нибудь "@id": "/#this-org", результирующий URI будет: https://example.com/#this-org. Каждый раз, когда вы упоминаете эту организацию в своих структурированных данных, вы должны указывать этот URI. Теперь это просто пример - вы, конечно, можете использовать любой URI, который хотите (/organization#this, /foobar552#organization и т. д.).

unor 31.05.2018 13:38

Другие вопросы по теме