Three kinds of breadcrumb, and only one is worth marking up
The word covers three different patterns that people casually treat as one thing. They have almost nothing in common beyond the arrow separators.
| Type | Example | Verdict |
|---|---|---|
| Hierarchy-based | Home › Glossary › Breadcrumb navigation | The one that matters. Reflects site structure, stable per page, mark it up. |
| Attribute-based | Home › Shoes › Running › Men's › Size 9 | Useful on faceted ecommerce. Mark up only the canonical path, not every filter combination. |
| History-based | Home › Previous page › This page | Skip it. It duplicates the browser's back button, changes per visitor, and can't be marked up meaningfully. |
The internal-link arithmetic nobody runs
Here's why breadcrumbs are underrated. Take a site with eight content sections and 500 URLs. Every page carries a breadcrumb linking up to its section hub and back to the homepage. That's around 500 extra links, distributed by topic, generated automatically, with descriptive anchor text — the section name — and impossible for an editor to forget.
Compare that to hand-placed contextual links, which need a human to notice the opportunity, write the sentence and pick the anchor. Contextual links are worth more each. Breadcrumbs are worth more in aggregate, because they scale without anyone doing anything.
The honest caveat: these are template links, and Google discounts repeated boilerplate. But breadcrumbs aren't site-wide boilerplate the way a footer is — the anchor text changes by section, and the link target changes by section. A footer says the same thing on every page. A breadcrumb says something different on every page, which is precisely the signal boilerplate navigation lacks. They complement internal linking; they don't replace it.
BreadcrumbList markup, and the errors that break it
Google supports BreadcrumbList structured data, and when it's valid the search result shows the breadcrumb path in place of the raw URL. That matters more than it sounds for deep pages: lastagencyhere.com › Glossary › Breadcrumb navigation reads as a well-organised site, while a four-level URL string reads as a page buried somewhere.
JSON-LD is the format to use. The structure is a BreadcrumbList with an itemListElement array of ListItem entries, each carrying position, name and item — and the final item's item may be omitted, since it's the page you're already on. If a page genuinely sits in more than one place, Google accepts multiple breadcrumb trails on the same page. It's a small piece of schema markup and one of the few that's worth adding to every template.
- Markup that doesn't match the visible trail. The most common failure. Structured data must describe what's actually on the page; inventing a keyword-rich path that users never see is a guidelines violation.
- Positions out of order or not starting at 1. Silently invalidates the whole trail.
- Marking up every faceted URL. On ecommerce, mark the canonical hierarchy. Filter combinations shouldn't each declare their own path.
- Breadcrumbs that skip levels to look shallower than the site is. If the page really is four levels deep, either say so or restructure the site.
- Trails that start somewhere other than the homepage, then confuse both the reader and the markup validator.
Mobile patterns, and where the trail goes on the page
A full four-level trail on a 360-pixel screen wraps onto three lines and pushes your H1 below the fold. That's a worse trade than not having breadcrumbs at all, and it's why so many mobile sites drop them entirely.
Two patterns work. The first is a horizontally scrollable single-line trail — the full path is there, it just doesn't wrap. The second is truncation to one level up: a single back-link reading ‹ Glossary, with the complete path still present in the BreadcrumbList markup. The second is cleaner for most content sites; the first suits deep ecommerce catalogues where the middle levels are genuinely useful.
Wherever you put it, put it above the H1 and don't hide it inside a collapsed menu. A breadcrumb the reader has to open is a breadcrumb that failed at its one job.