【问题标题】:Microdata markup with 'mainEntityOfPage' for Google Article Rich SnippetGoogle 文章丰富片段的“mainEntityOfPage”微数据标记
【发布时间】:2016-03-21 02:12:38
【问题描述】:

Google Article Rich Snippet 的 Microdata example 包含带有 Schema.org 的 mainEntityOfPage 属性的 meta 元素:

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

使用Nu Html Checker 检查时,我收到此错误:

元素 meta 缺少必需的属性 content。

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

【问题讨论】:

    标签: html meta schema.org microdata google-rich-snippets


    【解决方案1】:

    Nu Html Checker 是正确的,谷歌的例子是无效的。如果meta 元素具有itemprop 属性,则需要content 属性。

    来自WHATWG HTML 和HTML 5.1 (W3C Working Draft):“如果指定了[...] itemprop,则还必须指定content 属性。”
    来自旧的Microdata (W3C Note):“如果meta 元素具有itemprop 属性,[...] 必须存在content 属性。”

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


    Schema.org 的 mainEntityOfPage property 期望值是 URL 或 CreativeWork 项。

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

    根据Google Structured Data Testing Tool,以下所有解决方案都可以。 (一些示例使用itemid 属性,严格来说,not yet allowed/defined 用于 Schema.org 词汇表。)

    如果要提供 URL 值:

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

    直截了当。

    这遵循 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>
    

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

    如果你有一个可见的链接,你当然也可以使用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:“第一个匹配案例”)。所以itemprop 值将是一个项目,而不是一个字符串。

    这会创建一个带有标识符的空项目。在head 和body 中工作。它不允许直接向这个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>
    

    结合上述方法之一,例如,结合itemid 或url 属性。

    请注意,在这种情况下,您通常会使用 the inverse property mainEntity,但 Google 目前并未证明他们会支持 Article Rich Snippet。

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多