Смешивание 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 показывает две отдельные страницы CollectionPages или два отдельных элемента других типов.

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

1 ответ

Решение

как если бы они не имели никакой связи

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

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

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

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

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

Но даже если вы используете такие ссылки 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>

Google SDTT по-прежнему отображает два CollectionPage записи ( если синтаксис смешан), но они (правильно) имеют одинаковый URI. Google должен решить, что делать с этой информацией для их различных функций структурированных данных. Может быть, ссылки со смешанным синтаксисом поддерживаются ни для одной / некоторых / всех их функций ( кажется, они не документируют это); то, как их SDTT отображает вещи, не обязательно отражает то, как они интерпретируют это для своих функций.

Больше примеров

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