【问题标题】:How do you combine several JSON-LD markups?你如何组合几个 JSON-LD 标记?
【发布时间】:2018-06-25 22:47:12
【问题描述】:

作为一个新手,我发现很难将几个或多个 JSON-LD 标记合并在一起。你能告诉我我做错了什么吗?

当我在 Google 结构化数据测试工具中输入以下标记时,它只显示 Organization 架构类型的结果,而 BreadcrumbList 类型也有。

<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"legalName": "Example INC",
"logo": "https://www.example.com/image.png",
"url": "https://www.example.com/",
"sameAs": [
"https://www.facebook.com/example",
"https://www.linkedin.com/company/example",
"https://twitter.com/example",
"https://www.youtube.com/user/example",
"https://en.wikipedia.org/wiki/example"
]
}
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": "1",
"item": {
"@id": "https://www.example.com/",
"name": "Homepage" 
}
}
]
</script>

【问题讨论】:

    标签: html json json-ld


    【解决方案1】:

    JSON 连接不正确。如果您手动执行它,那么如果您有一个启用 JSON 的编辑器(带有 lint),那将真的很有帮助。 Atom (https://atom.io) 是一个不错的选择。

    对于这个特定的例子,这里是更正的版本:

    [{
        "@context": "http://schema.org",
        "@type": "Organization",
        "legalName": "Example INC",
        "logo": "https://www.example.com/image.png",
        "url": "https://www.example.com/",
        "sameAs": [
            "https://www.facebook.com/example",
            "https://www.linkedin.com/company/example",
            "https://twitter.com/example",
            "https://www.youtube.com/user/example",
            "https://en.wikipedia.org/wiki/example"
        ]}, {
        "@type": "BreadcrumbList",
        "itemListElement": [{
            "@type": "ListItem",
            "position": "1",
            "item": {
                "@id": "https://www.example.com/",
                "name": "Homepage"
            }
        }]}
    ]
    

    PS:通常简单地正确格式化代码可以帮助发现这些简单的错误。

    【讨论】:

    • 感谢您的回复和编辑建议 :-) 顺便说一句,Google 结构化数据测试工具显示错误,知道为什么吗? screencast.com/t/OQIztCfDtHBt
    • @type 重复。我没有使用过 json ld,所以不确定它的作用。但是,为了使其有效,您必须知道数据是什么,而我不知道。一个简单的解决方法是将每个都包装在一个单独的对象中,但它可能无法实现您想要的。编辑以反映这一点
    • 再次感谢。就“面包屑”元素而言,这会引发错误。我最好使用单独的脚本元素,直到我很好地理解了 JSON 的工作原理。感谢您的所有帮助。
    【解决方案2】:

    要指定多个顶级项目,您有三个选项:

    数组

    <script type="application/ld+json">
    [
      {
         "@context": "http://schema.org",
         "@type": "Organization"
      },
      {
         "@context": "http://schema.org",
         "@type": "BreadcrumbList"
      }
    ]
    </script>
    

    缺点:您必须为每个项目重复 @context

    @graph

    <script type="application/ld+json">
    {
      "@context": "http://schema.org",
      "@graph": 
      [
        {
           "@type": "Organization"
        },
        {
           "@type": "BreadcrumbList"
        }
      ]
    }
    </script>
    

    多个script 元素

    <script type="application/ld+json">
    {
      "@context": "http://schema.org",
      "@type": "Organization"
    }
    </script>
    
    <script type="application/ld+json">
    {
      "@context": "http://schema.org",
      "@type": "BreadcrumbList"
    }
    </script>
    

    缺点:您必须为每个项目重复 script 元素和 @context


    但通常最好只提供一个顶级项,并将其他项嵌套在合适的属性下。但是,这并非在所有情况下都是可能的。

    在您的情况下,似乎可以通过添加 WebPage 项目,假设它是组织的页面并且此页面具有此面包屑列表:

    <script type="application/ld+json">
    {
      "@context": "http://schema.org",
      "@type": "WebPage",
      "provider": 
      {
        "@type": "Organization"
      },
      "breadcrumb": 
      {
        "@type": "BreadcrumbList"
      }
    }
    </script>
    

    You can achieve the same without nesting:给每个项目一个带有@id的URI,然后将这些URI作为属性值引用。)

    【讨论】:

    • 谢谢!我同意“但通常最好只提供一个顶级项目,并将附加项目嵌套在合适的属性下”。我正计划实施第三个选项,它看起来与重复的脚本元素是多余的。此外,当我通过 Google 结构化数据测试工具运行您的所有示例时,似乎只有第 3 和第 4 个(我打算添加这个)有效。为什么前两个不返回任何东西?
    • @Iam_Amjath:前三个示例在 SDTT 中没有显示任何内容,因为我没有添加任何属性。只要您为每个项目添加至少一个属性(例如,name),它们就会出现。
    • 好的。谢谢你让我知道这一点。为了安全起见,我认为我应该回到使用单独的脚本元素来满足我的大部分需求。即使省略逗号也会引发错误,这让我作为新手很难解决。也许是时候花时间好好学习 JSON 了。
    • @Iam_Amjath:除非您通过 JavaScript 在客户端添加数据,否则我建议使用 RDFa 或 Microdata 而不是 JSON-LD。手动输入更容易,而且您不必在页面上复制数据,因为它重用了现有的标记。
    • 有趣。我也是这么想的,并选择了 JSON-LD,它更容易添加到页面和编辑,这与 Microdata 不同,在 Microdata 中您需要跟踪页面上的每个 HTML 元素并分别标记它们,而这些元素也不会非常接近。这对我来说有点搞砸了。我得到了重复部分,但我想我现在可以接受了,除非我们拥有一个启用了(微数据或 RDF)标记的优质 CMS 系统。再次感谢。
    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多