Guides breadcrumb implementation for SEO, UX, and GEO. Breadcrumbs show users their location in the site hierarchy and help search engines understand content taxonomy. Well-implemented breadcrumbs can increase CTR by 20–30%, reduce bounce rates by up to 30%, and strengthen internal linking.
When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.
TypeUse caseRecommendationLocation-basedReflects site hierarchy (Home > Blog > SEO > Page)Recommended — most SEO-friendly; clear structureAttribute-basedShows product attributes (Home > Electronics > Phone > iPhone 15)E-commerce; product classificationPath-basedShows user's browsing pathAvoid — different users, different paths; can cause confusion
Default: Use location-based for most sites. Use attribute-based for e-commerce product pages.
Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site structure and key pages.
Identify:
PracticeGuidelineDepth3–5 levels optimal; avoid very long trailsAnchor textKeyword-rich, human-readable; descriptiveConsistencySame pattern across all pages (blog, category, product)Canonical pathFor items in multiple categories, define one canonical breadcrumb to avoid diluted link equity
See schema-markup for BreadcrumbList requirements, JSON-LD example, and multiple paths. Schema must match visible breadcrumbs exactly.
PracticeGuidelinePositionBelow nav bar or above page title; top of content areaVisualSmaller font, lighter color; avoid competing with main contentSeparatorClear separator (>, /, ›); consistent across siteNamingMatch page title or nav menu; concise, descriptive
PracticeGuidelineMobileTappable; short, readable text; high contrastLong trailsHorizontal scroll container rather than truncatingCurrent pageLast item non-linked; use aria-current="page"Screen readersnav with aria-label="Breadcrumb"; proper landmark
html
<nav aria-label="Breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="https://example.com/"><span itemprop="name">Home</span></a>
<meta itemprop="position" content="1" />
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="https://example.com/category/"><span itemprop="name">Category</span></a>
<meta itemprop="position" content="2" />
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" aria-current="page">
<span itemprop="name">Current Page</span>
<meta itemprop="position" content="3" />
</li>
</ol>
</nav>
Implementation: Generate BreadcrumbList from route segments or page metadata. Ensure item URLs are absolute. Use next-seo BreadcrumbJsonLd or custom component. See schema-markup for JSON-LD structure.
Site typeUse caseE-commerceCategory > Subcategory > ProductBlogHome > Blog > Category > Post (see article-page-generator for article page structure)DocsHome > Docs > Section > PageLarge sitesAny site with 3+ level hierarchy
Skip on flat sites (e.g., single-page, 1–2 level depth).
Deep pages: For 6+ levels, consider omitting middle levels; show only the most important categories to avoid clutter.
PlatformOptionsWordPressYoast SEO, Rank Math, Breadcrumb NavXTNext.jsnext-seo BreadcrumbJsonLd, custom from route segmentsShopify, Drupal, JoomlaBuilt-in or plugin support
ErrorFixRelative URLs in schemaUse absolute URLs (https://)Schema doesn't match visible trailKeep schema and UI in syncMissing positionInclude sequential position (1, 2, 3…)Last item linkedCurrent page typically not a linkToo many levelsLimit to 5–7; omit middle levels for deep pathsInaccurate pathBreadcrumb must reflect actual site structureNo schemaAdd BreadcrumbList per schema-markup; otherwise no SERP breadcrumbs; see serp-features