Skip to content
arduralab
·10 min

Breadcrumbs for SEO: Navigation and BreadcrumbList

technical SEOstructured dataSchema.orgSEO
MG
Marcin Godula

Współzałożyciel & Head of SEO/Tech

Specjalista SEO, GEO i web development z ponad 15-letnim doświadczeniem. Pomaga firmom B2B budować widoczność w wyszukiwarkach klasycznych i AI.

Breadcrumbs are a row of links from the start of a site to the current page that shows where that page sits in the site's structure. For readers, they are a one-click way back up a level. For search engines, they are plain links to parent pages, and BreadcrumbList structured data describes the same trail in code. Google shows breadcrumbs in results on desktop only: since January 2025, mobile results show just the domain in that spot. A good breadcrumb trail follows the typical path a user takes to the page, and it is identical in the visible navigation and in the structured data.

What Breadcrumbs Are and Where the Name Comes From

The name comes from the Hansel and Gretel fairy tale, where the children drop bread crumbs to mark their way back through the forest. On a website, a breadcrumb trail is the narrow bar above the content, usually in the form "Home › Blog › Post title", where every level except the last one is a link. You'll also hear it called breadcrumb navigation or a breadcrumb trail. In this article, all three mean the same thing.

The breadcrumb pattern in the W3C ARIA Authoring Practices Guide describes a breadcrumb trail as a list of links to the parent pages of the current page, in hierarchical order, that helps users find their place within a website. It is typically placed horizontally before the page's main content. Google puts it in similar terms: its BreadcrumbList structured data documentation says a breadcrumb trail indicates the page's position in the site hierarchy, and that a user can navigate all the way up, one level at a time, starting from the last breadcrumb.

Breadcrumbs don't replace the main menu. The menu shows what a site contains, while breadcrumbs show where you are in it. They pay off most where the structure has several levels: stores with categories and subcategories, knowledge bases, and service sites split by industry or location. On a site with five pages on a single level, a trail like "Home › Contact" adds very little.

Types of Breadcrumb Trails

There are three kinds of breadcrumb trails. The most common is the hierarchy-based trail, built from the page's position in the site structure: home, category, subcategory, then a product or an article. For any given page, this trail is always the same, no matter where the reader came from, and it is the one structured data describes.

The second kind is the attribute-based trail, typical for stores with filters: "Shoes › Women › Size 8 › Black". It shows the selected attributes instead of a place in the category tree. It's useful for navigating filtered results, but filtered URLs are often not pages a site wants to show in search, so before marking them up with BreadcrumbList, decide which combinations should be indexed at all.

The third kind is the history-based trail, a list of the pages the user visited in the current session. It works like a multi-step back button and looks different for every visitor. From an SEO standpoint, it's the least useful of the three, because it says nothing stable about the page's place on the site, and the same page would have a different trail on every visit. If a site needs that feature, build it separately and keep the hierarchy-based trail as the breadcrumbs.

What Breadcrumbs Do for Readers and Crawlers

For readers, breadcrumbs are a shortcut. Someone who lands on an article or a product straight from search can see at once which section of the site they're in and can get to the category in one click instead of hunting for it in the menu. This is especially noticeable on phones, where the menu hides behind an icon while the breadcrumb bar stays in plain view.

For a search engine crawler, every breadcrumb is an ordinary internal link to a parent page. Google's documentation on making links crawlable says that Google can generally only crawl a link if it is an <a> element with an href attribute. Breadcrumbs built from such elements therefore add links to the categories on every page, and categories that breadcrumbs point to from many pages get a lot of them. It's part of the internal linking a site builds as a side effect, without writing separate sentences with links. Breadcrumbs built as buttons or as elements that only respond to a script don't provide that benefit.

There's an accessibility layer, too. In the W3C pattern, the trail sits inside a navigation landmark labeled with aria-label or aria-labelledby. The link to the current page gets aria-current="page", and if the last element isn't a link, the attribute is optional. That way, a screen reader announces the breadcrumbs as a separate navigation region and lets users jump to it.

Breadcrumbs in Google Search Results

Google uses breadcrumb markup to categorize the information from a page in search results. The documentation explains it with an example: people can reach the same page from very different queries, and the breadcrumb trail puts its content in the context of that particular search. In the result itself, it shows up where the URL would be: instead of the full address, you see the domain and the breadcrumb, such as the name of a site section.

Today, that presentation applies to desktop only. In a post from January 23, 2025, Google announced that it would stop showing breadcrumbs in mobile search results in all languages and regions, because the breadcrumb got cut off on smaller screens and was less useful there. Since then, the visible URL in mobile results consists of the domain only. On desktop, it still has two parts, the domain and the breadcrumb. The BreadcrumbList documentation page says the same thing: the feature is available on desktop in all regions and languages where Google Search is available.

