首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JSON-LD中使用多个元素

如何在JSON-LD中使用多个元素
EN

Stack Overflow用户
提问于 2018-08-07 23:50:53
回答 3查看 2.4K关注 0票数 2

我有一个描述旅游景点的页面(TouristAttraction)。由于我还想添加面包屑信息,因此还需要添加WebPage

添加这两个信息的方法是什么:

我是否应该使用WebPage并将TouristAttraction添加为mainEntity

  • Should I create 2个单独的JSON-LD script块,并使用单独的WebPageTouristAttraction块?

当使用两个实体时:

  1. 我是否必须提供主要信息(名称、图像、评级等)在两个实体中,还是只在一个实体中(哪一个)?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-09 19:00:43

@unor的答案几乎是正确的,但如果你是为google serp做这件事,那么只需将它拆分成单独的json块(或图形符号)就能得到最佳结果。

假设您想要在serps中使用Recipe实体来获取google's rich snippet for Recipies,您可以这样做:

代码语言:javascript
运行
复制
<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块,否则将无法获得预览按钮。举个例子

代码语言:javascript
运行
复制
<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>

是有效的,但不会显示预览按钮。

但如果拆分它,它将显示给单独的实体和预览按钮:

代码语言:javascript
运行
复制
<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>

同样适用于数组表示法:

代码语言:javascript
运行
复制
<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>

和图表:

代码语言:javascript
运行
复制
<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?)

票数 8
EN

Stack Overflow用户

发布于 2018-08-08 02:21:01

使用mainEntity当然比不使用它更好,因为更多的数据(如果准确的话)通常比更少的数据更好。

但是无论是使用一个还是多个script元素,您都可以在这两种情况下使用mainEntity。在第一种情况下,您可以简单地嵌套项。在第二种情况下,您可以使用make use of URI references

代码语言:javascript
运行
复制
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "ItemPage",
  "breadcrumb": {
    "@type": "BreadcrumbList"
  },
  "mainEntity": {
    "@type": "TouristAttraction"
  }
}
</script>
代码语言:javascript
运行
复制
<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。)

当然,无论您选择哪种方式,ItemPageTouristAttraction都是不同的实体。因此,如果您将aggregateRating添加到ItemPage,它将用于页面的评级,如果您将其添加到TouristAttraction,它将用于吸引力的评级。对于采用相同值的属性,将它们添加到两个实体中仍然是有意义的,因为使用者可能只对其中一个实体感兴趣,而忽略另一个实体。

票数 2
EN

Stack Overflow用户

发布于 2018-08-09 08:47:30

WebPage对于网页是隐式的,所以您不需要专门添加它。

您可以将BreadcrumbList定义为顶级实体,系统会将其理解为WebPage中的实体。

对于您希望被视为主实体的实体,您还可以将其设置为顶级实体,并使用mainEntityOfPage将其id设置为页面的URL来声明它是主实体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51730877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档