如何使用 JSON-LD 标记面包屑列表中的最后一个非链接项

How to markup the last non linking item in breadcrumbs list using JSON-LD

我在面包屑路径中使用结构化数据。我指的是这个文档:

https://developers.google.com/structured-data/breadcrumbs

我已经建立了面包屑列表。我还显示了引用当前页面的最后一项,但这不是 link 而只是纯文本。这是我的 HTML 标记的样子:

<ol class="breadcrumb">
     <li><a href="http://www.example.com/">Home</a></li>
     <li><a href="http://www.example.com/brands">Brands</a></li>
     <li class="active">My Brand</li>
</ol>

我选择使用 JSON-LD 来标记我的面包屑路径。我不确定如何标记面包屑列表中的最后一项,因为它不是 link?我应该把它留在外面吗?这是我目前拥有的:

<script type="application/ld+json">
{
     "@context": "http://schema.org",
     "@type": "BreadcrumbList",
     "itemListElement": [{
          "@type": "ListItem",
          "position": 1,
          "item": {
               "@id": "http://www.example.com/",
               "name": "Home"
          }
     }, {
          "@type": "ListItem",
          "position": 2,
          "item": {
               "@id": "http://www.example.com/brands",
               "name": "Brands"
          }
     }]
}
</script>

我是否需要像添加其他 2 项一样添加最后一项,还是需要保留它?是否仅针对具有 link 的项目?

我不是 SEO 专家,也不知道你的目标是什么,但是阅读 linked api 没有指定 link(@id) 是否是强制性的在 JSON-LD 中,但从官方文档来看 JSON-LD documentation 似乎可以省略它们,但可能会产生不可取的影响。

6.14 Identifying Blank Nodes

At times, it becomes necessary to be able to express information without being able to uniquely identify the node with an IRI. This type of node is called a blank node. JSON-LD does not require all nodes to be identified using @id. However, some graph topologies may require identifiers to be serializable. Graphs containing loops, e.g., cannot be serialized using embedding alone, @id must be used to connect the nodes. In these situations, one can use blank node identifiers, which look like IRIs using an underscore (_) as scheme. This allows one to reference the node locally within the document, but makes it impossible to reference the node from an external document. The blank node identifier is scoped to the document in which it is used.

在这种特殊情况下,我会将最后一项留空或尝试添加它并省略 url。

如果您想确定 google 搜索页面上实际页面的预览(如 linked 文档中所示),以便在面包屑列表中显示 cuttent 页面,我建议在ol中添加一个带有link的隐藏元素到当前页面,并将其添加到面包屑JSON-LD列表中,带有link。

<ol class="breadcrumb">
 <li><a href="http://www.example.com/">Home</a></li>
 <li><a href="http://www.example.com/brands">Brands</a></li>
 <li class="hidden"><a href="http://www.example.com/My_Brand">My Brand</a></li>
 <li class="active">My Brand</li>
</ol>

当然你可以简单地为最后一项提供 ListItem 并省略 @id:

<script type="application/ld+json">
{
     "@context": "http://schema.org",
     "@type": "BreadcrumbList",
     "itemListElement": [{
          "@type": "ListItem",
          "position": 1,
          "item": {
               "@id": "http://www.example.com/",
               "name": "Home"
          }
     }, {
          "@type": "ListItem",
          "position": 2,
          "item": {
               "@id": "http://www.example.com/brands",
               "name": "Brands"
          }
     }, {
          "@type": "ListItem",
          "position": 3,
          "item": {
               "name": "My Brand"
          }
     }]
}
</script>

这是有效的 JSON-LD 并且根据 Schema.org 没问题。

但是,无论如何我都会添加 last/current 项的 URL。如果是 RDFa 或 Microdata,我会为最后一项的 URL 使用 link 元素(因此 URL 对人类访问者来说不可点击,但机器人有更多数据),但是在 JSON-LD 的情况下,这个问题首先是不相关的,因为人类访问者通常不会与之交互。

唯一可以想到的缺点是,如果 HTML 中的内容与 JSON-LD 中的内容不匹配(即 URL最后一项丢失了)。但我认为这种风险很低,因为众所周知,处理最后一个面包屑项的方法多种多样。


就文档而言,Schema.org 只说 BreadcrumbList 是 "typically ending with the current page"。

作为消费者的例子,Google 对他们的 Breadcrumbs feature 说同样的话:

The breadcrumb trail may include or omit a breadcrumb for the page on which it appears.

但是他们没有说明包含最后一项但没有 URL 的情况。

<script type="application/ld+json">
{
     "@context": "http://schema.org",
     "@type": "BreadcrumbList",
     "itemListElement": [{
          "@type": "ListItem",
          "position": 1,
          "item": {
               "@id": "http://www.example.com/",
               "name": "Home"
          }
     }, {
          "@type": "ListItem",
          "position": 2,
          "item": {
               "@id": "http://www.example.com/brands",
               "name": "Brands"
          }
     }, {
          "@type": "ListItem",
          "position": 3,
          "item": {
           "@id": "http://www.example.com/brands/mybrand",
               "name": "My Brand"
          }
     }]
}
</script>

此处给出了正确的 Jason-LD 代码。

尽管 Unor 说他的代码已通过验证,但请注意,如果没有最后一个 item.id,他的代码将无法通过验证,在 https://search.google.com/structured-data/testing-tool