如何在JSON-LD中使用多个元素
How to use multiple elements in JSON-LD
我有一个描述旅游景点的页面(TouristAttraction
). Since I also want to add breadcrumb informations, I would need to add WebPage
。
添加这两个信息的方法是什么:
- 我应该使用
WebPage
并将 TouristAttraction
添加为 mainEntity
吗?
- 我应该创建 2 个单独的 JSON-LD
script
块吗?
WebPage
和 TouristAttraction
块?
并且当使用 2 个实体时:
- 我是否必须在两个实体中提供主要信息(名称、图像、评级等),还是只在一个(哪个)实体中提供?
使用 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>
(还有 。)
当然,无论您走哪条路,ItemPage
和 TouristAttraction
都是不同的实体。所以如果在ItemPage
后面加上aggregateRating
,就是页面的评分,如果在TouristAttraction
后面加上,就是景点的评分。对于具有相同值的属性,将它们添加到两个实体仍然有意义,因为消费者可能只对其中一个实体感兴趣而忽略另一个实体。
WebPage 是网页隐含的,所以你不需要专门添加它。
您可以将 BreadcrumbList 定义为顶级实体,系统将理解它是网页中的一个实体。
对于您希望被视为主要实体的实体,您还可以将其设为顶级实体,并使用 mainEntityOfPage 将其 id 设置为页面的 URL 来声明它是主要实体。
@unor 的回答几乎是正确的,但是如果你是为 google serp 做的,那么只将它分成单独的 json-块(或图形符号)会得到最好的结果。
假设您想在 serps 中使用 Recipe entity to get 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>
在 google 的 Structed Data Testing Tool 中,您将获得一个预览按钮:
如果您现在想要添加来自其他实体(如面包屑)的其他信息,您必须使用单独的 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>
Array-Notation 同样适用:
<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>
致谢@unor(另见 )
我有一个描述旅游景点的页面(TouristAttraction
). Since I also want to add breadcrumb informations, I would need to add WebPage
。
添加这两个信息的方法是什么:
- 我应该使用
WebPage
并将TouristAttraction
添加为mainEntity
吗? - 我应该创建 2 个单独的 JSON-LD
script
块吗?WebPage
和TouristAttraction
块?
并且当使用 2 个实体时:
- 我是否必须在两个实体中提供主要信息(名称、图像、评级等),还是只在一个(哪个)实体中提供?
使用 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>
(还有
当然,无论您走哪条路,ItemPage
和 TouristAttraction
都是不同的实体。所以如果在ItemPage
后面加上aggregateRating
,就是页面的评分,如果在TouristAttraction
后面加上,就是景点的评分。对于具有相同值的属性,将它们添加到两个实体仍然有意义,因为消费者可能只对其中一个实体感兴趣而忽略另一个实体。
WebPage 是网页隐含的,所以你不需要专门添加它。
您可以将 BreadcrumbList 定义为顶级实体,系统将理解它是网页中的一个实体。
对于您希望被视为主要实体的实体,您还可以将其设为顶级实体,并使用 mainEntityOfPage 将其 id 设置为页面的 URL 来声明它是主要实体。
@unor 的回答几乎是正确的,但是如果你是为 google serp 做的,那么只将它分成单独的 json-块(或图形符号)会得到最好的结果。
假设您想在 serps 中使用 Recipe entity to get 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>
在 google 的 Structed Data Testing Tool 中,您将获得一个预览按钮:
如果您现在想要添加来自其他实体(如面包屑)的其他信息,您必须使用单独的 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>
Array-Notation 同样适用:
<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>
致谢@unor(另见