混合使用Schema.org的JSON-LD CollectionPage和Microdata`hasPart`

时间:2018-06-03 15:07:16

标签: schema.org microdata json-ld

下面的微数据标记效果很好,Google's structured data testing tool显示一个CollectionPageWebSite/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's structured data testing tool分别显示对象CollectionPageWebPage/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 个答案:

答案 0 :(得分:2)

  

就像他们没有联系一样

嗯,他们的在您的示例中没有连接。 JSON-LD和Microdata无法在语法级别上协同工作。

如果要连接以不同语法定义的实体,唯一的方法是

  • 为这些实体提供URI(如果它们是相同的URI,则为相同的URI)和
  • 将这些URI引用为属性值(如果一个实体是另一个实体的属性的值)。

Giving entities URIs按您提到的方式工作:在JSON-LD中使用@id,在Microdata中使用itemid(在RDFa Lite中使用resource

消费者(搜索引擎或Google的SDTT等服务,浏览器插件等本地客户端)必须支持以下引用(并非所有内容),如果它们支持以下引用,则它们还必须支持解析附加语法(并非全部都是)。

但即使您使用此类URI引用,它也不会更改您使用的语法的一致性要求。您的HTML文档无效,因为您拥有的itemprop属性不属于itemscope。这是不允许的。因此,如果您想继续使用Microdata,您也必须在Microdata中提供父项(在您的情况下为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个条目(if syntaxes are mixed),但它们(正确)具有相同的URI。由Google决定如何处理这些信息,以了解各种结构化数据功能。可能没有/部分/全部功能支持混合语法引用(they don’t seem to document it);他们的SDTT如何显示事物并不一定反映他们如何解释它们的功能。

更多例子