Breadcrumb Schema: BreadcrumbList Markup Guide
Breadcrumbs show where a page sits in your site and help Google categorise it in results. This guide covers the exact BreadcrumbList properties, JSON-LD and other formats, rules for multiple trails, Google’s guidelines, and how to deploy, validate and monitor the markup.
- Required properties
- JSON-LD format
- Guidelines
- Deploy and monitor
Home > Guides > Breadcrumb schema position 1, 2, 3 name + item (last item optional)
Add a BreadcrumbList with an itemListElement array of at least two ListItems, each with position (1 is the start), name and item (URL). The last item may omit item, and Google then uses the page URL. Build trails around typical user paths, not URL structure. Validate with the Rich Results Test, then inspect a few pages and monitor the Rich results status report. Google says the feature appears on desktop.
What breadcrumb markup does
A breadcrumb trail shows where a page sits in a site’s hierarchy, helping users understand the site and move up one level at a time. Google uses breadcrumb markup to categorise page content in results, and the same page may be shown with different trails depending on the query.
Properties
| Type | Property | Rule |
|---|---|---|
| BreadcrumbList | itemListElement | Required; at least two ListItems, in order |
| ListItem | position | Integer; position 1 is the start of the trail |
| ListItem | name | Text shown to users; not required if a Thing with its own name is used for item |
| ListItem | item | URL or a Thing; optional for the last item, where Google uses the containing page’s URL |
Formats
JSON-LD is the usual choice: a script block holding a BreadcrumbList with an ordered array of ListItems. Google also supports RDFa and Microdata (properties added to ordered-list and list-item elements, with positions supplied through meta elements). A plain linked list in visible HTML shows the trail to users but carries no structured data.
{
"@type": "BreadcrumbList",
"itemListElement": [
{"@type":"ListItem","position":1,"name":"Home","item":"https://example.com/"},
{"@type":"ListItem","position":2,"name":"Guides","item":"https://example.com/guides/"},
{"@type":"ListItem","position":3,"name":"Breadcrumbs"}
]
}The example is my own short illustration following Google’s property rules.
Multiple trails
If a page belongs in more than one trail, JSON-LD uses an array of BreadcrumbList objects. RDFa and Microdata use separate ordered lists, one per trail.
Guidelines
- Eligibility depends on following Search Essentials and the general structured data guidelines.
- Markup outside the guidelines can trigger a manual action, and structured data on a page under manual action is ignored. See manual actions.
- Build breadcrumbs around typical user paths, not by mirroring URL structure.
- Including the home-level item or the current page as a ListItem is not required.
- Data-vocabulary.org markup is no longer eligible for rich results.
Implement step by step
Add the required properties
Via a CMS plugin or generated with JavaScript.
Follow the guidelines
Match visible breadcrumbs.
Run the Rich Results Test
Fix critical errors; non-critical issues are worth fixing but not required for eligibility.
Deploy a few pages, inspect
Confirm they are not blocked by robots.txt, noindex or login. Then request recrawling; allow several days.
Watch reports
Rich results status and Performance.
How it shows in results
Google’s page describes the feature for desktop in all regions and languages where Search is available. It does not explain display rules in detail, and valid markup does not guarantee a rich result.
Notes for WordPress sites
- SEO plugins add breadcrumb schema when breadcrumbs are enabled (my own note). Check your plugin. See Yoast settings.
- Avoid duplicates from theme and plugin both outputting a BreadcrumbList.
- Check after template updates; Google advises watching valid and invalid items then.
- Also see schema markup guide.
Troubleshooting
| Symptom | Likely cause (my own diagnosis) | Fix |
|---|---|---|
| Error: missing itemListElement | Incomplete markup | Add at least two ListItems |
| Not eligible | Guideline breach | Match visible trail |
| Not shown | No guarantee, or desktop only | Check status report |
| Duplicate trails | Plugin plus theme | Keep one |
Checklist
Markup
- itemListElement present
- At least two items
- Positions in order
- Names and URLs
Rules
- Reflects user paths
- Matches visible trail
- No data-vocabulary.org
- Guidelines followed
Deploy
- Rich Results Test
- Inspect sample pages
- Not blocked or noindexed
- Sitemap submitted
Monitor
- Rich results report
- Check after template edits
- Performance report
- No duplicates
What Google’s page does not say
It does not cover the difference between location-based and path-based breadcrumbs, any limit on trail length, what happens when item is omitted for a non-final item, indexing timeframes beyond several days, or mobile display behaviour.
Key terms
- BreadcrumbList
- Schema type for a breadcrumb trail.
- ListItem
- One step in the trail.
- position
- Order number; 1 is the start.
- Trail
- The path from top level to the page.
Common mistakes
Only one item
At least two required.
Mirroring the URL
Not user paths.
Wrong positions
Order broken.
Old data-vocabulary.org
Not eligible.
Duplicate markup
Plugin plus theme.
Deploying without checks
Blocked pages.
Related guides
Breadcrumb schema questions
What is required?
An itemListElement with at least two ListItems in order.
Can the last item omit its URL?
Yes. Google then uses the page’s own URL.
Where does position start?
At 1, the beginning of the trail.
Do I need to include Home?
No. The home item and current page are not required.
Can I have two trails?
Yes, with an array of BreadcrumbList objects in JSON-LD.
Does valid markup guarantee display?
No.
Which format?
JSON-LD, RDFa and Microdata are supported.
Is data-vocabulary.org OK?
No, it is no longer eligible.
Properties, formats, guidelines, deployment steps and monitoring come from Google’s page. The code example, WordPress notes, troubleshooting and checklists are my own.