/ โ† Schema Debugger Fixes / Breadcrumb Structured Data
In this guide
  1. What the breadcrumb report is telling you
  2. The correct shape of BreadcrumbList markup
  3. The common causes
  4. How to diagnose the problem
  5. Platform notes
  6. A worked example
  7. The fix, step by step
  8. Edge cases worth knowing
  9. Keeping breadcrumbs correct
  10. Questions and answers

What the breadcrumb report is telling you

A breadcrumb trail shows where a page sits in your site, such as Home โ€บ Garden Tools โ€บ Pruning Shears. BreadcrumbList markup describes the same trail in a form search engines can read. Google uses it to understand your site structure and, on desktop results, can show the trail in place of the raw URL. Since early 2025 Google shows only the site name and domain on mobile results, so the visible benefit is mainly on desktop, but the structural signal applies everywhere.

When Google finds BreadcrumbList markup, it adds the page to the Breadcrumbs report under Enhancements in Search Console. Each issue is listed as an error, which makes the item invalid, or a warning, which leaves it valid but incomplete. Common messages include:

Message (typical wording)What it means
Missing field "item"A level other than the last has no URL
Either "name" or "item.name" should be specifiedA level has no label
Missing field "itemListElement"The BreadcrumbList is empty or the list has the wrong property name
A problem with "position"A level has no position, or the position is not a whole number
An invalid URL in "item"The URL is relative, malformed or uses a placeholder

Open each message to see example URLs. Because breadcrumbs come from a template, the examples usually share a page type, which tells you where to look.

The correct shape of BreadcrumbList markup

A BreadcrumbList holds an itemListElement array of ListItem entries. Each entry has a position starting at 1, a name, and an item with the full URL of that level. The last entry is the current page and may leave out item.

<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": "Garden Tools",
     "item": "https://example.com/garden-tools/"},
    {"@type": "ListItem", "position": 3, "name": "Pruning Shears"}
  ]
}
</script>

The same trail in microdata, if your theme prints the visible breadcrumb with markup attached:

<ol itemscope itemtype="https://schema.org/BreadcrumbList">
  <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
    <a itemprop="item" href="https://example.com/"><span itemprop="name">Home</span></a>
    <meta itemprop="position" content="1">
  </li>
  <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
    <a itemprop="item" href="https://example.com/garden-tools/"><span itemprop="name">Garden Tools</span></a>
    <meta itemprop="position" content="2">
  </li>
  <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
    <span itemprop="name">Pruning Shears</span>
    <meta itemprop="position" content="3">
  </li>
</ol>

Use one format, not both. JSON-LD is easier to keep correct because it sits apart from the visible HTML.

The common causes

CauseTypical result
A level with no page of its own, such as a parent category that is only a labelMissing field "item" on a middle level
A loop that starts counting at 0, or skips a hidden levelPositions 0, 1, 2 or 1, 2, 4
Template variable empty on some pagesMissing name, or "item": ""
Relative paths in the templateInvalid URL warnings, or URLs resolved wrongly
Theme and SEO plugin both printing breadcrumbsTwo trails per page, often in different formats and with different levels
Old http or redirecting URLs hard-codedTrail points at addresses that are not the final page
Page title used as the last nameNames such as Pruning Shears | My Shop that do not match the trail

The first cause is by far the most common. It happens when a category exists in your product data but has no category page, or when the theme prints a level as plain text. Either give the level a real page or leave it out of both the visible trail and the markup.

How to diagnose the problem

Take an example URL from the report and run it through the Rich Results Test. It shows each breadcrumb item it found, with the levels listed and any error on the level that causes it. If two Breadcrumbs items appear, you have duplicate markup.

To see exactly what the page prints, paste this into the DevTools console. It lists every trail, in both JSON-LD and microdata, with the positions, names and URLs:

document.querySelectorAll('script[type="application/ld+json"]').forEach(s => {
  const walk = o => {
    if (!o || typeof o !== 'object') return;
    if (o['@type'] === 'BreadcrumbList') console.table(o.itemListElement.map(i =>
      ({ position: i.position, name: i.name, item: typeof i.item === 'object' ? i.item['@id'] : i.item })));
    Object.values(o).forEach(walk);
  };
  try { walk(JSON.parse(s.textContent)); } catch (e) { console.log('Unparsable block', e.message); }
});
console.log('Microdata trails:', document.querySelectorAll('[itemtype$="BreadcrumbList"]').length);

Check the table for a gap in positions, an empty name or a missing URL on any level except the last. Then check each URL returns 200 directly, not a redirect:

curl -sS -o /dev/null -w "%{http_code} %{url_effective}\n" https://example.com/garden-tools/

If the markup is broken JSON, the console script reports it; fix that first with the structured data syntax errors guide. The schema debugger runs the same checks and flags each failing level.

Platform notes

A worked example

A garden shop's Breadcrumbs report shows 1,200 items with Missing field "item". The Rich Results Test on a product page shows four levels: Home, Tools, Garden Tools and Pruning Shears. The error sits on level 2, Tools.

The shop's categories have a parent called Tools with no page of its own; it exists only to group menus. The theme prints it in the visible trail as plain text, and the markup template prints it with an empty URL. The owner has two choices: create a real Tools category page, or drop that level. They drop it from both the visible trail and the markup, which now read Home, Garden Tools, Pruning Shears with positions 1, 2 and 3. A second trail from the theme's microdata is switched off at the same time. After testing a deep product and a product with a long name, the owner validates the fix, and the report's error count falls over the next fortnight.

The fix, step by step

Step 1

Read the report and pick examples

In Search Console, open the Breadcrumbs report under Enhancements and note each error and warning message. Open each one and take two or three example URLs, grouped by page type such as product, category or post. Because breadcrumbs come from templates, each group usually has one cause. Run one example per group through the Rich Results Test and note which level of the trail carries the error.

