What BreadcrumbList is
Per Schema.org v30.0, BreadcrumbList is 'a chain of linked Web pages, typically described using at least their URL and their name, and typically ending with the current page.' Parent type ItemList (Thing > Intangible > ItemList > BreadcrumbList). The single required property: itemListElement, an array of ListItem objects, each with position (Integer starting at 1), name (Text — the displayed crumb label), and item (URL — the page each crumb points to).
What Shopify themes emit
View-source audit on Dawn-derivative Shopify themes (verified 2026-05-22): visible breadcrumb HTML is rendered by most themes via snippets/breadcrumbs.liquid or equivalent, BUT BreadcrumbList JSON-LD is NOT consistently emitted. Some Shopify Theme Store themes do ship BreadcrumbList JSON-LD (some Shopify-built premium themes); most third-party themes do not. The audit answer is template-specific, not platform-specific.
BreadcrumbList fields
The fields per ListItem inside itemListElement: position (Integer, starting at 1, sequential), name (Text — the crumb label shown to the user), item (URL — the destination page). The last ListItem traditionally points to the current page; recent Google guidance accepts either including or omitting item on the last crumb. Both forms validate.
JSON-LD example per Shopify template
The block below is BreadcrumbList for a Shopify PDP. Paste it inside main-product.liquid alongside the Product block. The Liquid logic detects whether the PDP was reached via a collection-prefixed URL (/collections/foo/products/bar) and conditionally includes the collection crumb.
Filtered collection URLs and BreadcrumbList
Shopify's default robots.txt blocks /collections/*+* URLs (filtered duplicates). When a user navigates a collection page with active filters (e.g. /collections/coastal-decor/+blue+ceramic), the URL is non-canonical and excluded from crawling. BreadcrumbList JSON-LD on that filtered page is wasted — the page won't be indexed anyway. Either gate BreadcrumbList emission on the unfiltered collection.url, or simply emit the block regardless and let robots.txt do its job.
Validation
Rich Results Test against a PDP with BreadcrumbList emitted should report Breadcrumbs detected, two or more ListItems parsed, zero errors. The Rich Results Test does NOT explicitly check that the position integers are sequential — the Schema.org Markup Validator does. Run both against representative templates.
Shopify gotchas on BreadcrumbList
Four gotchas. First: missing | escape on collection.title or product.title (apostrophes and quotes break the JSON). Second: hard-coding item URLs without {{ shop.url }} prefix (the breadcrumb item becomes a relative path which Google's validator accepts but downstream parsers handle inconsistently). Third: skipping the collection crumb on PDPs reached via /products/foo (some Shopify storefronts use direct /products URLs without a collection prefix — the breadcrumb should still include the product's primary collection if one exists, fetched via product.collections.first). Fourth: emitting the breadcrumb on filtered collection pages with the filtered URL as the item (use the canonical collection.url instead).