Breadcrumb Schema Generator
Paste a URL. Get valid BreadcrumbList JSON-LD.
A form-driven builder for schema.org BreadcrumbList markup with a URL parser that auto-populates rows from any absolute URL you paste. Live JSON-LD preview, one-click copy, and a toggle for the omit-item-on-last-row pattern Google documents for the current page. Everything runs in your browser, nothing is sent to XooCode.
BreadcrumbList form
Paste any absolute URL. The parser splits the pathname into segments, prepends a Home row, and title-cases each segment into a starting name. Edit the names below before copying.
Crumb rows (5)
Each row becomes a ListItem with an auto-assigned 1-indexed position. Order top-to-bottom matches the breadcrumb trail left-to-right.
- Position 1
Human-readable label shown in the SERP breadcrumb trail.
Fully qualified URL. Relative paths are invalid per Google's docs.
- Position 2
Human-readable label shown in the SERP breadcrumb trail.
Fully qualified URL. Relative paths are invalid per Google's docs.
- Position 3
Human-readable label shown in the SERP breadcrumb trail.
Fully qualified URL. Relative paths are invalid per Google's docs.
- Position 4
Human-readable label shown in the SERP breadcrumb trail.
Fully qualified URL. Relative paths are invalid per Google's docs.
- Position 5
Human-readable label shown in the SERP breadcrumb trail.
Fully qualified URL. Relative paths are invalid per Google's docs.
Live JSON-LD output
<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": "Products",
"item": "https://example.com/products"
},
{
"@type": "ListItem",
"position": 3,
"name": "Shoes",
"item": "https://example.com/products/shoes"
},
{
"@type": "ListItem",
"position": 4,
"name": "Running",
"item": "https://example.com/products/shoes/running"
},
{
"@type": "ListItem",
"position": 5,
"name": "Trail Running",
"item": "https://example.com/products/shoes/running/trail-running"
}
]
}
</script>Updates as you type. Empty fields are omitted. Click the copy icon above to grab the full <script> tag ready for pasting into your page head.
How to use the generator
Two-pane layout: form on the left, live JSON-LD preview on the right. Type anywhere and the preview updates. When you’re done, click the copy icon in the preview header and paste the script block into your page’s <head>. That’s it.
- 1
Paste a URL and click Parse
Drop any absolute URL into the Generate rows from a URL box at the top of the form and hit Parse (or press Enter). The parser splits the pathname on slashes, title-cases each segment, and prepends aHomerow pointing at the origin. A URL likeexample.com/products/shoes/runningbecomes four rows in one click. - 2
Edit the derived names
The parser is a starting point, not the final answer. URL slugs often collapse words together (trailrunning) or hyphenate awkwardly (mens-shoes), and the human-readable label you want in the SERP may be different anyway. Click into each row’s name field and rewrite as needed. The URL itself is usually fine straight from the parser. - 3
Toggle the current-page row (optional)
Google documents that the finalListItemcan drop itsitemproperty because the URL is redundant with the page carrying the markup. Flip the Last row is the current page checkbox to drop the URL on the bottom row. Leave it off when the breadcrumb is a reusable template component that can’t assume it’s always rendered on the last level. - 4
Reorder or add rows, then copy
Use the up and down arrows on each row to adjust order if your logical hierarchy differs from the URL pathname (it sometimes does). Click Add row to push in an extra level. The preview pane on the right shows the full<script>tag with syntax highlighting. Copy, paste, ship.
What BreadcrumbList actually does in Search
A BreadcrumbList is not navigation UI. It’s a structured statement of where a page sits inside the site, sent to Google and other crawlers in a form they can parse reliably. When it’s present, the green URL line under your search result gets replaced with a named trail of levels you control. More informative than a raw pathname, and it gets clicked more.
The difference looks small on a single listing but adds up across a whole site. You swap URL slugs for curated, title-cased labels. Levels like trail-running become Trail Running. Google also folds the structured hierarchy into its Knowledge Graph, which means category pages earn links from the deeper pages even when the HTML navigation is a client-side SPA the crawler can’t read.
Outside of Google, BreadcrumbList is the cleanest single signal you can give an LLM crawler for what a page is about at the hierarchy level. ChatGPT Search, Perplexity, Gemini, and Claude all parse JSON-LD, and a well-marked breadcrumb trail lets them answer questions like “is this a product page, a category page, or a blog post?” without guessing from the URL.
The three properties that matter
BreadcrumbList itself has one property: an itemListElement array. Everything interesting lives on each ListItem, and Google cares about three: position, name, and item.
position is a 1-indexed integer that tells the crawler where this level sits in the trail. Positions must be sequential with no gaps. 1, 2, 3, 4 is valid. 1, 2, 4 is malformed and Google drops the whole BreadcrumbList. Starting at 0 is also malformed for the same reason. The generator auto-assigns positions from the row order so this is one mistake you can’t make by hand here.
name is the human-readable label that renders in the SERP. Keep it short, title-cased, and descriptive of the level (Products, Running Shoes, Trail Running), not of the entire page title. Don’t reuse the page title on the final row.
item is the absolute URL of the level. Relative paths are not valid; every row needs a full URL including scheme and host. The final row can omit item because it’s the current page, which is the behaviour the toggle in the form controls.
What this generator isn't
The Breadcrumb Schema Generator is deliberately small. It outputs one specific shape of JSON-LD and nothing else. Knowing what it does not try to do saves time looking for features that were never going to exist.
It IS a BreadcrumbList JSON-LD builder
It is NOT a breadcrumb navigation component
It IS URL-parser first
It is NOT a crawler
It IS 1-indexed and gap-free
It is NOT a Rich Results Test
Authoritative sources behind the BreadcrumbList vocabulary
The generator’s behaviour is sourced from primary documentation. These are the documents to consult when you need to verify anything the tool produces.
- schema.org/BreadcrumbList. The canonical vocabulary definition. BreadcrumbList inherits from ItemList and carries
itemListElement(array of ListItem) as its only meaningful property. - schema.org/ListItem. The element type each row emits as. Carries
position,name,item, and the rarely-usedimageproperty. - Google BreadcrumbList structured data documentation. The current required and recommended property lists, the 1-indexed position rule, and the current-page omission allowance. Read this first when troubleshooting a missing breadcrumb rich result.
- Google Rich Results Test. Run your generator output through this to confirm the markup is valid and that the breadcrumb trail renders as expected.