Смешивание JSON-LD CollectionPage и микроданных ' hasPart` из Schema.org


Разметка микроданных ниже работает отлично, инструмент тестирования структурированных данных Google показывает одного CollectionPage и WebSite/WebPage как детей.

<body itemscope itemtype="https://schema.org/CollectionPage">
  <span itemscope itemtype="https://schema.org/WebSite" itemprop="hasPart">
    <a href="https://springfield-xxxx.us" itemprop="url">Official site of Springfield</a>
  </span>
  <span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
    <a href="https://facebook.com/group/XXXX" itemprop="url">Local events in Springfield</a>
  </span>
  <span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
    <a href="https://news.us/city/springfield-xxxx" itemprop="url">Latest news in Springfield</a>
  </span>
</body>

Однако, когда я добавляю JSON-LD инструмент тестирования структурированных данных Google показывает объекты CollectionPage и WebPage/WebSite отдельно, как если бы они не имели связи. Вот пример с JSON-LD:

<!DOCTYPE html>
<html>
<head>
  <script type="application/ld+json">
    {
      "description": "...",
      "author": {"@type":"Person", "name": "Homer J. Simpson"},
      "@type": "CollectionPage",
      "url": "http://my-springfield.us/sites",
      "publisher": {
        "@type": "Organization",
        "logo": "Object of type ImageObject here",
        "name": "Homer J. Simpson"
      },
      "image": "...",
      "headline": "Springfield Sites",
      "sameAs": ["..."],
      "@context": "http://schema.org"
    }
  </script>
</head>
<body>
  <span itemscope itemtype="https://schema.org/WebSite" itemprop="hasPart">
    <a href="https://springfield-xxxx.us" itemprop="url">Official site of Springfield</a>
  </span>
  <span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
    <a href="https://facebook.com/group/XXXX" itemprop="url">Local events in Springfield</a>
  </span>
  <span itemscope itemtype="https://schema.org/WebPage" itemprop="hasPart">
    <a href="https://news.us/city/springfield-xxxx" itemprop="url">Latest news in Springfield</a>
  </span>
</body>
</html>

Я попытался поместить @id в JSON-LD и itemid на body безрезультатно: инструмент тестирования Google показывает две отдельные страницы коллекции или две отдельные предметы других типов.

Мой вопрос : Как соединить JSON-LD и микроданные, чтобы инструмент тестирования Google показывал один CollectionPage с WebPage/WebSite в качестве детей/реквизитов?

1 3

1 ответ:

Как если бы у них не было никакой связи

Ну, онине связаны в вашем примере. JSON-LD и микроданные не могут работать вместе на синтаксическом уровне.

Если вы хотите соединить сущности, определенные в разных синтаксисах, единственный способ-это

  • дайте этим сущностям URI (тот же URI, если это одно и то же), и
  • ссылайтесь на эти URI как на значения свойств (если одна сущность является значением другой сущности). собственность).

Предоставление сущностей URIs работает так, как вы упомянули: с @id в JSON-LD и с itemid в микроданных (и с resource в RDFa Lite).

Потребители (такие сервисы, как поисковые системы или SDTT Google, локальные клиенты, такие как браузерные дополнения и т. д.) должны были бы поддерживать следующие ссылки (не все), и если они действительно поддерживают следующие ссылки, они также должны были бы поддерживать синтаксический анализ дополнительного синтаксиса (не все).

Но даже если вы используйте такие ссылки URI,это не меняет требований соответствия используемых синтаксисов. Ваш HTML-документ недействителен, потому что у вас есть атрибуты itemprop, которые не принадлежат itemscope. Это недопустимо. Поэтому, если вы хотите продолжать использовать микроданные, вы также должны предоставить родительский элемент в микроданных (CollectionPage в вашем случае).

Это был бы способ передать, что оба вхождения CollectionPage представляют одну и ту же сущность (они имеют один и тот же URI = базовый URL текущего документ):

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "CollectionPage",
    "@id": ""
  }
</script>

<div itemscope itemtype="http://schema.org/CollectionPage" itemid="">
  <span itemprop="hasPart" itemscope itemtype="http://schema.org/WebSite"></span>
  <span itemprop="hasPart" itemscope itemtype="http://schema.org/WebSite"></span>
  <span itemprop="hasPart" itemscope itemtype="http://schema.org/WebPage"></span>
</div>
SDTT Google по-прежнему отображает две записи CollectionPage (, Если синтаксис смешан), но они (правильно) имеют один и тот же URI. Google решает, что делать с этой информацией для различных функций структурированных данных. Возможно, ссылки на смешанный синтаксис поддерживаются для none / some / all их функций (они, кажется, не документируют его ); то, как их SDTT отображает вещи, не обязательно отражает то, как они интерпретируют его для своих особенности.

Еще примеры