Html 最佳JSON-LD实践:使用多个<;脚本>;元素?

Html 最佳JSON-LD实践:使用多个<;脚本>;元素?,html,seo,schema.org,json-ld,Html,Seo,Schema.org,Json Ld,我对在schema.org网站上应用JSON-LD的最佳实践感到好奇 如果我有一个包含文章的页面,并且我还想在我的页面上定义网站,我会有以下内容: <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "url": "http://www.example.com/", "potentialAction": { "@

我对在schema.org网站上应用JSON-LD的最佳实践感到好奇

如果我有一个包含
文章
的页面,并且我还想在我的页面上定义
网站
,我会有以下内容:

<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "http://www.example.com/",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "http://www.example.com/search?&q={query}",
      "query-input": "required"
    }
}
</script>

<!- … -->

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Article",
  "author": "John Doe",
  "interactionCount": [
    "UserTweets:1203",
    "UserComments:78"
  ],
  "name": "How to Tie a Reef Knot"
}
</script>

{
“@context”:”http://schema.org",
“@type”:“网站”,
“url”:”http://www.example.com/",
“潜在作用”:{
“@type”:“SearchAction”,
“目标”:http://www.example.com/search?&q={query}“,
“查询输入”:“必需”
}
}
{
“@context”:”http://schema.org",
“@type”:“Article”,
“作者”:“约翰·多伊”,
“交互计数”:[
“用户推特:1203”,
“用户评论:78”
],
“名称”:“如何打暗礁结”
}

这是对的还是错的?将它们合并到同一脚本或项目数组中有什么好处或需要吗?

这是有效的。您可以拥有任意数量的数据块(
script
元素)

仅使用一个
脚本
元素的一个可能好处是:它允许简化多个项目之间的关系(例如,如果您决定使用或),因为您只需嵌套这些项目。
但是,当使用单独的数据块时,通过使用
@id
()引用项目的URI,当然也可以建立这些关系


(供参考,可以使用
@graph

使用单个或多个数据块没有任何好处,除了关于如何在网站中存储和管理架构数据的限制

例如,如果网站中的不同组件负责独立地生成每个数据块,则可能需要将它们分开。或者,如果您的网站能够在一个位置管理一个页面的所有架构,那么管理单个数据块并将其作为单个
脚本
元素呈现可能会更简单

通过将每个架构作为数组列出,您可以将它们组合成一个脚本,如下所示:

<script type="application/ld+json">
[
  {
    "@context": "http://schema.org",
    "@type": "WebSite",
    "url": "http://www.example.com/",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "http://www.example.com/search?&q={query}",
      "query-input": "required"
    }
  },
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "author": "John Doe",
    "interactionCount": [
      "UserTweets:1203",
      "UserComments:78"
    ],
    "name": "How to Tie a Reef Knot"
  }
]
</script>

[
{
“@context”:”http://schema.org",
“@type”:“网站”,
“url”:”http://www.example.com/",
“潜在作用”:{
“@type”:“SearchAction”,
“目标”:http://www.example.com/search?&q={query}“,
“查询输入”:“必需”
}
},
{
“@context”:”http://schema.org",
“@type”:“Article”,
“作者”:“约翰·多伊”,
“交互计数”:[
“用户推特:1203”,
“用户评论:78”
],
“名称”:“如何打暗礁结”
}
]

您还可以使用@id将JSON-LD脚本块中的节点连接在一起。从模型的角度来看,它们在公共图中都被视为三元组。然而,搜索引擎可能会“优化”,而不是你所期望的。使用JSON-LD算法可能没有理由使用单独的脚本块;只需将它们合并到一个公共对象,甚至一个对象数组中即可。@GreggKellogg和unor-谢谢您的回答!我主要担心的是CMS的局限性,因为我会在全局级别指定网站,在页面级别指定文章。我不太确定在这种情况下会发生什么。谷歌的结构化数据工具给了它一个好的答案,但我总是有点怀疑:)@GreggKellogg那么现在是2017年了,现在的推荐是
@graph
还是一个对象数组?相关讨论是在2012年完成的(),我读到的共识是多个顶级对象的
@graph
。提前感谢。@AmirR通常您将使用
@graph
(或
@graph
的别名)来允许使用具有共享上下文的单个顶级对象。然而,两者都是相当合法的。请注意,另一种模式是使用反向属性,将公共对象值用作顶级对象,链接到引用它的所有资源。请看。阅读本文,只需使用一个简单的列表更新链接:为什么不使用图形