我正在尝试用结构化数据标记一篇文章。对于这篇特别的文章,我发现使用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脚本文章中的情况下执行此操作?
答案 0 :(得分:3)
您正在创建两个Article
项。报告使用Microdata创建的项目的错误,而不是使用JSON-LD创建的项目。
理论上,解决方案是传达两个Article
项描述相同的文章,而不是两篇不同的文章。这可以通过giving them the same URI as ID完成:JSON-LD中的@id
,微数据中的itemid
(example 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;页面上的微数据项目。