Skip to content
Issue docs

No BreadcrumbList schema

Standardbreadcrumblist_schemaIssue 91

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 BreadcrumbList JSON-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.

  1. 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"
        }
      ]
    }
  2. Ensure each ListItem has required properties:

    • position: Sequential number starting from 1
    • name: Human-readable name for the page
    • item: Full URL of the page
  3. Make the last item match the current page URL

  4. 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

  1. Read the declared structured data: every JSON-LD block is parsed, and @graph wrappers are flattened into their individual entities.

  2. Select declared BreadcrumbList entities: any schema block whose @type is BreadcrumbList. 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.

  3. Check the required property: a declared BreadcrumbList must have an itemListElement array.

  4. Validate the list, when present:

    • it must be a non-empty array of ListItem entries (an object with @type other than ListItem, if a type is stated at all, is flagged)
    • every entry needs a name (directly, or on the item it points to)
    • every entry needs a position; positions must run 1, 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 item or via a nested item.url/item['@id']; the final crumb (the current page) may omit it
  5. This is reported when: the page declares a BreadcrumbList that is missing itemListElement, has an empty or malformed list, or has entries missing name, position or (for all but the last) a URL. A page with no BreadcrumbList schema 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

Further reading