No BreadcrumbList schema
What is this issue?
This issue reports a BreadcrumbList schema block your page already declares that
is malformed — a missing itemListElement, a ListItem with no name or position,
or a broken position sequence — not a page that has no breadcrumb schema at all.
What this issue is not:
- It does not guess. A deep inner page with a fully visible breadcrumb trail but no
BreadcrumbListJSON-LD is never reported. Whether a page is meant to declare this schema is an editorial decision the markup cannot settle. - It does not grade the visible breadcrumb UI against the schema — only the schema's own internal consistency (sequential positions, every entry named, every non-final entry linked) is checked.
Why it matters
BreadcrumbList schema is important for user experience and SEO:
- Search result appearance: Breadcrumbs appear in search results, showing users the page hierarchy
- User navigation: Helps users understand where they are on your site
- Site structure: Search engines better understand your site's organization
- Click-through rates: Breadcrumbs can improve CTR by showing clear page context
- AI search context: AI engines use breadcrumbs to understand content relationships
Resolving this issue improves your SEO health score by enhancing search result appearance and site structure understanding.
How to fix it
If this issue was raised, your page already declares a BreadcrumbList — open the
finding for the exact entries at fault. The steps below are for a page that declares
none yet: worthwhile to add, and never reported as a defect while absent.
Add BreadcrumbList JSON-LD structured data to all inner pages (non-homepage pages with depth > 1):
{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com" }, { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.example.com/blog" }, { "@type": "ListItem", "position": 3, "name": "Article Title", "item": "https://www.example.com/blog/article-title" } ] }Ensure each ListItem has required properties:
position: Sequential number starting from 1name: Human-readable name for the pageitem: Full URL of the page
Make the last item match the current page URL
Validate with Google's Rich Results Test
Examples
Example 1: No Schema Declared — Not This Issue
<!-- Inner page without any BreadcrumbList schema -->
<html>
<head>
<title>Article Title - Example Blog</title>
</head>
<body>
<h1>Article Title</h1>
<p>Article content goes here...</p>
</body>
</html>Nothing is reported, however deep the page sits or however clear its visible breadcrumb trail is.
Example 2: A Well-Formed BreadcrumbList (passes)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com" },
{ "@type": "ListItem", "position": 2, "name": "Products", "item": "https://www.example.com/products" },
{ "@type": "ListItem", "position": 3, "name": "Electronics", "item": "https://www.example.com/products/electronics" },
{ "@type": "ListItem", "position": 4, "name": "Headphones" }
]
}Positions run 1-4 with no gaps, every entry is named, and only the final crumb (the
current page) omits item — which the check allows, since the final entry IS the page
being described.
Example 3: A ListItem Missing name (fails)
Problematic state:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1 }
]
}Reported: itemListElement[0].name missing. A missing item URL is not reported
here — this entry is both first and last, and the last crumb is allowed to omit it.
Corrected state:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home" }
]
}Example 4: Broken Position Sequence (fails)
Problematic state:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com" },
{ "@type": "ListItem", "position": 3, "name": "Article", "item": "https://www.example.com/blog/article" }
]
}Reported: itemListElement positions must run 1-2 with no gaps or duplicates (got 1, 3).
Corrected state: number the entries 1, 2 with no gap.
How PixyScan detects this
Read the declared structured data: every JSON-LD block is parsed, and
@graphwrappers are flattened into their individual entities.Select declared
BreadcrumbListentities: any schema block whose@typeisBreadcrumbList. A page that declares none is not examined, and nothing is reported — this check does not infer breadcrumb depth from the URL or from a visible breadcrumb trail in the page.Check the required property: a declared
BreadcrumbListmust have anitemListElementarray.Validate the list, when present:
- it must be a non-empty array of
ListItementries (an object with@typeother thanListItem, if a type is stated at all, is flagged) - every entry needs a
name(directly, or on theitemit points to) - every entry needs a
position; positions must run1, 2, 3…across the whole list with no gaps or duplicates — a list that numbers only some entries is flagged the same as one with a broken sequence - every entry except the last must carry the URL it points to, as
itemor via a nesteditem.url/item['@id']; the final crumb (the current page) may omit it
- it must be a non-empty array of
This is reported when: the page declares a
BreadcrumbListthat is missingitemListElement, has an empty or malformed list, or has entries missingname,positionor (for all but the last) a URL. A page with noBreadcrumbListschema at all — however deep its URL, and whatever breadcrumb trail it shows visually — is never reported.
What we store
Storage Level
Page Level — This issue is evaluated for each individual URL that contains structured data.
Database Table / Prisma Model
PageStructuredData
Stored Fields
| Field | Type | Description |
|---|---|---|
| schemaType | SchemaType | The type of schema (e.g., Organization, Person) |
| schemaFormat | SchemaFormat | The format of the schema (JSON-LD, Microdata, RDFa) |
| schemaIdentifier | String? | Unique identifier for the schema |
| rawJson | Json? | The raw JSON-LD or structured data content |
| schemaErrors | Json? | Array of validation errors found in the schema |
| isValidSchema | Boolean? | Whether the schema is valid according to validation |
| missingFields | Json? | Reserved for future use — the crawler always writes null here today; no check currently populates it |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
- Structured Data Validation — The extracted schema is validated against Schema.org definitions
- Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed