Build a schema.org BreadcrumbList JSON-LD block from an ordered page trail, ready to paste into your page. 100% client-side, no uploads.
The breadcrumb trail rendered under a Google search result, something like example.com › Docs › API Reference, comes from a BreadcrumbList block, and Google builds it entirely from your JSON-LD rather than from any visible navigation on the page. A trail that’s visually correct on screen but missing from the markup, or numbered out of order in the markup, simply doesn’t show up as a rich result.
List your page hierarchy top to bottom, one level per row, with a name and a URL. The tool numbers each entry automatically and wraps the result in a ready-to-paste <script type="application/ld+json"> tag.
The tool loads with Home, Docs, and API Reference already filled in, each with its own URL. The output numbers them position: 1 through position: 3 in order, and every level carries an item URL since all 3 rows have one filled in. Click Load Sample again and the next trail leaves the final row’s URL blank on purpose — that row’s JSON object comes out with only @type, position, and name, no item key at all.
"@context": "https://schema.org" and "@type": "BreadcrumbList".position always starts at 1, never 0, and counts only the rows that have a name filled in — an empty row in the middle of the form doesn’t leave a gap or a skipped number in the output.example.com/docs, is corrected to https://example.com/docs automatically, so a copy-pasted domain never ships a broken relative link.item key from that entry entirely rather than writing an empty string. Google’s own reference documents this specifically for the final, current-page level, though the tool doesn’t restrict the option to the last row.A row with no name typed is silently left out of the JSON, the same way an incomplete row is dropped in every schema generator on this platform; the tool shows “Fill in at least one page name to generate schema.” only once every row is empty. A single row still produces syntactically valid BreadcrumbList JSON-LD, but a trail 1 level deep carries no navigational information for Google to render, so it doesn’t enable the rich result on its own; breadcrumbs need at least 2 levels to mean anything.
<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": "Docs",
"item": "https://example.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "API Reference",
"item": "https://example.com/docs/api"
}
]
}
</script>A URL typed without http:// or https:// is prefixed with https:// automatically. Leaving a level’s URL blank omits the item key from that entry entirely rather than emitting an empty string; Google’s spec allows this specifically for the last, current-page level. Google’s own Rich Results Test is the authoritative way to confirm a page qualifies for the breadcrumb rich result once it’s live.