结构化数据(微数据)和嵌入式项目

时间:2015-09-20 10:02:47

标签: html5 schema.org microdata

我想在Schema.org上使用Microdata来定义我的网页的主要内容,所以我做了类似的事情:

<body itemscope="itemscope" itemtype="http://schema.org/WebPage">
  ...
  <div itemprop="mainContentOfPage" itemscope="itemscope" itemtype="http://schema.org/WebPageElement">

    <div itemprop="breadcrumb" itemscope="itemscope" itemtype="http://schema.org/BreadcrumbList">...</div>

  </div>
  ...
</body>

问题是,当我在Google结构化数据测试工具下检查架构时,我收到错误:

  

对于WebPageElement类型的对象,Google无法识别属性breadcrumb。

那么如何说breadcrumbitemscope的{​​{1}}相关,而不是与WebPage的{​​{1}}相关?由于设计原因,我无法从itemscope WebPageElement中获取breadcrumb

顺便说一下,我在这里仅以WebPageElement为例 - 它可以是任何其他属性,例如divbreadcrumb

2 个答案:

答案 0 :(得分:1)

ugly solutions for this:添加div itemscope(但没有itemtype)作为breadcrumbs属性的父级,并使用{{ 1}}将itemref属性添加到breadcrumb项。

WebPage

我不推荐这个(但它是有效的Microdata)。您应该尝试更改标记结构,以便不必像那样嵌套它。

话虽如此,您可能希望使用mainEntity / mainEntityOfPage代替mainContentOfPage,因为<body itemscope="itemscope" itemtype="http://schema.org/WebPage" itemref="breadcrumbs"> <div itemprop="mainContentOfPage" itemscope="itemscope" itemtype="http://schema.org/WebPageElement"> <div itemscope> <div itemprop="breadcrumb" itemscope="itemscope" itemtype="http://schema.org/BreadcrumbList" id="breadcrumbs">…</div> </div> </div> </body> 仅适用于mainContentOfPage项,不太有用。

答案 1 :(得分:0)

除了发布的解决方法之外,还有几种解决方案。 mainEntityOfPagemainContentOfPage是可选的,我不确定它们会对丰富网页摘要的影响程度有多大影响。使用about之类的主要短语/页面标题可能在排名方面同样有效 - 但我对此不确定。

我个人会为面包屑添加json-ld,它总是隐藏的,不需要靠近实际可见的面包屑。它比微数据更易于阅读和维护,可以放置在任何地方,在schema.org中没有任何内容表明您必须只遵循一种格式。我已经成功地将JSON-LD用于某些任务(例如:动态数据)和其余的微数据,谷歌验证和理解。 json-ld可以在<body>的开头或结尾等处添加。您可以将BreadcrumbList嵌入到WebPage元素中。 Google提供了自己的json-ld breadcrumb example。 schema.org中的示例 -

<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement":
 [
 {
 "@type": "ListItem",
 "position": 1,
 "item":
  {
  "@id": "https://example.com/dresses",
  "name": "Dresses"
  }
},
{
  "@type": "ListItem",
  "position": 2,
  "item":
  {
   "@id": "https://example.com/dresses/real",
   "name": "Real Dresses"
  }
 }
]
}
</script> 

第二种替代解决方案,但不是很精彩,或者使用<meta><link>创建重复的面包屑数据,以使链接不可见。根据您网站的设计和面包屑数量,您可以找到包含正确单词的可见区域并在其中添加微数据 - 例如在该页面的菜单结构中,或使用页面标题。下面的示例有2个隐藏的面包屑,并使用<h1>标记中的页面标题。

<span itemprop="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList">
  <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
  <meta itemprop="name" content="example.com"/>
  <meta itemprop="item" content="http://example.com"/>
  <meta itemprop="position" content="1"/>
  </span>
  <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><meta itemprop="name" content="topic1"/>
  <meta itemprop="item" content="http://example.com/topic1.html" />
  <meta itemprop="position" content="2"/></span>
  <span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
  <meta itemprop="item" content="http://example.com/topic1/new.html" />
  <meta itemprop="position" content="3"/>
  <h1 itemprop="name">New Products</h1>
  </span>
  </span>

虽然隐藏的元数据并不理想,但您只复制页面上已显示的内容,并且只复制您自己网站中的链接。一些机器可读但不可见的微数据是可以接受的,例如日期,货币,时间。链接在此w3.org example

中使用

如果您选择让它们可见,您可以在页脚中以小文本复制面包屑(例如)。