Breadcrumbs are the small trail of links near the top of a page, like Home > Shoes > Running Shoes. They show where a page sits on your site. For breadcrumbs SEO, they do three useful jobs. They help visitors move up a level. They add steady internal links. And with BreadcrumbList structured data, they can change how your URL looks in Google’s desktop results.
They will not lift rankings on their own. But on any site with more than a couple of levels, I think they are one of the cheapest structure fixes you can make. In this guide I cover the types, the markup Google expects, how they show in search today, and how to set them up and test them.
What Breadcrumb Navigation Is
A breadcrumb trail is a second layer of navigation. It does not replace your main menu. It shows the path from a top-level page down to the page the visitor is on, and each step is usually a link.
A typical trail on an online store looks like this:
Home > Women > Footwear > Running Shoes > Trail Runner X
Someone who lands on that product from search can see right away that the shop sells more running shoes and more women’s footwear. They can get there in one click. That matters, because most search visitors land deep in a site, not on the homepage.
The Three Types of Breadcrumbs
Breadcrumbs are usually grouped into three types. Only one of them is a good default for SEO.
Hierarchy-Based (Location) Breadcrumbs
These show where the page sits in your site structure: home, category, subcategory, page. They are the most common type, and Google’s breadcrumb documentation is built around them.
Use them on blogs with categories, service sites with grouped services, documentation and online store catalogues. If you only set up one type, make it this one. This is what I use on almost every site.
Attribute-Based Breadcrumbs
These show the filters a visitor has picked, for example Shoes > Running > Size 8 > Blue. They are common on large online stores with faceted navigation (filters for size, colour, price and so on).
They can help shoppers see and remove their choices. The SEO risk is that each filter step can point to a URL with parameters. That creates lots of near-identical pages. If you use them, only link steps to category pages you actually want indexed. Treat the filter part as part of the interface, not the site structure. Our guide to how Google handles duplicate content explains why filter URLs need care.
History-Based (Path) Breadcrumbs
These show the pages a visitor clicked through in their visit, a bit like the browser’s back button. They change from visitor to visitor. So Googlebot sees something different from users, and the trail tells nobody where the page actually lives.
For SEO and for most users, I’d skip them. A clear back link or the browser’s own history does the same job better.
Why Breadcrumbs Help SEO and Users
The benefits are practical, not dramatic. Here is what they actually do.
Better Navigation for Deep Landings
Visitors from search often land on a product, article or service page with no idea what else the site offers. A breadcrumb gives them an obvious next step that is not the back button. That helps people reach category pages and cuts down dead ends.
Steady Internal Links to Parent Pages
Every page with a breadcrumb trail links to its parent categories with short, clear anchor text. Across hundreds or thousands of pages, that gives category and hub pages a steady flow of internal links.
It also helps search engines understand how pages connect. A product that links up to Running Shoes and Footwear is clearly part of that section. For stores, this fits well with the other basics in our ecommerce product page SEO checklist.
Clearer Site Structure
Breadcrumbs force you to decide where each page belongs. If you can’t write a sensible trail for a page, your categories may overlap or the page may have no clear home. I find this is one of the most useful side effects. Fixing it helps both crawling and topic clarity.
A Different Look in Desktop Search Results
With valid markup, Google can show the trail instead of the raw URL above your title on desktop. example.com › Women › Running Shoes reads better than a long URL full of IDs and parameters. More on how this works below.
BreadcrumbList Structured Data: What Google Needs
The visible breadcrumb on the page is for people. To make the trail readable for machines, you add BreadcrumbList structured data (a small block of code that describes the page to search engines) from schema.org. Google supports JSON-LD, Microdata and RDFa. I always pick JSON-LD. It is the easiest to maintain because it sits in its own script block instead of being mixed into your HTML.
According to Google’s breadcrumb structured data documentation, the required properties are:
itemListElementon theBreadcrumbList: an ordered list ofListItementries. You need at least two.positionon eachListItem: a whole number, starting at 1 for the first step in the trail.nameon eachListItem: the label shown to users, like “Running Shoes”.itemon eachListItem: the URL of that step. It is required on every item except the last. If you leave it off the last item, Google uses the URL of the page the markup is on.
A JSON-LD Breadcrumb Example
Here is markup for a guide that sits two levels deep on a gardening site. You would place it in the page’s <head> or body inside a script tag.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Guides",
"item": "https://www.example.com/guides/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Vegetable Gardening",
"item": "https://www.example.com/guides/vegetables/"
},
{
"@type": "ListItem",
"position": 3,
"name": "How to Grow Tomatoes"
}
]
}
</script>
A few points about this example:
- The homepage is not included. Google says you don’t need a
ListItemfor the top-level domain. Adding it does no harm if your visible trail shows it. - The last item has no
itemURL, so Google takes the current page’s URL. - The names match the visible breadcrumb on the page. Markup should describe what users can see.
Follow the User’s Path, Not the URL
Here is a detail many guides miss. Google recommends breadcrumbs that show a typical user path to the page, not just a copy of the URL structure.
That helps if your URLs are flat or messy. A product at /p/12345 can still have a useful trail of Home > Kitchen > Coffee Makers. You don’t need to change your URLs to get good breadcrumbs.
Pages That Live in More Than One Place
Some pages really belong to two sections, like a book listed under both Fiction and Award Winners. Google allows more than one trail per page. In JSON-LD, you put the BreadcrumbList objects inside an array.
Use this rarely. For most pages, choose one main category and give it one trail. Multiple trails are for real cases of a page living in two places, not for squeezing in extra keywords.
How Breadcrumbs Appear in Google Search Results
On desktop, Google shows a URL line above each result title. When it understands your breadcrumbs, that line can show your site name and then the trail, split by the › symbol, instead of the full URL path.
Mobile is different. On 23 January 2025, Google announced on its Search Central blog that it was simplifying the visible URL on mobile search results. Breadcrumbs were often cut off on small screens. So mobile results now show only the domain, with no breadcrumb trail. The change applies to all languages and regions.
What did not change matters more:
- Breadcrumbs still appear in desktop results.
- Google still supports BreadcrumbList markup.
- The Rich Results Test still checks breadcrumb markup, and Search Console still reports on it.
So there is no reason to remove markup you already have. Just don’t expect a visual change in mobile results from adding it. The on-page benefits for navigation and internal links apply on every device.
Also remember that structured data makes a page eligible for a display feature. It does not promise Google will show your trail.
Design and Placement Best Practices
Good breadcrumbs are quiet and predictable. A few rules cover most sites:
- Place them near the top. Above the main heading or just below the header, in the same spot on every template.
- Keep them secondary. Smaller than your main menu, but big enough to tap easily on a phone.
- Use a clear separator. The
>or/characters are widely understood. - Use short, real category names. “Running Shoes”, not “Buy the Best Running Shoes Online Cheap”.
- Don’t link the current page. Show it as plain text at the end of the trail, so it is clear where the visitor is.
- Make every linked step a real, indexable page. Avoid linking to redirects, empty categories or pages blocked with
noindex. - Wrap them in a
<nav>element. Anaria-label="Breadcrumb"attribute andaria-current="page"on the last item help screen-reader users.
On mobile, long trails can wrap onto two or three lines. Some sites shorten the middle steps or let the trail scroll sideways. Either is fine, as long as the markup still has the full trail.
Does Every Site Need Breadcrumbs?
No. A five-page brochure site with a flat structure gains almost nothing from Home > About. The value grows with depth. In my experience, small sites can safely skip them.
Breadcrumbs earn their place on:
- Online stores with categories and subcategories
- Blogs and news sites with category or topic archives
- Service businesses with grouped services or location pages
- Documentation, help centres and knowledge bases
If a page can only be reached through two or more levels of navigation, it is a good candidate.
Adding Breadcrumbs in WordPress
WordPress does not show breadcrumbs by default, but there are several simple routes. Pick one, and make sure only one source produces the markup.
- Your SEO plugin. Most major SEO plugins have a breadcrumbs feature. You turn it on in the plugin settings, then add the trail to your templates with a block, a shortcode or a small PHP function. The plugin usually adds BreadcrumbList data to its structured data output for you. This is the route I usually recommend.
- Your theme. Many themes have a breadcrumb option in the Customizer or theme settings. Check whether it also outputs structured data, and whether it uses the same trail your SEO plugin would.
- WooCommerce. Shop pages in WooCommerce have their own breadcrumbs. Your theme or SEO plugin may replace them, so check which version actually appears.
- A dedicated breadcrumb plugin. Useful if you need fine control over the trail, like custom post types or complex taxonomies.
- Custom code. A developer can build the trail from your categories or page parents and print matching JSON-LD. This suits custom themes where plugins add extra weight you don’t want.
The most common WordPress problem is duplication. The theme outputs one BreadcrumbList, the SEO plugin outputs another, and they disagree. I usually see this right after a theme change. Check the page source or the Rich Results Test, find every BreadcrumbList on the page, and turn off all but one.
For posts in several categories, set a primary category if your SEO plugin supports it. That decides which trail appears, so a post doesn’t jump between sections.
Common Breadcrumb Errors and How to Fix Them
Most breadcrumb problems are small template mistakes that repeat on every page. These are the ones I check first.
- Missing field “item”. A
ListItemother than the last has no URL. Often the trail includes a label with no link, like an unlinked category heading. Give it a URL or remove it from the markup. - Missing or invalid “position”. Positions must be whole numbers in order, starting at 1. Templates sometimes start at 0 or repeat a number.
- Fewer than two items. A list with one item does not meet Google’s minimum. This happens on top-level pages. Leave the markup off those pages or add the parent.
- Relative or wrong URLs. Use full URLs with the correct protocol and host. Staging domains left in templates are a classic.
- Links to redirected or non-canonical URLs. If a category moved, update the trail to the new address instead of relying on a redirect. Our explainer on 301 and 302 redirects covers why direct links are better.
- Markup that doesn’t match the visible trail. If users see one path and the structured data says another, fix the template so both come from the same source.
- Duplicate BreadcrumbList blocks. Usually a theme and a plugin both adding markup, as above.
- Old vocabulary. Old data-vocabulary.org markup is no longer eligible for rich results. Replace it with schema.org BreadcrumbList.
How to Test Your Breadcrumbs
Testing takes a few minutes and catches problems before they spread across thousands of URLs.
- Run the Rich Results Test. Enter a live URL or paste your code. It shows whether a valid Breadcrumbs item was found, plus any errors or warnings. You can also inspect each
ListItem. - Test one page per template. Check a category page, a subcategory, a product or post, and any custom post type. Breadcrumbs come from templates, so one bad template affects every page that uses it.
- Use URL Inspection in Search Console. This shows what Google found on its last crawl and lets you test the live version. Confirm the page is not blocked by robots.txt or
noindex. - Watch the Breadcrumbs report. Under Enhancements in Search Console, the report lists valid and invalid items. A sudden jump in invalid items usually follows a theme update or plugin change. If you are new to it, our Search Console guide for beginners explains where the reports live.
- Validate fixes. After fixing a template, use the Validate Fix button in the report so Google crawls the affected pages again.
Changes in search take time. Google needs to crawl pages again before new markup shows up.
Breadcrumbs SEO: The Short Version
Breadcrumbs SEO is about structure more than snippets. A clear, hierarchy-based trail helps visitors who land deep in your site. It gives your category pages steady internal links. And with valid BreadcrumbList markup, it can tidy up your URL line in desktop results. Since January 2025, mobile results show only the domain, so I judge breadcrumbs on navigation and structure first.
Your next step: pick your most important template. Check its visible trail and its markup in the Rich Results Test. Fix any mismatch before you roll the same pattern out across the rest of the site.



