我想在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。
那么如何说breadcrumb
与itemscope
的{{1}}相关,而不是与WebPage
的{{1}}相关?由于设计原因,我无法从itemscope
WebPageElement
中获取breadcrumb
。
顺便说一下,我在这里仅以WebPageElement
为例 - 它可以是任何其他属性,例如div
或breadcrumb
。
答案 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)
除了发布的解决方法之外,还有几种解决方案。 mainEntityOfPage
和mainContentOfPage
是可选的,我不确定它们会对丰富网页摘要的影响程度有多大影响。使用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
中使用如果您选择让它们可见,您可以在页脚中以小文本复制面包屑(例如)。