用于Google Article Rich Snippet的带有'mainEntityOfPage'的微数据标记

uno*_*nor 4 meta html5 microdata schema.org google-rich-snippets

Google的Article Rich Snippet 的Microdata示例包含meta具有Schema.org mainEntityOfPage属性的以下元素:

<meta itemscope itemprop="mainEntityOfPage"  itemType="https://schema.org/WebPage" itemid="https://google.com/article"/>
Run Code Online (Sandbox Code Playgroud)

使用Nu Html Checker进行检查时,出现此错误:

元素meta缺少必填属性content

添加空content属性似乎可以解决此错误。这样做正确吗?

uno*_*nor 5

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

WHATWG HTMLHTML 5.1(W3C工作草案)中:“如果itemprop指定[…] ,则content还必须指定属性。”
来自旧的Microdata(W3C注意):“如果meta元素具有itemprop属性,则[…]该content属性必须存在。”

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


Schema.org的mainEntityOfPage属性期望URL或CreativeWork项目作为值。

Google自己的文章Rich Snippet推荐/必需属性的文档说,他们期望URL值,但是他们的示例展示了如何创建项目值。

根据Google结构化数据测试工具,以下所有解决方案都可以。(某些示例使用itemid属性,严格来说,尚未为Schema.org词汇表允许/定义该属性。)

如果要提供URL值:

<link itemprop="mainEntityOfPage" href="https://example.com/article" />
Run Code Online (Sandbox Code Playgroud)

直截了当。

这遵循Google的建议,要求的标记最少,并且可以在head和中使用body

如果您有可见链接,则当然也可以使用一个a元素。

如果要提供项目值:

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

div元素+ url属性

<div itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/WebPage">
  <link itemprop="url" href="https://example.com/article" /> 
</div>
Run Code Online (Sandbox Code Playgroud)

这将创建一个WebPage带有url属性的项目。只能在中使用body

如果您有可见链接,则当然也可以使用一个a元素。

meta具有空content属性的元素和itemid

<meta itemprop="mainEntityOfPage" content="" itemscope itemtype="http://schema.org/WebPage" itemid="https://example.com/article" />
Run Code Online (Sandbox Code Playgroud)

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

请注意,content在这种情况下,微数据解析器必须忽略该属性,因为itemscope提供了该属性(Microdata W3C注意 / WHATWG HTML Microdata:“第一个匹配的大小写”)。因此,itemprop值将是项目,而不是字符串。

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

div 元素与 itemid

<div itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/WebPage" itemid="https://example.com/article">
</div>
Run Code Online (Sandbox Code Playgroud)

这将创建一个带有标识符的空项目。而不是meta示例,它仅在中起作用body,因此允许直接向此WebPage项目添加其他属性。

如果您已有WebPage物品:

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

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

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

</body>
Run Code Online (Sandbox Code Playgroud)

您可以通过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>
Run Code Online (Sandbox Code Playgroud)

与上述方法之一结合使用,例如具有itemidurl属性。

请注意,在这种情况下,您通常会使用inverse属性mainEntity,但是Google目前没有文档证明他们支持Article Rich Snippet。