Breadcrumbs: Hierarchy and Schema Rules
Build breadcrumbs that show a page's real hierarchy, help readers move upward, and produce accurate BreadcrumbList schema for search and AI systems today.
Breadcrumbs are an ordered trail of links that shows where the current page sits in the site’s information architecture, or IA: the system of parent, child, and sibling relationships that organizes content. They let a reader move upward without restarting from the main navigation, while giving crawlers and answer systems an explicit, machine-readable account of the same hierarchy.
That rendered trail is intentionally literal. It identifies three real ancestors, names the current page, and links only upward. It does not insert “SEO navigation” or another phrase simply because that wording might attract searches.
Why this element matters
Readers arrive on deep pages from search results, shared links, email, and AI answers. They often have no memory of the route the site’s menus expect them to follow. A breadcrumb resolves that uncertainty in one glance: “I am reading an element page inside the SEO playbook, and I can return to either collection.” That context lowers the cost of exploring a site without forcing the reader to open a menu, edit a URL, or use the Back button.
The psychology is about orientation, not decoration. A clear trail gives the reader a stable sense of place and an obvious escape route. This matters most on large sites where similar page titles can live in different sections—for example, a product category called “Analytics” and a documentation section with the same name. The ancestors disambiguate the page before the reader interprets its details.
Machines need the same relationship expressed without relying on visual spacing or chevrons. Machine extractability means software can recover a unit’s meaning and order from the HTML or structured data. A semantic <nav>, an ordered list, ordinary links, aria-current, and matching BreadcrumbList data expose a sequence of entities with explicit positions. A row of styled <span> elements may look identical, yet provides no reliable navigation landmark or list order.
The visible trail and structured output must tell one story. If the page is visibly under “Elements” but the schema calls “SEO Tools” its parent, a system receives two competing hierarchies. That inconsistency is worse than omitting schema because it makes the site’s entity relationships less trustworthy.
Follow the element writing rules when choosing this component. Their precedence rule applies here: if a passage’s purpose is to communicate hierarchy and upward navigation, use the typed breadcrumbs element. Do not imitate it with free text, a slash-separated subtitle, or linked keywords.
When to use it
Use breadcrumbs when a page belongs to a stable hierarchy with at least one meaningful parent beyond the home page. Large editorial sites, ecommerce catalogs, documentation libraries, service-area structures, directories, and multi-level product sites benefit most because visitors commonly enter below the top level.
Use them consistently across a section. A trail appearing on only some product pages makes readers wonder whether the missing pages belong elsewhere, and makes automated interpretation dependent on template accidents. The content model or route should provide the hierarchy; authors should not reconstruct it independently on every page.
Do not use breadcrumbs when there is no hierarchy to express. A one-page campaign, a shallow site where every page is directly under Home, or a temporary application state may gain no useful route from them. Adding “Home › Current page” to every shallow page can create visual noise without revealing new context.
Common near misses include:
- A browser-history trail. “Search › Product › Cart” records a session, not a content hierarchy. Different visitors would receive different parents for the same page, so the relationship is not canonical.
- A keyword path. “Best CRM › Cheap CRM › CRM for startups” may place target phrases in view, but it fabricates ancestors that may not exist as navigable pages. Breadcrumb labels name real nodes; they are not an extra title tag.
- A filter trail. “Shoes › Blue › Size 9” describes selected facets. It belongs in filter controls unless every step is a stable, indexable landing page with an intentional parent relationship.
- A progress indicator. “Details › Payment › Confirmation” communicates steps in a transaction. It needs stepper semantics and state, not
BreadcrumbListmarkup. - A table of contents. Section links move within the current document; breadcrumbs move among documents in the site hierarchy.
- A tag chain. Tags describe many-to-many topics, while breadcrumbs require one ordered primary path. A page can have several tags but should not expose several competing parents in one trail.
When a page legitimately appears in several collections, choose one primary canonical hierarchy for the breadcrumb. Preserve other discovery routes through contextual links or collection pages. Multiple breadcrumb trails force the reader and the schema consumer to decide which parent is authoritative.
Where to place it
Orientation works only when it arrives before the page demands interpretation, so place the trail after the global site header and before the page’s H1 or hero content. It should be the first page-specific navigation region. Keep the same position across desktop and mobile layouts even if the trail wraps differently.
| Position | Allowed? | Reason and rule |
|---|---|---|
| Above the global header | No | The trail belongs to the current document, not the whole site. Keep global identity and controls first. |
| After the header, before the H1 | Yes | The reader receives location before interpreting the page title. This is the default. |
| Inside the hero, above the H1 | Yes | This preserves the required sequence when the hero owns the page’s top spacing. Keep it visually subordinate. |
| After the introductory paragraph | No | The reader has already started the article without context. Move the trail above the H1. |
| In the footer only | No | A footer trail cannot orient a reader on arrival. Footer navigation may exist separately. |
| Repeated at the bottom | No | A second instance duplicates landmarks and schema. Use related navigation or a back-to-top control for the closing journey. |
Do not sit breadcrumbs beside a table of contents, sharing toolbar, category chips, account controls, or a promotional badge. Those elements answer different questions and make the narrow orientation line look like a general-purpose toolbar. Do not place an advertisement or inline call to action between the trail and H1. If the hero contains both, stack the breadcrumb above the title and separate promotional content below the introductory copy.
Anatomy
- Navigation landmark: a
<nav>with the accessible name “Breadcrumb” distinguishes this trail from the global and local navigation. - Ordered list: order carries meaning from broadest ancestor to current page, so
<ol>is required even if list markers are visually removed. - Ancestor items: each ancestor uses its canonical human-readable label and a crawlable link to the real parent page.
- Separator: a chevron or slash separates items visually. It is decorative and hidden from assistive technology.
- Current item: the final item names the current page, has no link, and uses
aria-current="page". - Document relationship: the trail sits above the H1. The screenshot labels this position, but placement is controlled by the template rather than authored copy.
Design examples
Variants change density and responsive behavior, never the underlying hierarchy.
Default: show the full trail when two to five concise items fit. This is the preferred variant because no context is hidden.
Long path: allow a six- or seven-item trail only when each level represents a genuine navigable ancestor. Wrap at item boundaries; never shrink text until it becomes difficult to read.
Collapsed mobile: when the real trail cannot wrap acceptably, preserve Home, the immediate parent, and the current page. A focusable ellipsis control may reveal hidden middle ancestors. The complete path must remain in the DOM or become available through that control, and structured data must retain every real item.
Dark hero: colors and focus indicators adapt to the background, but labels, order, linking behavior, and accessible name remain identical to the default.
Parameters
The element is a structured list because parallel arrays of labels and URLs are easy to misalign. Item order is the hierarchy, and the same items feed visible HTML and schema.
| Name | Type | Required | Min/max | Default | Source |
|---|---|---|---|---|---|
item | Nested item | Yes | 2–7 items | None | Body using ordered ::item{} entries |
label | Plain string | Yes | 1–6 words; 60 characters | Item’s first plain-text body line | Item attribute or item body; never a heading |
url | Root-relative canonical URL | Ancestors only | One URL; 2,048 characters maximum | None | Item attribute or page hierarchy source |
current | Boolean | No | Exactly one true, on the final item | Final item | Item attribute or derived from item position |
ariaLabel | Plain string | No | 1–3 words; 40 characters | Breadcrumb | Parent attribute |
schema | Boolean | No | true or false | true on indexable pages | Parent attribute or site schema policy |
collapse | Enum | No | never, mobile | mobile | Parent attribute |
The first heading has no mapping in this element. Breadcrumbs are a navigation landmark, not a titled content section, and placing a heading in an item would create false document hierarchy. The final item omits url in authored source by default; a renderer may use the page’s canonical URL for BreadcrumbList output without turning the visible current item into a self-link.
Two items means one ancestor plus the current page. Five is the normal upper range. Seven is a hard maximum because deeper trails become difficult to scan and usually reveal an IA problem that should be fixed at the source rather than hidden by styling.
Syntax and code examples
The canonical component name is breadcrumbs. Its item order must come from the site’s reviewed hierarchy data, even when examples show values inline.
Portable Markdown directive
:::breadcrumbs{ariaLabel="Breadcrumb" schema=true collapse=mobile}
::item{label="Home" url="/"}
::item{label="SEO playbook" url="/seo-playbook/"}
::item{label="Elements" url="/seo-playbook/elements/"}
::item{label="Breadcrumbs" current=true}
:::
Hugo shortcode
{{< breadcrumbs ariaLabel="Breadcrumb" schema="true" collapse="mobile" >}}
{{< breadcrumb-item label="Home" url="/" />}}
{{< breadcrumb-item label="SEO playbook" url="/seo-playbook/" />}}
{{< breadcrumb-item label="Elements" url="/seo-playbook/elements/" />}}
{{< breadcrumb-item label="Breadcrumbs" current="true" />}}
{{< /breadcrumbs >}}
This is the portable adapter contract, not an instruction to add a new shortcode to this repository. A Hugo implementation should normally derive the items from page ancestry and section metadata so an editor cannot publish a trail that disagrees with routing.
WordPress block
<!-- wp:amicited/breadcrumbs {"ariaLabel":"Breadcrumb","schema":true,"collapse":"mobile"} -->
<!-- wp:amicited/breadcrumb-item {"label":"Home","url":"/"} /-->
<!-- wp:amicited/breadcrumb-item {"label":"SEO playbook","url":"/seo-playbook/"} /-->
<!-- wp:amicited/breadcrumb-item {"label":"Elements","url":"/seo-playbook/elements/"} /-->
<!-- wp:amicited/breadcrumb-item {"label":"Breadcrumbs","current":true} /-->
<!-- /wp:amicited/breadcrumbs -->
WordPress should populate the block from the page’s primary parent chain and canonical URLs. Manual overrides require editorial review because changing one label can otherwise make navigation, schema, and site architecture disagree.
Examples
Good: a real, navigable hierarchy
Home › Documentation › Audits › Freshness audit
This is good when Documentation, Audits, and Freshness audit are real canonical pages in that parent–child order. Each ancestor predicts its destination, and the current label is concise enough to confirm location without repeating the entire H1.
Bad: keywords pretending to be hierarchy
Home › Best AI SEO Tool › Affordable AI Visibility Platform › Breadcrumbs
This is bad when the two middle labels are not real parent pages. The trail makes promises that its links cannot fulfill, repeats promotional phrases instead of naming sections, and creates a false entity chain for crawlers. Replace it with the shortest actual ancestor path. If the desired concepts deserve pages, create and integrate those pages into the IA first; do not preview an imaginary architecture in breadcrumbs.
Schema markup and accessibility
Breadcrumbs can feed Schema.org BreadcrumbList, an ordered list whose entries are ListItem objects. Use one-based integer position values and keep name and item aligned with the visible label and canonical destination. Generate JSON-LD and HTML from one data object so a rename, move, or canonical change updates both outputs together.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type":"ListItem","position":1,"name":"Home","item":"https://amicited.com/"},
{"@type":"ListItem","position":2,"name":"SEO playbook","item":"https://amicited.com/seo-playbook/"},
{"@type":"ListItem","position":3,"name":"Elements","item":"https://amicited.com/seo-playbook/elements/"},
{"@type":"ListItem","position":4,"name":"Breadcrumbs","item":"https://amicited.com/seo-playbook/elements/breadcrumbs/"}
]
}
Schema describes the visible hierarchy; it does not authorize a second, optimized path. Do not include redirects, tracking parameters, noncanonical protocol or host variants, on-site search results, session states, or hidden keyword categories. Do not publish two BreadcrumbList objects for two possible taxonomies. Select the primary path in the content model and use it everywhere.
Accessibility starts with <nav aria-label="Breadcrumb"> and an ordered list. The accessible label distinguishes this navigation region without requiring a visible heading. Hide decorative separators with aria-hidden="true" or create them in CSS so screen readers do not announce “greater than” between every item. Mark only the final item with aria-current="page" and do not link it to itself.
Every ancestor link needs a visible focus indicator and a target large enough to activate on a touch screen. Long trails must wrap or collapse through a keyboard-operable control; horizontal scrolling that hides the current position is not an acceptable default. Truncation may shorten a visual label only when the full accessible name remains available and the shortened text is still distinguishable. Never depend on color alone to separate linked ancestors from the current item.
Writing rules
Breadcrumb labels are location names, so write them like navigation rather than miniature headlines. Use the official, shortest unambiguous name of each section or page. “Documentation” works better than “Explore all product documentation,” because the destination supplies the context and the trail must remain scannable.
- Use one to six words and no more than 60 characters per label. Short labels make the hierarchy visible before wrapping; they are not permission to abbreviate unfamiliar terms.
- Use two to five items normally, including the current page. Permit six or seven only when every level is structurally necessary.
- Order items from the broadest ancestor to the current page. Never reverse the trail or place a sibling in the sequence.
- Use sentence case unless a brand, product, or acronym has an approved spelling.
- Keep labels stable across pages. The same parent cannot be “Docs” in one trail and “Documentation” in another unless the navigation system changes globally.
- Make ancestor labels match or closely reflect the destination’s visible name. A concise navigation label is acceptable; a different keyword target is not.
- Name the current page concisely. It may shorten a long H1, but it must still identify the same document.
- Use a neutral tone. Breadcrumbs orient; they do not sell, congratulate, warn, or instruct.
Never put calls to action, prices, stock status, dates, author names, review scores, emojis, icons with independent meaning, promotional claims, tracking codes, or query parameters inside a breadcrumb label. Never add “Back,” “Previous,” or “Next” as an item because those controls express history or sequence rather than ancestry. Separators are renderer-owned presentation and are not part of any label.
Post types that use it
The postTypes frontmatter records the supported joins. The table converts those joins into use and placement rules; it is not a claim that every instance needs a manually authored trail.
| Post type | Requirement | Primary hierarchy source | Typical trail |
|---|---|---|---|
| Ultimate guide | Usually | Topic hub and guide collection | Home › Guides › Topic |
| How-to guide | Usually | Documentation or how-to collection | Home › How to › Task |
| Listicle guide | Usually | Editorial category | Home › Guides › Shortlist |
| A-versus-B comparison | Usually | Comparison hub or product category | Home › Comparisons › A vs B |
| Best-X-for-Y page | Usually | Reviewed category hierarchy | Home › Category › Best X for Y |
| Alternatives page | Usually | Alternatives or comparison hub | Home › Alternatives › Product alternatives |
| Glossary term | Always in a large glossary | Glossary index | Home › Glossary › Term |
| What-is-X page | Usually | Learning hub or topic cluster | Home › Learn › Concept |
| Product page | Usually in a product family | Catalog or product family | Home › Products › Product |
| Category page | Always when nested | Catalog taxonomy | Home › Department › Category |
| Use-case page | Usually | Solutions or use-case hub | Home › Use cases › Outcome |
| Documentation article | Always when documentation is nested | Versioned documentation tree | Home › Documentation › Section › Task |
“Usually” means use the element when the site has the named stable parent, and omit it on a genuinely shallow implementation rather than inventing an extra level. “Always” assumes the stated nested structure exists. Templates should own the rendering; the post type defines the expected hierarchy source and editorial exceptions.
QA checklist
- Real hierarchy: Every ancestor is a real, intentional parent in the site’s primary IA, not a keyword, tag, filter, or previous visit.
- Correct position: The trail appears after the global header and before the H1, with no promotion or unrelated toolbar inserted between them.
- One trail: The page exposes one visible breadcrumb and one matching
BreadcrumbList, not competing paths. - Complete order: Items run from broadest ancestor to current page, with no missing structural level or added sibling.
- Canonical links: Every ancestor resolves directly to its canonical, indexable URL without tracking parameters or avoidable redirects.
- Current state: The last visible item names the current page, is unlinked, and has
aria-current="page". - Concise labels: Each label uses the official shortest unambiguous name, follows sentence case, and remains within the editorial limit.
- Semantic HTML: The component uses a labelled navigation landmark and ordered list; it is not a row of generic spans.
- Decorative separators: Separators are hidden from assistive technology and do not appear inside accessible link names.
- Responsive behavior: The current position remains available on narrow screens; wrapping, disclosure, focus order, and touch targets work without hidden horizontal content.
- Schema parity:
BreadcrumbListnames, canonical URLs, order, item count, and positions match the complete visible hierarchy in substance. - Single data source: HTML and JSON-LD are generated from the same reviewed hierarchy rather than maintained as separate copies.
- Portable parity: Markdown, Hugo, and WordPress representations preserve identical item order, labels, destinations, and current state.
- Screenshot status: Capture comments remain non-rendering instructions until real assets exist; no nonexistent screenshot is referenced as an image.
FAQ
The academy template renders the five reviewed questions stored in frontmatter. They cover URL paths, the current item, structured data, unstable filter pages, and practical depth limits.
More tutorials in this section
Ready to put it into practice?
Free check · 7-day trial · no credit card