代码之家  ›  专栏  ›  技术社区  ›  Héctor León

每页有多个JSON-LD脚本元素,还是有嵌套的单个元素?

  •  1
  • Héctor León  · 技术社区  · 6 年前

    假设我们有一家像阿迪达斯这样的电子商务公司。我们有基本的JSON-LD结构 WebSsite :

    {
      "@context": "http://schema.org",
      "@type": "WebSite",
      "url": "https://adidas.com/us",
      "potentialAction": {
        "@type": "SearchAction",
        "target": "https://adidas.com/us/search?q={search_term_string}",
        "query-input": "required name=search_term_string"
      }
    }
    

    我们有 Organization :

    {
      '@context': 'http://schema.org',
      '@type': 'Organization',
      'name': 'Adidas',
      'description': 'Sport Shop',
      'email': 'adidas@adidas.us',
      'url': 'http://www.adidas.us',
      'logo': 'http://www.adidas.us/logo.svg'
    }
    

    这个网站也是 Store :

     "@context":"http://schema.org",
     "@type":"Store",
     "url": 'http://www.adidas.us',
     "description": "Adidas Shop !",
     "name": "Adidas"
    }
    

    我们还有经典的 BreadcrumbList :

     "@context":"http://schema.org",
     "@type":"BreadcrumbList",
     "itemListElement":
      [  
        {  
           "@type":"ListItem",
           "position":1,
           "item":{  
              "@type":"Thing",
              "@id":"https://www.adidas.us",
              "name":"Adidas"
           }
        },
        {  
           "@type":"ListItem",
           "position":2,
           "item":{  
              "@type":"Thing",
              "@id":"https://www.adidas.us/shoes",
              "name":"Adidas shoes"
           }
        },
        {  
           "@type":"ListItem",
           "position":3,
           "item":{  
              "@type":"Thing",
              "@id":"https://www.adidas.us/shoes/Featured",
              "name":"Adidas featured shoes"
           }
        }
      ]
    }
    

    这3个json-ld是常见的(当然或多或少有点详细),有时我在网页3中发现 script 包含这些json-ld的元素,有时只有1,有时是2。

    我们应该试着把它们套成一个 (如果是,怎么办!?)还是最好分开?

    1 回复  |  直到 6 年前
        1
  •  1
  •   unor    6 年前

    重要的是将实体与适当的属性连接起来, not how many script 使用的元素。

    如果页面上有这三个实体,则 should convey 它们之间的关系。你可能想表达的意思是:有一个网页是该网站的一部分,由该组织发布,它有一个面包屑列表。

    所以你缺少的是一个代表网页的实体 WebPage )以及连接所有实体的属性 publisher , breadcrumb , isPartOf )

    有多少人 脚本 指定这些实体的元素由您决定:

    • 脚本 ,嵌套所有实体。
    • 脚本 ,具有多个顶级对象(使用 @graph @id )
    • 脚本 每个实体(使用 @身份证 )
    • 以上的组合。

    第一个是最简单的:

    {
      "@context": "http://schema.org",
      "@type": "WebPage",
      "isPartOf": {
        "@type": "WebSite"
      },
      "publisher": {
        "@type": "Organization"
      },
      "breadcrumb": {
        "@type": "BreadcrumbList"
      }
    }
    

    Give each relevant entity an @id ,所以你可以 reference 这些实体在同一页上(在同一页上 脚本 元素或其他元素),甚至在外部页面上。

    我用它来表达同样的意思 Organization 出版商 网页 以及 WebSite :

    {
      "@context": "http://schema.org",
      "@type": "WebPage",
      "@id": "",
      "isPartOf": {
        "@type": "WebSite",
        "@id": "/#this-site",
        "publisher": {"@id": "/#this-org"}
      },
      "publisher": {
        "@type": "Organization",
        "@id": "/#this-org"
      },
      "breadcrumb": {
        "@type": "BreadcrumbList"
      }
    }