重复 schema/structured 数据标记?
Duplicate schema/structured data markup?
这个结构会不会有问题?
<script type="application/ld+json">
{
"@context":"http://schema.org",
"@type":"WebPage",
"name":"Postcards",
"url":"https://local.mysite.com/postcards.html",
"breadcrumb":{
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"item":{
"@id":"https://local.mysite.com",
"name":"My Site"
}
},
{
"@type":"ListItem",
"position":2,
"item":{
"@id":"https://local.mysite.com/postcards.html",
"name":"Postcards"
}
}
]
},
"mainEntity":{
"@type":"WebPageElement",
"offers":{
"@type":"Offer",
"itemOffered":[
{
"@type":"Product",
"name":"Christmas Postcards",
"url":"https://local.mysite.com/christmas-postcards.html"
},
{
"@type":"Product",
"name":"Getaway Postcards",
"url":"https://local.mysite.com/getaway-postcards.html"
}
]
}
}
}</script>
<script type="application/ld+json">
{
"@context":"http://schema.org",
"@type":"WebPage",
"name":"Postcards",
"url":"https://local.mysite.com/postcards.html",
"breadcrumb":{
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"item":{
"@id":"https://local.mysite.com",
"name":"My Site"
}
},
{
"@type":"ListItem",
"position":2,
"item":{
"@id":"https://local.mysite.com/postcards.html",
"name":"Postcards"
}
}
]
},
"mainEntity":{
"@type":"WebPageElement",
"offers":{
"@type":"Offer",
"itemOffered":[
{
"@type":"Product",
"name":"Mini Postcards",
"url":"https://local.mysite.com/mini-postcards.html"
},
{
"@type":"Product",
"name":"Summer Postcards",
"url":"https://local.mysite.com/summer-postcards.html"
}
]
}
}
}</script>
单个类别页面可能有 "duplicate" 标记的原因是该页面可能使用多个产品模板。
在当前的实现中,标记是在产品模板中动态构建的。例如,如果单个类别页面有两个产品模板,标记将被重建两次,但包含不同的 WebPageElement
。
这会产生不好的结果吗?我检查了 Google 的测试工具,它没有给我任何错误或警告。
多个节点,同一个实体
如果您有多个节点代表页面上的同一实体,最佳做法是为这些节点提供相同的 URI as identifier。
使用 JSON-LD,您可以提供带有 @id
的标识符。
所以
- 您的
WebPage
项都可以获得 "@id": ""
(对于当前的 URL;最好在此处指定您的规范 URL),
- 您的
BreadcrumbList
项都可以获得 "@id": "#breadcrumbs"
,
- 您的
ListItem
-1 项都可以获得 "@id": "#breadcrumbs-1"
,并且
- 您的
ListItem
-2 件物品都可以获得 "@id": "#breadcrumbs-2"
。
这样,Google 的 SDTT 将只显示这些项目中的每一个,因为它现在知道它们是关于同一个实体的。
引用节点而不是复制它们
@id
还允许您引用节点而不是嵌入它们(从而复制它们的数据)。 See an example.
在您的情况下,这样做的好处是您不必一开始就复制 WebPage
/BreadcrumbList
/ListItem
节点。您将指定这些节点一次,然后每个产品模板将仅输出 Offer
/Product
节点。这些节点可以包括(反向)对 WebPage
/etc 的引用。 (您可能更容易实施),或 WebPage
/等。可以引用这些节点。
这个结构会不会有问题?
<script type="application/ld+json">
{
"@context":"http://schema.org",
"@type":"WebPage",
"name":"Postcards",
"url":"https://local.mysite.com/postcards.html",
"breadcrumb":{
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"item":{
"@id":"https://local.mysite.com",
"name":"My Site"
}
},
{
"@type":"ListItem",
"position":2,
"item":{
"@id":"https://local.mysite.com/postcards.html",
"name":"Postcards"
}
}
]
},
"mainEntity":{
"@type":"WebPageElement",
"offers":{
"@type":"Offer",
"itemOffered":[
{
"@type":"Product",
"name":"Christmas Postcards",
"url":"https://local.mysite.com/christmas-postcards.html"
},
{
"@type":"Product",
"name":"Getaway Postcards",
"url":"https://local.mysite.com/getaway-postcards.html"
}
]
}
}
}</script>
<script type="application/ld+json">
{
"@context":"http://schema.org",
"@type":"WebPage",
"name":"Postcards",
"url":"https://local.mysite.com/postcards.html",
"breadcrumb":{
"@type":"BreadcrumbList",
"itemListElement":[
{
"@type":"ListItem",
"position":1,
"item":{
"@id":"https://local.mysite.com",
"name":"My Site"
}
},
{
"@type":"ListItem",
"position":2,
"item":{
"@id":"https://local.mysite.com/postcards.html",
"name":"Postcards"
}
}
]
},
"mainEntity":{
"@type":"WebPageElement",
"offers":{
"@type":"Offer",
"itemOffered":[
{
"@type":"Product",
"name":"Mini Postcards",
"url":"https://local.mysite.com/mini-postcards.html"
},
{
"@type":"Product",
"name":"Summer Postcards",
"url":"https://local.mysite.com/summer-postcards.html"
}
]
}
}
}</script>
单个类别页面可能有 "duplicate" 标记的原因是该页面可能使用多个产品模板。
在当前的实现中,标记是在产品模板中动态构建的。例如,如果单个类别页面有两个产品模板,标记将被重建两次,但包含不同的 WebPageElement
。
这会产生不好的结果吗?我检查了 Google 的测试工具,它没有给我任何错误或警告。
多个节点,同一个实体
如果您有多个节点代表页面上的同一实体,最佳做法是为这些节点提供相同的 URI as identifier。
使用 JSON-LD,您可以提供带有 @id
的标识符。
所以
- 您的
WebPage
项都可以获得"@id": ""
(对于当前的 URL;最好在此处指定您的规范 URL), - 您的
BreadcrumbList
项都可以获得"@id": "#breadcrumbs"
, - 您的
ListItem
-1 项都可以获得"@id": "#breadcrumbs-1"
,并且 - 您的
ListItem
-2 件物品都可以获得"@id": "#breadcrumbs-2"
。
这样,Google 的 SDTT 将只显示这些项目中的每一个,因为它现在知道它们是关于同一个实体的。
引用节点而不是复制它们
@id
还允许您引用节点而不是嵌入它们(从而复制它们的数据)。 See an example.
在您的情况下,这样做的好处是您不必一开始就复制 WebPage
/BreadcrumbList
/ListItem
节点。您将指定这些节点一次,然后每个产品模板将仅输出 Offer
/Product
节点。这些节点可以包括(反向)对 WebPage
/etc 的引用。 (您可能更容易实施),或 WebPage
/等。可以引用这些节点。