Schema Forge

Schema guide

Breadcrumb schema markup (BreadcrumbList JSON-LD)

How to write BreadcrumbList JSON-LD: positions, names and addresses for each step of the trail, with a working example and common mistakes.

Overview

Short answer

BreadcrumbList markup lists the steps from the home page down to the current page, in order. Each step needs a position and a name, and every step except the last needs an item address. It should match the trail visitors see on the page.

What it can do for you

Google Rich results: yes
Yes. It can show the page path in results instead of a long address. Google has changed where breadcrumbs appear over time.
AI and answer engines
Shows where the page sits in the site, which gives context when it is read on its own.

Use it when

  • Pages inside a clear hierarchy, such as Home, Category, Product
  • Sites that already show a breadcrumb trail

Skip it when

  • A flat site where every page is one click from the home page
  • Trails that exist only in the markup and not on the page

Properties

PropertyStatusNotes
itemListElementRequiredAn array of ListItem entries, one for each step.
positionRequiredA number starting at 1, increasing along the trail.
nameRequiredThe label shown for that step.
itemRequired except on the last stepThe full address of that step. The last step can leave it out because it is the current page.

Example

breadcrumb.jsonld (example)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Mugs",
      "item": "https://example.com/mugs"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Stoneware Mug, 350 ml"
    }
  ]
}
</script>

The last step has no item, which is allowed because it is the page itself.

It looks for a nav element with an aria-label of "breadcrumb", or an element with a breadcrumb class, that holds a list of links. Each link becomes a step in order.

Most sites do not link the last crumb, so the page address is used for it, and the checklist asks you to check the trail matches what visitors see. If no trail exists on the page, it says so and generates nothing.

Common mistakes

  • Steps in the wrong order, or positions that skip numbers.
  • Relative addresses such as /mugs. Use full addresses.
  • Adding a trail that visitors cannot see on the page.
  • Listing the home page twice.

Questions

Do breadcrumbs still show in Google results?

Google has changed where and how it shows breadcrumbs over time. The markup is still read to understand how your site is organised, and it still describes the trail to other search and AI systems.

Must the last step have an address?

No. The last step is the current page, so item can be left out. Every earlier step needs it.

Can a page have more than one trail?

Yes, as separate BreadcrumbList blocks, for example when a product sits in two categories. Most pages need only one.

Does the markup have to match the visible trail?

Yes. The steps and their order should match what visitors see on the page.

Generate this markup for your page

Paste the address of a public page and get a ready-to-paste block, with every gap listed.

Open the generator

Keep going