【问题标题】:How to markup the last non linking item in breadcrumbs list using JSON-LD如何使用 JSON-LD 标记面包屑列表中的最后一个非链接项
【发布时间】:2016-02-14 18:58:29
【问题描述】:

我正在为我的面包屑跟踪使用结构化数据。我指的是这个文档:

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

我已经建立了一个面包屑列表。我还显示了引用当前页面的最后一项,但这不是链接,而只是纯文本。这是我的 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 来标记我的面包屑轨迹。我不确定如何标记面包屑列表中的最后一项,因为它不是链接?我应该把它排除在外吗?这是我目前拥有的:

<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 个项目一样添加最后一个项目,还是需要离开它?是否只针对有链接的项目?

【问题讨论】:

    标签: javascript html json schema.org rich-snippets


    【解决方案1】:

    <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 中,他的代码是不经过验证的

    【讨论】:

      【解决方案2】:

      当然,您可以简单地为最后一项提供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 很好。

      但是,无论如何,我都会添加最后一个/当前项目的 URL。对于 RDFa 或 Microdata,我会使用 link 元素作为最后一个项目的 URL(因此人类访问者无法点击该 URL,但机器人有更多数据),但对于 JSON-LD,这个问题是'首先不相关,因为人类访问者通常不会与之交互。

      唯一可以想象的缺点可能是,如果 HTML 中的内容与 JSON-LD 中的内容不匹配(即缺少最后一项的 URL),消费者会感到困惑。但我认为这种风险非常低,因为众所周知,处理最后一个面包屑项有不同的方法。


      就文档而言,Schema.org 仅表示BreadcrumbList“通常以当前页面结尾”。

      作为消费者的一个例子,谷歌对他们的Breadcrumbs feature说同样的话:

      面包屑路径可以包含或省略其所在页面的面包屑。

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

      【讨论】:

      • 将网址添加到最后一个面包屑导航栏不会出现在 Google 搜索结果的路径中吗?
      • @BrendanVogt:我无法想象它为什么会出现。谷歌对这两种变体都很好(包括或不包括最后一个/当前项目),我猜他们处理这些情况是一样的:不在他们的 SERP 中显示它(因为它是多余的)。
      • 您能否使用微数据为您的链接元素建议提供一些标记?
      • @BrendanVogt:您只需将最后一个 a 元素替换为 link 元素(这是一个带有 link element with itemprop in the body 的示例)。
      • 自 2019 年 9 月 19 日起不再有效。最后一个 ListItem 的 item 部分不完整。 twitter.com/googlewmc/status/1174693878835875840
      【解决方案3】:

      我不是 SEO 专家或确切地知道您的目标是什么,但是阅读链接的 api 并没有指定链接(@id)是否在 JSON-LD 中是强制性的,但从官方文档 JSON-LD documentation 看来它们可以省略,但可能会产生不理想的效果。

      6.14 识别空白节点

      有时,必须能够表达信息,但不能用 IRI 唯一地标识节点。这种类型的节点称为空白节点。 JSON-LD 不要求使用@id 标识所有节点。然而,一些图拓扑可能要求标识符是可序列化的。包含循环的图,例如,不能单独使用嵌入进行序列化,必须使用@id 来连接节点。在这些情况下,可以使用空白节点标识符,它看起来像使用下划线 (_) 作为方案的 IRI。这允许人们在文档中本地引用节点,但无法从外部文档引用节点。空白节点标识符的范围仅限于使用它的文档。

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

      如果您想确定在谷歌搜索页面上预览实际页面(如链接文档中),以便在面包屑列表中出现剪切页面,我建议在 ol 中添加一个隐藏元素带有指向当前页面的链接,并将其添加到带有链接的面包屑 JSON-LD 列表中。

      <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>
      

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多