Google 文章 Rich Snippet 的 'mainEntityOfPage' 微数据标记

Microdata markup with 'mainEntityOfPage' for Google Article Rich Snippet

Google 的 Article Rich Snippet 的 Microdata example 包含这个 meta 元素和 Schema.org 的 mainEntityOfPage 属性:

<meta itemscope itemprop="mainEntityOfPage"  itemType="https://schema.org/WebPage" itemid="https://google.com/article"/>

当用 Nu Html Checker 检查它时,我得到这个错误:

Element meta is missing required attribute content.

添加一个空的 content 属性似乎可以解决这个错误。这样做是否正确?

Nu Html Checker 正确,Google 示例无效。如果 meta 元素具有 itemprop 属性,则 content 属性是必需的。

来自 WHATWG HTML and also HTML 5.1 (W3C Working Draft):"If […] itemprop is specified, then the content attribute must also be specified."
来自旧的 Microdata (W3C Note):"If a meta element has an itemprop attribute, […] the content attribute must be present."

添加空 content 属性使其有效,但还有其他选项。


Schema.org 的 mainEntityOfPage property expects as value either a URL or a CreativeWork 项。

Google 自己的 recommended/required properties for their Article Rich Snippet 文档说他们期望 URL 值,但他们的示例显示了如何创建项目值。

根据 Schema.org 词汇表的 Google Structured Data Testing Tool. (Some examples use the itemid attribute, which is, strictly speaking, not yet allowed/defined,以下所有解决方案都可以。)

如果你想提供一个URL值:

<link itemprop="mainEntityOfPage" href="https://example.com/article" />

直截了当。

这遵循 Google 自己的建议,需要最少的标记,并且适用于 head 以及 body

如果你有可见的link,你当然也可以使用a元素。

如果您想提供项目价值:

作为类型,您可以使用 CreativeWork 或其任何子类型,例如 WebPage.

div元素+url属性

<div itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/WebPage">
  <link itemprop="url" href="https://example.com/article" /> 
</div>

这将创建一个 WebPage 项,其中 url 属性。只能在body.

中使用

如果你有可见的link,你当然也可以使用a元素。

meta 元素具有空 content 属性和 itemid

<meta itemprop="mainEntityOfPage" content="" itemscope itemtype="http://schema.org/WebPage" itemid="https://example.com/article" />

这基于 Google 的示例,但使用空 content 属性使其有效。

请注意,在这种情况下,微数据解析器必须忽略 content 属性,因为提供了 itemscope 属性 (Microdata W3C Note/WHATWG HTML Microdata: "first matching case")。所以 itemprop 值将是一个项目,而不是一个字符串。

这将创建一个带有标识符的空项目。适用于 headbody。它不允许直接向此 WebPage 项目添加属性(您必须创建另一个具有相同 itemid 值的项目)。

div 元素与 itemid

<div itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/WebPage" itemid="https://example.com/article">
</div>

这将创建一个带有标识符的空项目。与 meta 示例不同,它仅适用于 body,但因此允许直接向此 WebPage 项目添加其他属性。

如果您已经有 WebPage 件:

如果您已经在页面上提供了 WebPage 项,例如,

<body itemscope itemtype="http://schema.org/WebPage">

  <article itemscope itemtype="http://schema.org/Article">
  </article>

</body>

您可以通过 Microdata 的 itemref 属性使用它:

<body itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/WebPage" id="this-page">

  <article itemscope itemtype="http://schema.org/Article" itemref="this-page">
  </article>

</body>

结合上述方法之一,例如 itemidurl 属性.

请注意,在这种情况下,您通常会使用 ,但 Google 目前并未证明他们会支持文章丰富网页摘要。