Breadcrumb Schema: Google’s Four Required Properties, and Where Breadcrumb Links Actually Send Authority
· Royking Niba
Breadcrumb schema is structured data that tells Google where a page sits in your site’s hierarchy. It is a BreadcrumbList containing an ordered array of ListItem entries, and Google’s documentation requires only four properties to accept it: itemListElement on the list, and item, name and position on each entry. That part takes ten minutes. The part most guides skip is what the visible breadcrumb trail does to your internal linking, so below are Google’s rules verbatim, a table mapping common errors to the rule each one breaks, and a 2,000-page model of where breadcrumb links actually send authority.
What Google’s documentation says, verbatim
Quoted from Google Search Central’s breadcrumb structured data page, last updated 8 September 2026, checked today.
A breadcrumb trail on a page indicates the page’s position in the site hierarchy, and it may help users understand and explore a site effectively.
What a breadcrumb trail is for
If the breadcrumb is the last item in the breadcrumb trail, item is not required. If item isn’t included for the last item, Google uses the URL of the containing page.
On the last item
If there are multiple ways to navigate to a page on your site, you can specify multiple breadcrumb trails for a single page.
On multiple trails
And from the general structured data guidelines, last updated 10 July 2026, which govern breadcrumbs like every other type:
Don’t mark up content that is not visible to readers of the page.
Structured data general guidelines
Google does not guarantee that your structured data will show up in search results, even if your page is marked up correctly according to the Rich Results Test.
Structured data general guidelines
The first general rule is the one that matters most for breadcrumbs and it is the one I see broken most often. Breadcrumb markup is supposed to describe a trail the visitor can see. A template that emits a BreadcrumbList on pages with no visible breadcrumb, or a different trail in the markup than on the page, is marking up content that is not there.
The four required properties
| Type | Property | Google’s description | What it means in practice |
|---|---|---|---|
| BreadcrumbList | itemListElement | “An array of breadcrumbs listed in a specific order.” | Order is the data. Shuffle it and the trail is wrong even if every entry is valid. |
| ListItem | item | “The URL to the webpage that represents the breadcrumb.” | Required on every entry except the last, which may omit it. |
| ListItem | name | “The title of the breadcrumb displayed for the user.” | Should match the label the visitor sees, not a keyword variant of it. |
| ListItem | position | “The position of the breadcrumb in the breadcrumb trail. Position 1 signifies the beginning of the trail.” | Starts at 1, not 0, and counts up without gaps. |
A valid example, and what it weighs
A four-level product trail for an imaginary shop, following Google’s own example structure. The last item has no item URL, which the documentation allows.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example-shop.com/"},
{"@type": "ListItem", "position": 2, "name": "Running", "item": "https://www.example-shop.com/running/"},
{"@type": "ListItem", "position": 3, "name": "Trail running shoes", "item": "https://www.example-shop.com/running/trail-shoes/"},
{"@type": "ListItem", "position": 4, "name": "Ridgeline 4 trail shoe"}
]
}I measured it. Minified, that object is 451 bytes, and 495 bytes once wrapped in its script tag. Pretty-printed it is 627 bytes. On a 2,000-page site the whole breadcrumb layer is under a megabyte of HTML in total, so weight is never the argument against it. The arguments against bad breadcrumb markup are all about accuracy.
Eight common errors, mapped to the rule each one breaks
This is the table I use when auditing a template. Every row traces back to one of the quoted rules above, so the fix is never a matter of opinion.
| Error | Rule it breaks | Fix |
|---|---|---|
| Positions start at 0 | “Position 1 signifies the beginning of the trail” | Start the counter at 1 in the template loop. |
| Positions skip a number after a level is hidden | itemListElement is “listed in a specific order” | Renumber after filtering, not before. |
| A middle entry has no item URL | item is optional only for the last item | Every ancestor needs its URL. Usually a category with no archive page. |
| name is empty or a placeholder | name is “the title of the breadcrumb displayed for the user” | Use the visible label from the same data source as the HTML trail. |
| Markup on pages with no visible trail | “Don’t mark up content that is not visible” | Emit the JSON-LD only where the template renders the HTML trail. |
| Markup trail differs from visible trail | Structured data must be “a true representation of the page content” | Generate both from one function so they cannot drift. |
| Ancestor URLs that redirect or are noindexed | item is “the URL to the webpage that represents the breadcrumb” | Point at the final, indexable URL of each ancestor. |
| Two plugins each emitting a BreadcrumbList | Not an error in itself, since multiple trails are allowed | Only valid when both are real trails a visitor can follow. Two copies of the same trail is duplication, so switch one off. |
The last row is the one that surprises people. Google explicitly allows several trails per page, so a validator will not flag two BreadcrumbList objects. The question is whether each one is a genuine route to the page. On WordPress the usual cause is an SEO plugin and a theme both outputting the same trail, and that is worth cleaning up even though nothing reports it.
The part nobody models: where breadcrumb links send authority
Breadcrumb schema is the markup. The visible trail it describes is a set of real HTML links, and on most sites it is the most consistent internal linking pattern in the whole template. So I modelled a typical catalogue to see where those links go.
The model: 2,000 pages in four levels. One homepage, 10 categories, 100 subcategories (ten per category) and 1,889 products spread evenly across the subcategories. Every page shows a trail with its ancestors linked and itself unlinked, which is how almost every breadcrumb template renders.
| Page type | Pages | Breadcrumb links each page gives out | Breadcrumb links each page receives |
|---|---|---|---|
| Homepage | 1 | 0 | 1,999 |
| Category | 10 | 1 | 198.9 on average |
| Subcategory | 100 | 2 | 18.9 on average |
| Product | 1,889 | 3 | 0 |
| Total | 2,000 | 5,877 links | 5,877 links |
Three things fall out of that table.
- Breadcrumbs only ever link upwards. 5,877 links, and not one of them points at a product. Breadcrumbs are excellent at concentrating authority on category and subcategory pages and do nothing at all for the pages that sell.
- The distribution follows catalogue size, not commercial value. Each category receives about 199 breadcrumb links because it has about 199 descendants. Put 600 products in one category and 20 in another and the first gets thirty times the breadcrumb links, whether or not it is the one you want to rank.
- The homepage link is nearly worthless as a signal. 1,999 of the 2,000 pages link to it from the trail, which is what the navigation already does. The useful breadcrumb links are the middle ones.
The limits of the model, stated plainly. It assumes an even spread of products, one trail per page, and that every breadcrumb link counts equally, which is a simplification of how link signals actually work. It does not include navigation, related-product or contextual links, which on a real site carry most of the downward flow. That is the point of it. If breadcrumbs are your main internal linking structure, your products are being fed by everything except the breadcrumbs, and you should check that something is actually doing that job. My 106-page model of internal link equity and the guide to finding orphan pages cover what to put in its place.
Breadcrumbs, your URL structure and search results
A breadcrumb trail and a URL path are two different things, and they do not have to match. Google’s own example trail of Books, Science Fiction, Award Winners would be valid on a URL with no folders at all. What has to match is the trail in the markup and the trail on the page. If your hierarchy lives in the trail rather than the URL, that is a perfectly sound choice, and it means a site architecture change can be made in the template without a URL migration.
On presentation, be careful with promises. In January 2025 Google published a Search Central post titled “Simplifying the visible URL element on mobile search results”, and how breadcrumbs appear in a result varies by device and over time. The guidelines quoted above are explicit that correct markup does not guarantee any appearance at all. I recommend breadcrumb schema because it describes your hierarchy unambiguously to Google and to AI systems that read structured data, which I cover in schema markup for AI search, and not because of a particular look in the results.
The checklist I run
- Confirm every template that renders a visible trail also emits a
BreadcrumbList, and no template emits one without a visible trail. - Check that the HTML trail and the JSON-LD come from the same function or data source.
- Validate positions start at 1 and run without gaps on the deepest template you have.
- Check every ancestor URL returns 200, is indexable and is the canonical version.
- Look for a second
BreadcrumbListfrom a plugin or theme and keep only real alternative trails. - Count breadcrumb links received per category against the commercial priority of that category, using the model above.
- Confirm products receive internal links from something other than breadcrumbs.
None of these checks takes long, and the last two are where breadcrumbs stop being a schema task and start being an internal linking one. That is the half worth your time.
Related reading
- Google Penalty Recovery: how I diagnose and reverse a traffic collapse
- Internal linking for SEO: a 106-page model of where link equity goes
- Site architecture SEO
- Schema markup for AI search
- Orphan pages: how to find them and what to do with each one
- Unnatural links: the two manual actions Google names, and the cleanup arithmetic
Leave a Reply