结构化数据:将JSON与Microdata混合会导致错误

时间:2017-07-23 12:22:06

标签: schema.org microdata json-ld google-rich-snippets structured-data

我正在尝试用结构化数据标记一篇文章。对于这篇特别的文章,我发现使用JSON而不是Microdata更简洁。在Google的Structured Data Testing Tool中,此脚本可以正常运行,没有错误:

<script type="application/ld+json">
    {
      "@context": "http://schema.org",
      "@type": "Article",
      "mainEntityOfPage": {
         "@type": "WebPage",
         "@id": "https://my_website/my_article.php"
      },
      "author": "My name",
      "name": "My article",
      "headline": "My article",
      "datePublished": "2017-06-10",
      "dateModified": "2017-07-23",
      "image":{"@type":"ImageObject","url":"https://my_website/images/my_logo.png","height":768, "width":782},
      "publisher" : {
          "@type": "Organization", 
          "name": "My site name",
          "logo":{"@type":"ImageObject","url":"https://my_website/images/my_banner.png","height":60, "width":600}
        }
    }

然而,文章正文很长,所以我不想通过articleBody将它放在脚本中。相反,我使用过Microdata:

<div itemscope itemtype="http://schema.org/Article" class="col-md-8">
     <div itemprop="articleBody" class="card">
          <!-- Rest of my HTML -->

一旦我这样做,测试工具就会为我的JSON中的每个项目提供一个错误,说这些字段是必需的。

有没有办法在不将3,000行内容复制到JSON脚本文章中的情况下执行此操作?

1 个答案:

答案 0 :(得分:3)

您正在创建两个Article项。报告使用Microdata创建的项目的错误,而不是使用JSON-LD创建的项目。

理论上,解决方案是传达两个Article项描述相同的文章,而不是两篇不同的文章。这可以通过giving them the same URI as ID完成:JSON-LD中的@id,微数据中的itemidexample with JSON-LD and Microdata)。

但是,目前Google的结构化数据测试工具doesn’t seem to support this for mixed syntaxes(除了curious exceptions)。当使用相同的语法时,它&#34;合并&#34;所有具有相同ID的项目。

似乎没有其他选择。

如果您只关心Google’s Article rich result,请注意似乎不支持articleBody属性。所以你可以省略Microdata Article项,或者你可以等到看看Google是否设法显示你的页面的丰富结果(来自你的JSON-LD项目),尽管还有另一个&#34;不完整的&#34;页面上的微数据项目。