Step 2

List every trail on the page

Open an example page in Chrome and run a short console script that finds every BreadcrumbList in the JSON-LD and counts microdata trails. Print each level's position, name and URL as a table. Check how many trails the page carries and whether they agree. Two trails that differ, often one from the theme and one from an SEO plugin, are a cause in their own right and need sorting out first.

Step 3

Remove duplicate breadcrumb markup

If the page prints more than one trail by accident, choose one source and switch the other off. In WordPress this is usually a theme option or the SEO plugin's breadcrumb setting. In Shopify, remove the extra snippet or app output. Keep the source that can also print the visible trail, so both come from the same data. Reload and confirm the console script now finds one trail.

Step 4

Add the missing item and name fields

For every level except the last, make sure the markup has an item with that level's URL and a name with its label. Where a level has no page of its own, either create a real page for it or remove that level from both the visible trail and the markup. Fix template variables that come back empty on some pages. Retest and check every middle level now has both fields.

Step 5

Number positions from 1 without gaps

Check the position values run 1, 2, 3 in order with no gaps, repeats or zero. Loops that start counting at 0, or that skip a level hidden in the visible trail, are the usual cause. Calculate the position from the index of each level in the final list, after any levels are removed, rather than from a fixed number. Test a shallow page and a deep page to confirm both number correctly.

Step 6

Use absolute, final URLs

Make every item a full https URL on your canonical host that returns 200 directly. Build URLs from your site address setting, not from relative paths or the request host. Replace any http, old or redirecting addresses with the final URL, and remove tracking and filter parameters. Check a few with curl to confirm each returns 200 with no redirect, and that trailing slashes match your canonical URLs.

Step 7

Match names to the visible trail

Compare the markup with the breadcrumb trail visitors see. Each name should be the same plain label shown in the trail, not the page title with your brand added. Remove levels from the markup that the visible trail does not show, and make sure there is a visible trail on the page. Generating both from the same list of levels keeps them matching after future changes.

Step 8

Test page types and validate

Run the Rich Results Test on one page of each type, including a deep page, a page with a long or unusual name, and a page in a category you recently changed. Each should show one Breadcrumbs item with no errors. Then open each fixed message in the Breadcrumbs report and choose Validate fix. Watch the error count fall over the next two weeks as Google recrawls the pages.

Edge cases worth knowing

Keeping breadcrumbs correct

Breadcrumb markup drifts when the visible trail and the markup are built from different data. The lasting fix is to generate both from the same source.

To see how breadcrumbs appear in search, see breadcrumbs in search results.

Questions and answers

1. What does Missing field item mean in breadcrumbs?

Missing field item means one level of your breadcrumb trail, other than the last, has no URL in the markup. Every level except the current page must include an item with the full URL of that level. It usually happens when a parent category has no page of its own, or when a template variable is empty. Either create a real page for that level and link to it, or remove the level from both the visible trail and the markup.

2. Does the last breadcrumb item need a URL?

No, the last item in a breadcrumb trail does not need a URL, because it represents the current page. Google's guidelines allow you to leave out the item property on the final ListItem, keeping only its position and name. Including the current page's URL is also allowed and does no harm. What matters is that every earlier level has a URL, that positions run in order from 1, and that names match the labels shown in the visible trail.

3. Can I have more than one breadcrumb trail on a page?

Yes, a page can carry more than one BreadcrumbList if it genuinely sits in more than one place in your site, and Google supports that. A product listed under two sections might have a trail for each. The problem is accidental duplicates, where a theme and a plugin each print a trail, often with different levels or formats. Keep intentional trails, remove accidental ones, and make sure every trail you keep is complete and matches what visitors can see.

4. Why do my breadcrumbs not show in Google search results?

Breadcrumbs may not show because Google decides per result whether to display them, and since early 2025 Google shows only the site name and domain on mobile results rather than a breadcrumb trail. On desktop, valid breadcrumb markup makes a page eligible, but Google may still show a URL instead. Check the Breadcrumbs report for errors, make sure the page is indexed and the markup matches the visible trail, then allow time for recrawling after any change.

5. Should breadcrumb names include my brand name?

No, breadcrumb names should be the plain labels shown in the visible trail, without your brand added. Using the page title, such as Pruning Shears followed by your shop name, makes the markup disagree with the trail visitors see and adds nothing useful. The site name is already shown separately in search results. Generate the names from the same field that prints the visible breadcrumb labels, so the two always match, and keep each name short and descriptive.

6. Is JSON-LD or microdata better for breadcrumbs?

JSON-LD is usually the better choice for breadcrumbs because it sits apart from the visible HTML and is easier to generate correctly. Microdata attaches the markup to the visible trail itself, which keeps them together but is easier to break when a theme changes its HTML. Google supports both. The important rule is to use one format per trail, not both, and to generate the markup from the same data that prints the visible trail on the page.

7. How long does it take for breadcrumb errors to clear?

Breadcrumb errors clear as Google recrawls the fixed pages, typically over a few days to a few weeks. Choose Validate fix in the Breadcrumbs report to have Google check the affected URLs and track progress. Busy pages clear first, while deep pages that are crawled rarely can take longer. You can confirm individual pages straight away with the Rich Results Test, so there is no need to wait for the report before checking your fix works.

Check your breadcrumb markup level by level

The schema debugger reads every BreadcrumbList on your page, lists each level with its position, name and URL, and flags missing fields and duplicate trails.

Open Schema Debugger Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Schema Debugger Fixes  ·  How to fix breadcrumbs in search results  ·  How to fix schema errors  ·  How to fix multiple schemas  ·  How to fix structured data syntax errors  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.