我有一个描述旅游景点的页面(TouristAttraction
)。由于我还想添加面包屑信息,因此还需要添加WebPage
。
添加这两个信息的方法是什么:
我是否应该使用WebPage
并将TouristAttraction
添加为mainEntity
script
块,并使用单独的WebPage
和TouristAttraction
块?当使用两个实体时:
发布于 2018-08-09 19:00:43
@unor的答案几乎是正确的,但如果你是为google serp做这件事,那么只需将它拆分成单独的json块(或图形符号)就能得到最佳结果。
假设您想要在serps中使用Recipe实体来获取google's rich snippet for Recipies,您可以这样做:
<script type="application/ld+json">
{
"@context":"https:\/\/schema.org",
"@type":"Recipe",
"name":"Example",
"image":"https:\/\/www.example.com"
}
</script>
在谷歌的Structed Data Testing Tool中,你会看到一个预览按钮:
如果您现在想要添加来自其他实体(如breadcrumb)的其他信息,则必须使用单独的JSON-LD块,否则将无法获得预览按钮。举个例子
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemPage",
"breadcrumb": {
"@type": "BreadcrumbList"
},
"mainEntity": {
"@type":"Recipe",
"name":"Example",
"image":"https:\/\/www.example.com"
}
}
</script>
是有效的,但不会显示预览按钮。
但如果拆分它,它将显示给单独的实体和预览按钮:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemPage",
"breadcrumb": {
"@type": "BreadcrumbList"
}
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type":"Recipe",
"name":"Example",
"image":"https:\/\/www.example.com"
}
}
</script>
同样适用于数组表示法:
<script type="application/ld+json">
[
{
"@context": "http://schema.org",
"@type": "ItemPage",
"breadcrumb": {
"@type": "BreadcrumbList"
}
},
{
"@context": "http://schema.org",
"@type":"Recipe",
"name":"Example",
"image":"https:\/\/www.example.com"
}
]
</script>
和图表:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@graph":
[
{
"@type": "ItemPage",
"breadcrumb": {
"@type": "BreadcrumbList"
}
},
{
"@type":"Recipe",
"name":"Example",
"image":"https:\/\/www.example.com"
}
]
}
</script>
Credits到@unor (另请参阅How do you combine several JSON-LD markups?)
发布于 2018-08-08 02:21:01
使用mainEntity
当然比不使用它更好,因为更多的数据(如果准确的话)通常比更少的数据更好。
但是无论是使用一个还是多个script
元素,您都可以在这两种情况下使用mainEntity
。在第一种情况下,您可以简单地嵌套项。在第二种情况下,您可以使用make use of URI references。
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemPage",
"breadcrumb": {
"@type": "BreadcrumbList"
},
"mainEntity": {
"@type": "TouristAttraction"
}
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "ItemPage",
"breadcrumb": {
"@type": "BreadcrumbList"
},
"mainEntity": {"@id": "#content"}
}
</script>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "TouristAttraction",
"@id": "#content"
}
</script>
(还有there are other ways。)
当然,无论您选择哪种方式,ItemPage
和TouristAttraction
都是不同的实体。因此,如果您将aggregateRating
添加到ItemPage
,它将用于页面的评级,如果您将其添加到TouristAttraction
,它将用于吸引力的评级。对于采用相同值的属性,将它们添加到两个实体中仍然是有意义的,因为使用者可能只对其中一个实体感兴趣,而忽略另一个实体。
发布于 2018-08-09 08:47:30
WebPage对于网页是隐式的,所以您不需要专门添加它。
您可以将BreadcrumbList定义为顶级实体,系统会将其理解为WebPage中的实体。
对于您希望被视为主实体的实体,您还可以将其设置为顶级实体,并使用mainEntityOfPage将其id设置为页面的URL来声明它是主实体。
https://stackoverflow.com/questions/51730877
复制相似问题