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

Many JSON-LD script elements per page or a single one with nesting?

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

{
  "@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 个。

我们应该尝试将它们嵌套成一个 script(如果是,怎么做!?),还是将它们分开更好?

重要的是您将实体与合适的属性连接起来, script 您使用的元素。

如果页面上有这三个实体,您 should convey 了解它们之间的关系。您可能想要传达的信息:有一个网页是该网站的一部分,由该组织发布,并且有一个面包屑列表。

所以您缺少的是表示网页的实体 (→ WebPage) and properties to connect all your entities (→ publisher, breadcrumb, isPartOf)。

您指定这些实体的 script 个元素由您决定:

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

第一个最简单:

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

Give each relevant entity an @id, so you can reference 这些实体在同一页面上(在同一 script 元素或其他元素中),甚至在外部页面上。

我在这里用它来表示相同的 OrganizationWebPagepublisher 以及 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"
  }
}