Google also noted that site owners with BreadcrumbList markup don't need to do anything. The markup is still supported, the breadcrumb rich result report in Search Console continues, and you can still test the data in the Rich Results Test. The 2025 change took away some of the visibility breadcrumbs had in results, but it didn't change their role on the page itself.

BreadcrumbList: Structured Data for the Breadcrumb Trail

A breadcrumb trail is described with the BreadcrumbList type from the schema.org vocabulary, most often written as JSON-LD. Google requires an itemListElement list with at least two ListItem elements. Each element has three properties: name, the crumb text the user sees, position, its number in the trail counted from 1, and item, the URL of the page the crumb stands for. The last element can omit item. In that case, Google uses the URL of the page that contains the markup.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Blog", "item": "https://example.com/blog" },
    { "@type": "ListItem", "position": 2, "name": "Technical SEO", "item": "https://example.com/blog/technical-seo" },
    { "@type": "ListItem", "position": 3, "name": "Article title" }
  ]
}

Two of Google's rules tend to surprise people. First, the trail doesn't have to copy the URL structure: the documentation recommends breadcrumbs that represent a typical user path to a page, not a mirror of the URL. Second, the trail doesn't need to include the domain itself or the current page. A single page can also have more than one trail. The documentation shows a page reachable from two different categories, with two BreadcrumbList lists in its markup. The general rule for all structured data applies here as well: the markup describes what's actually on the page.

One Source for the Visible Trail and the Structured Data

The most common breadcrumb problem isn't a syntax error. It's two descriptions of the same trail drifting apart. The visible navigation is built in the page template, while the BreadcrumbList data is often added by a plugin or a separate module. After a category gets renamed or a section moves, one of them is updated and the other isn't, and the page ends up with one trail in its code and a different one on screen.

On this blog, the trail has three levels: "Home", "Knowledge Base" and the post title. The visible bar above the article and the BreadcrumbList data are generated in the same post template, from the same three names and URLs. The bar sits inside a navigation landmark with an aria-label, and the last level is plain text, not a link, as the W3C pattern allows. In the structured data, the last element carries the post's URL, which Google accepts but doesn't require. Both lists are still written out twice in the template, side by side, so keeping them in sync currently depends on discipline during edits, not on the code. The safer approach is a single array of crumbs passed to both the navigation component and the function that builds the structured data.

The same principle works on any site: the breadcrumb trail should have one data source that produces both the visible navigation and the BreadcrumbList. Then renaming a category changes both descriptions at once, and testing the structured data also checks what the user sees.

What We Look for in a Breadcrumb Audit

In audits, we regularly find BreadcrumbList data added by a plugin that describes a different trail than the navigation on screen, such as a different category name or an extra level that the page doesn't show. We also see breadcrumbs built by a script from elements without an href, which look like links but aren't links to a crawler. That's why we start a breadcrumb review by comparing three things: what's visible on the page, what's in the structured data, and what the URL Inspection tool in Search Console shows after rendering.

Is every crumb except the last one an <a href> link? We check the rendered HTML, not a screenshot, because a button with a click handler looks exactly like a link.

Does the trail in the data match the one on screen? We compare the names and the order of the levels directly, and we open every URL in the item fields: a crumb that leads to a redirect or an error page is a common leftover from a site rebuild.

Does the trail follow the user's path? We look for trails that repeat URL segments whether or not there's an actual page behind them, and for categories that breadcrumbs point to but the menu never mentions.

What does the Search Console report show after a template change? Google recommends checking the rich result report after the first deployment of the markup and after every significant template change. A rise in invalid items usually points to a faulty new template, while a drop in valid items with no rise in errors means the data has disappeared from the pages.

Summary

Breadcrumbs are a simple trail of links to parent pages that helps readers find their way around a site and gives crawlers ordinary internal links to the categories. BreadcrumbList structured data describes the same trail in code and lets Google show it in desktop results. On phones, since January 2025, results show just the domain in that spot. According to the documentation, the trail should follow a typical user path rather than copy the URL, and it should match what's visible on the page.

In practice, most of the trouble comes not from the markup itself but from two independent descriptions of one trail and from breadcrumbs that aren't real links. We review navigation, structured data and internal linking as part of our SEO audits. If you'd like the breadcrumb trails on your site to go through that kind of review, request a quote.

Need help with this topic?

Get a free audit and find out how we can help your business grow online.

Get a free quote