Breadcrumb Schema Markup Generator
Show Home > Category > Page paths in Google SERP snippets — generate valid BreadcrumbList schema markup in seconds.
Site navigation path — shows "Home > Category > Page" in Google Search snippets.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": []
}
</script>- At least two breadcrumb items with names
How to use the Breadcrumb Schema Markup Generator
- The first breadcrumb item is pre-filled as "Home" — update the URL to your actual homepage address.
- Add breadcrumb items for each level of your site hierarchy: Home > Category > Subcategory > Page.
- Enter the name as it appears in your visible navigation — Google compares schema names against the breadcrumb trail users see on the page.
- Enter the full URL for each level. The URL for the last item (current page) is optional — Google uses the canonical URL as a fallback.
- Click "Add item" to add deeper hierarchy levels. Minimum two items are required for the schema to be valid.
- Copy the generated JSON-LD block and paste it into the <head> of the page whose breadcrumb path you are describing.
- Validate with the Google Rich Results Test — you should see "BreadcrumbList" as an eligible rich result.
How the Breadcrumb Schema Markup Generator works
Breadcrumb schema markup is a JSON-LD script block that describes the navigation hierarchy leading to the current page. Instead of letting Google guess the site structure from your HTML navigation, you give it an explicit, machine-readable path: Home → Category → Subcategory → Page. The generator builds this block in your browser — you add items, the JSON-LD updates live, and you paste the result into your page.
The practical SERP effect is visible and immediate: instead of showing a raw URL like `example.com/electronics/headphones/sony-wh1000xm5`, Google displays a clean breadcrumb trail: `example.com › Electronics › Headphones › Sony WH-1000XM5`. This makes the snippet more readable at a glance and communicates site structure to users before they click.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Electronics",
"item": "https://example.com/electronics/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Sony WH-1000XM5"
}
]
}
</script>What Breadcrumb Schema changes in Google Search results
The URL line in a standard Google snippet shows the raw page address — functional but hard to read. Breadcrumb schema replaces that raw URL with a human-readable navigation path, making your result look more organized and trustworthy at a glance. The effect appears in standard search results, mobile search, and Google Discover.
- Readable path instead of raw URL — "example.com › Headphones › Sony WH-1000XM5" instead of "example.com/products/headphones/sony-wh1000xm5-black-variant". Cleaner, more scannable.
- Site structure signal for Google — breadcrumb schema tells Google's crawler exactly how your pages relate to each other. This reinforces internal linking signals and helps Google understand your site architecture during indexing.
- Improved CTR on category pages — category pages benefit most, since the breadcrumb path communicates context that a URL slug alone often cannot.
- Mobile SERP display — on mobile, breadcrumbs appear as a separate line above the title in some layouts, giving your result more visual weight.
- Consistent anchor text for internal links — the name field in breadcrumb schema can reinforce the anchor text signals of your internal navigation links.
- Multi-path product pages — for products in multiple categories, multiple BreadcrumbList blocks on one page let Google choose the most relevant path for each query context.
BreadcrumbList fields — what each one does
BreadcrumbList has a minimal required structure — a list of ListItem objects, each with position, name, and optionally item (the URL). The simplicity is intentional: the schema is designed to be easy to implement correctly on any page type.
| Field | Required | Description |
|---|---|---|
| @type: BreadcrumbList | Yes | Root type identifier — must be exactly "BreadcrumbList" |
| itemListElement | Yes | Array of ListItem objects — one per breadcrumb level |
| @type: ListItem | Yes | Type of each item — must be exactly "ListItem" |
| position | Yes | Integer starting at 1 — order must be sequential with no gaps |
| name | Yes | Display label for this breadcrumb level — shown in SERP |
| item | Recommended | Full absolute URL of this level — optional for the last (current) item |
The item field (URL) is technically optional for the last breadcrumb — Google uses the page's canonical URL as a fallback. For all other levels it is strongly recommended: the URL tells Google that the named breadcrumb corresponds to a real, indexable page in your site hierarchy.
Common Breadcrumb Schema mistakes and how to avoid them
Schema structure mistakes
- Non-sequential positions — positions must be 1, 2, 3... with no gaps or duplicates. If you have four levels, position values must be exactly 1, 2, 3, 4. Skipping from 1 to 3 or repeating position 2 makes the schema invalid.
- Relative URLs instead of absolute — item must always be a full URL including protocol: `https://example.com/category/` not `/category/`. Google rejects relative URLs in breadcrumb schema.
- Fragment URLs — item values like `https://example.com/page#section` are not supported. Breadcrumb URLs must be the canonical page URL without hash fragments.
- Only one item — BreadcrumbList requires at least two items to be valid. A single-item breadcrumb ("Home" alone) is not a list and will not generate a Rich Result.
Content mismatch mistakes
- Names that don't match visible breadcrumbs — Google verifies that the name values in the schema correspond to what users see in the breadcrumb navigation on the page. If your schema says "Electronics" but the visible breadcrumb shows "All Electronics & Gadgets", Google may reject the markup.
- Schema breadcrumb differs from page URL structure — if the item URL in your schema doesn't match the actual canonical URL of that category page, Google's entity graph becomes confused about which page the breadcrumb level represents.
- Breadcrumb schema on pages without visible breadcrumbs — some implementations add BreadcrumbList schema to pages that have no visible breadcrumb navigation. This violates Google's requirement that schema content must be visible to users.
Technical deep dive: multiple paths and combining with other schemas
Multiple breadcrumb paths: a product page accessible from two different categories can have two separate BreadcrumbList blocks on the same page. For example, a headphone product might appear under both Electronics → Headphones and Brands → Sony. Add two separate `<script type="application/ld+json">` blocks, each describing one path. Google reads both and may choose which path to display based on the query context — showing the Electronics path for a product-category query and the Sony path for a brand query.
Combining with Product or Article schema: BreadcrumbList is designed to coexist with other schema types on the same page. A product page typically combines Product schema (for price, availability, ratings) and BreadcrumbList (for the navigation path). An article page combines Article schema (for author, date, publisher) and BreadcrumbList. Keep each type in its own `<script>` block — Google reads them independently.
Breadcrumb schema vs visible breadcrumb HTML: many sites implement breadcrumbs using visible `<nav>` elements with `<ol>` and `<li>` tags. Having both the visible HTML breadcrumb and the JSON-LD schema is the recommended approach — they reinforce each other. The JSON-LD does not need to be written as Microdata in the HTML. However, the name and URL values in the JSON-LD must accurately reflect what the visible breadcrumb shows.
<!-- Path 1: via category -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Electronics", "item": "https://example.com/electronics/" },
{ "@type": "ListItem", "position": 3, "name": "Headphones", "item": "https://example.com/electronics/headphones/" },
{ "@type": "ListItem", "position": 4, "name": "Sony WH-1000XM5" }
]
}
</script>
<!-- Path 2: via brand -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Sony", "item": "https://example.com/brands/sony/" },
{ "@type": "ListItem", "position": 3, "name": "Sony WH-1000XM5" }
]
}
</script>