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

Structured data: mixing JSON with Microdata causes errors

我正在尝试用结构化数据标记一篇文章。对于这篇特别的文章,我发现使用 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}
        }
    }

但是,文章正文很长,所以我不想通过文章正文将其放在脚本中。相反,我使用了微数据:

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

我一执行此操作,测试工具就对我 JSON 中的每个项目给出错误,说这些字段是必需的。

有没有办法在不将 3,000 行内容复制到 JSON 脚本 articleBody 的情况下做到这一点?

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

理论上,解决方案是传达两个 Article 项目描述的是 相同的 文章,而不是两篇不同的文章。这可以通过 giving them the same URI as ID: with @id in JSON-LD, with itemid in Microdata ().

来完成

但是,目前 Google 的结构化数据测试工具 (apart from curious exceptions)。当使用相同的语法时,"merges" 所有具有相同 ID 的项目。

好像没有别的选择了

如果您只关心 Google’s Article rich result,请注意 articleBody 属性 似乎不受支持。因此,您可以省略 Microdata Article 项目,或者您可以等着看 Google 是否设法为您的页面显示富媒体搜索结果(来自您的 JSON-LD 项目),尽管有另一个"incomplete" 页面上的微数据项。