Breadcrumb Schema Framework
Use conditional-logic schema generation to keep Breadcrumb markup aligned with real page state and avoid stale or invalid static templates.
Google documentation entry point
Official rich result documentation: https://developers.google.com/search/docs/appearance/structured-data/breadcrumb
Use on pages that belong to a clear hierarchy and display navigational trail links users can follow.
Key implementation documentation highlights
- Required properties for this implementation: itemListElement, position, name, item.
- Recommended properties to improve robustness: @id.
- Google typically expects content parity: schema values must match what users can see on-page.
- Use the Rich Results Test and URL Inspection to validate rendering, eligibility, and crawlability.
- Monitor the related enhancement report in Search Console after deployment for errors and warnings.
Template approach (input JS)
const pageData = {
title: "Sample Breadcrumb Entity",
description: "Primary on-page summary for Breadcrumb content.",
url: "https://www.example.com/breadcrumb/sample",
publishDate: "2026-01-20",
image: "https://www.example.com/assets/breadcrumb.jpg",
authorName: "Example Author"
};
const staticTemplate = {
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"name": pageData.title,
"description": pageData.description,
"url": pageData.url,
"datePublished": pageData.publishDate,
"image": pageData.image,
"author": { "@type": "Person", "name": pageData.authorName }
};
Template approach (output JSON)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"name": "Sample Breadcrumb Entity",
"description": "Primary on-page summary for Breadcrumb content.",
"url": "https://www.example.com/breadcrumb/sample",
"datePublished": "2026-01-20",
"image": "https://www.example.com/assets/breadcrumb.jpg",
"author": {
"@type": "Person",
"name": "Example Author"
}
}
Conditional-logic framework (input JS)
function buildBreadcrumbListSchema(source) {
const schema = {
"@context": "https://schema.org",
"@type": "BreadcrumbList"
};
if (source.title) schema.name = source.title;
if (source.description) schema.description = source.description;
if (source.url) schema.url = source.url;
if (source.publishDate) schema.datePublished = source.publishDate;
if (source.modifiedDate) schema.dateModified = source.modifiedDate;
if (source.image) schema.image = source.image;
if (source.authorName) schema.author = { "@type": "Person", "name": source.authorName };
return schema;
}
Conditional-logic framework (output JSON)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"name": "Sample Breadcrumb Entity",
"description": "Primary on-page summary for Breadcrumb content.",
"url": "https://www.example.com/breadcrumb/sample",
"datePublished": "2026-01-20",
"dateModified": "2026-02-03",
"image": "https://www.example.com/assets/breadcrumb.jpg",
"author": {
"@type": "Person",
"name": "Example Author"
}
}
Why conditional logic is better than static templates
- Prevents emitting empty, null, or stale fields that frequently trigger rich result warnings.
- Supports multiple page states (for example: no rating yet, no image yet, no offers yet) without duplicate templates.
- Lets engineering teams centralize schema policy checks and validation in reusable code paths.
- Makes large-scale schema maintenance safer when content models evolve over time.