Breadcrumb Schema — BreadcrumbList JSON-LD for Google
Breadcrumb markup tells Google where a page sits in your site, so desktop results can show a trail like Guides › Structured Data instead of the bare URL.
Generate Breadcrumb JSON-LDWhy breadcrumb markup goes wrong
- The markup has only one ListItem. Google needs at least two.
- Positions start at 0 or skip numbers after a level is removed.
- A blank URL is left in the markup as an empty string instead of being left out.
- The trail in the markup does not match the breadcrumb visitors see.
How SwiftSchema helps
The generator below starts with two levels, numbers positions from 1 in the order you list them, and lets the last level (usually the current page) go without a URL. It warns you if any other level is missing one.
The examples on this page follow Google’s breadcrumb documentation, including the multiple-trail format.
What is breadcrumb schema?
Google describes a breadcrumb trail as something that "indicates the page's position in the site hierarchy". With BreadcrumbList markup, Google can categorize the page in search results by that trail.
The markup is a BreadcrumbList whose itemListElement is an ordered list of ListItems, one per level of the trail.
Where Google shows breadcrumbs
Google shows breadcrumbs in desktop search results only. On January 22, 2025, Google added this to its documentation, explaining that breadcrumbs get truncated on smaller screens and weren't useful to people searching on mobile. The markup is the same; it just has no visible effect in mobile results.
Required properties
Google's breadcrumb documentation lists these properties:
| Property | On | Required? | Notes |
|---|---|---|---|
itemListElement | BreadcrumbList | Yes | The ListItems, in order. At least two. |
position | ListItem | Yes | An integer. Position 1 is the start of the trail. |
name | ListItem | Yes | The label shown to the user. |
item | ListItem | Yes, except on the last item | The URL of that level. If the last item has no item, Google uses the URL of the page. |
Rules from Google's guidelines
- Follow a user path, not the URL. Google recommends breadcrumbs that "represent a typical user path to a page, instead of mirroring the URL structure."
- Home and the current page are optional. Google says a ListItem isn't required for the top level (your domain) or for the page itself.
- Multiple trails are allowed. If people reach the page in different ways, add one BreadcrumbList per trail in a JSON-LD array. The second example above shows this.
- Use schema.org. data-vocabulary.org breadcrumb markup hasn't been eligible since January 29, 2021.
- Match what visitors see. Google's general structured data guidelines say markup should describe content that's visible on the page. Use the same labels and order as your visible breadcrumb.
How to build one here
- 01
Enter each level of the trail in order, starting from the top.
- 02
Give each level the label your page shows and its full URL.
- 03
Leave the URL blank for the last level if it is the current page.
- 04
Add or remove levels; positions renumber automatically.
- 05
Copy the JSON-LD into the page and test it in Google’s Rich Results Test.
Ready to build the markup?
At least two levels. Match your visible trail.
Common mistakes
- Only one ListItem. Google needs at least two.
- Positions that start at 0 or skip numbers. Number them 1, 2, 3 in trail order.
- Relative URLs. Use full URLs, such as
https://example.com/guides, not/guides. - Empty
itemvalues. Leave the property out instead of"item": "". Only the last item may do this. - Tracking parameters. Use clean, canonical URLs without UTM parameters.
- Conflicting plugins. If a theme or plugin already outputs a BreadcrumbList, don't add a second one for the same trail.
Validate and monitor
- Test a page with the Rich Results Test; breadcrumbs are a Google-supported feature, so it reports errors and warnings.
- After launch, the Breadcrumbs report in Search Console shows valid and invalid items across your site.
- Use the URL Inspection tool to see how Google sees a single page.
Required properties
itemListElement[].@type=ListItemitemListElement[].positionitemListElement[].nameitemListElement[].item (optional on the last item)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Guides",
"item": "https://example.com/guides"
},
{
"@type": "ListItem",
"position": 2,
"name": "Structured Data",
"item": "https://example.com/guides/structured-data"
},
{
"@type": "ListItem",
"position": 3,
"name": "Breadcrumb Markup"
}
]
}[
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Books",
"item": "https://example.com/books"
},
{
"@type": "ListItem",
"position": 2,
"name": "Science Fiction",
"item": "https://example.com/books/science-fiction"
},
{
"@type": "ListItem",
"position": 3,
"name": "Award Winners"
}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Literature",
"item": "https://example.com/literature"
},
{
"@type": "ListItem",
"position": 2,
"name": "Award Winners"
}
]
}
]{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Inicio",
"item": "https://example.com/es"
},
{
"@type": "ListItem",
"position": 2,
"name": "Guías",
"item": "https://example.com/es/guias"
},
{
"@type": "ListItem",
"position": 3,
"name": "Datos estructurados",
"item": "https://example.com/es/guias/datos-estructurados"
}
]
}FAQs
What does Google require for breadcrumb markup?ShowHide
A BreadcrumbList with at least two ListItems. Each ListItem needs position (starting at 1), name, and item (the URL of that level). The last ListItem can leave out item; Google then uses the URL of the page.
Why don't my breadcrumbs show on mobile?ShowHide
Since January 2025, Google shows breadcrumbs only in desktop search results. Google said breadcrumbs get truncated on small screens, so they weren't useful on mobile. Your markup still works on desktop.
Do I have to include the home page and the current page?ShowHide
No. Google says a ListItem isn't required for the top level (your domain) or for the page itself. Include them if your visible breadcrumb shows them.
Should breadcrumbs follow my URL structure?ShowHide
Not necessarily. Google recommends breadcrumbs that represent a typical user path to the page, instead of mirroring the URL.
Can a page have more than one breadcrumb trail?ShowHide
Yes. If there are several ways to reach the page, Google accepts several BreadcrumbList objects in one JSON-LD array, one per trail.
Does data-vocabulary.org breadcrumb markup still work?ShowHide
No. Since January 29, 2021, data-vocabulary.org markup isn't eligible for Google rich results. Use schema.org BreadcrumbList.