Search code examples
google-searchschema.orgbreadcrumbsjson-ldgoogle-rich-snippets

BreadcrumbList with "empty" level


What is the proper way to annotate a breadcrumb with Schema.org annotations, if I want to skip the first level of a URL?

Example:

URL:

/it/songs/wish-you-were-here

The result on Google:

example.com > IT > Songs > Wish You Were Here

As the first level is just the language indicator, my ideal result would rather be:

example.com > Songs > Wish You Were Here

but I could also live with

example.com/it > Songs > Wish You Were Here

Is there any way to achieve this result? I would rather not play around too much, as it takes time to propagate the changes.

The annotation:

  {
    "@context": "http://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [{
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@id": "http://example.com/it",
        "name": "IT"
      }
    },{
      "@type": "ListItem",
      "position": 2,
      "item": {
        "@id": "http://example.com/it/songs",
        "name": "Songs"
      }
    },{
      "@type": "ListItem",
      "position": 3,
      "item": {
        "@id": "http://example.com/it/songs/wish-you-were-here",
        "name": "Wish you Were Here"
      }
    }]
  }

Solution

  • Google doesn’t document this on their Breadcrumbs page, so it’s not clear how this can be controlled (if at all). Not all of their features can be controlled with structured data.

    Specifying the canonical URL of the homepage (i.e., including the language tag as first path segment) as first crumb seems to make sense. It signals that it’s one crumb, so if Google Search displays it as two crumbs, they seem to ignore the structured data in that regard. If that’s the case, you could try two things:

    • Provide a WebSite item, giving the canonical URL for your site (i.e., the homepage) with url. (Like in the example for the Sitelinks Searchbox.)

      {
        "@type": "WebSite",
        "url": "https://example.com/it"
      }
      
    • Omit the crumb for the homepage. (All of Google’s examples omit it.)

      {
        "@type": "ListItem",
        "position": 1,
        "item": {
          "@id": "http://example.com/it/songs",
          "name": "Songs"
        }
      }
      

    (I would try the first one first. It’s typically a good idea to have a WebSite item anyway.)


    About your JSON-LD

    Note that you are not using absolute URLs in your @id values.

    If the snippet is included in the page at http://example.com/it/songs/wish-you-were-here, the @id for that page in the breadcrumbs would be http://example.com/it/songs/example.com/it/songs/wish-you-were-here, which is likely not what you want.

    So either use /it/songs/wish-you-were-here or http://example.com/it/songs/wish-you-were-here.

    (If this was not just an error in your question, you might want to fix it first and wait some time, to check if that changes how Google Search displays your breadcrumbs.)