Breadcrumb structured data: BreadcrumbList for Google

On desktop, Google can show a page's place in your site as a short trail next to the domain in the search result. That trail comes from breadcrumb markup. This guide covers what Google requires, how to describe more than one trail, the mistakes to avoid and how to test it.

This guide is built from Google Search Central, mainly the breadcrumb (BreadcrumbList) structured data documentation, its general structured data guidelines and the January 2025 post on simplifying the visible URL on mobile, with the type definition from schema.org. For what structured data is and which types a business site needs, start with our structured data basics; for when visible breadcrumbs help visitors, see planning website navigation.

What breadcrumb markup does

Google describes a breadcrumb trail as something that "indicates the page's position in the site hierarchy", which "may help users understand and explore a site effectively." Breadcrumb markup tells Google what that trail is, so it can use it in the search result instead of guessing from the URL.

Google says it "uses breadcrumb markup in the body of a web page to categorize the information from the page in search results." Its example is a page listing the winners of a book award: the same page can be found through quite different searches, and the breadcrumb puts it in context, such as Books › Science Fiction › Award Winners.

schema.org defines the type as "an ItemList consisting of a chain of linked Web pages, typically described using at least their URL and their name, and typically ending with the current page."

Where Google shows it

Google's breadcrumb documentation says: "This feature is available on desktop in all regions and languages where Google Search is available."

Mobile changed in January 2025. Google found that "the breadcrumb element isn't as useful to people who are searching on mobile devices, as it gets cut off on smaller screens", and stopped showing breadcrumbs in mobile results; the visible URL there is now the domain only. On desktop it "continues to have two parts: the domain and breadcrumb." Google added that if you already use breadcrumb markup "there's nothing you need to do", that the breadcrumb report in Search Console continues and that you can still test the markup in the Rich Results Test.

So the markup is still worth having, but its visible effect is on desktop results. If most of your search traffic is on phones, expect little visible change.

The required properties

Google's rule for the container: "define a BreadcrumbList that contains at least two ListItems." Google lists required properties only; there are no recommended ones for this type.

PropertyOnWhat Google says
itemListElementBreadcrumbList"An array of breadcrumbs listed in a specific order." Each breadcrumb is a ListItem.
positionListItemAn integer; "Position 1 signifies the beginning of the trail."
nameListItem"The title of the breadcrumb displayed for the user."
itemListItem"The URL to the webpage that represents the breadcrumb." Either a plain URL or a Thing with an id (@id in JSON-LD).

Two exceptions matter in practice. For the last item, "item is not required. If item isn't included for the last item, Google uses the URL of the containing page." And if item is a Thing that has its own name, the separate name is not required.

Order comes from position, not from the order in your code. schema.org notes that "the order of elements in your mark-up is not sufficient for indicating the order", and that position values "should be integers, e.g. beginning with '1' for the first item in the list."

Google also says "it is not required to include a breadcrumb ListItem for the top level path (your site's domain or host name), nor for the page itself." Including them is allowed; it's simply not needed.

A JSON-LD example

Google accepts JSON-LD, Microdata and RDFa, and its general guidelines mark JSON-LD as recommended. This is the trail for Google's own award-winners example, in a script in the page:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [{
    "@type": "ListItem",
    "position": 1,
    "name": "Books",
    "item": "https://example.com/books"
  },{
    "@type": "ListItem",
    "position": 2,
    "name": "Science Fiction",
    "item": "https://example.com/books/sciencefiction"
  },{
    "@type": "ListItem",
    "position": 3,
    "name": "Award Winners"
  }]
}
</script>

The third item has no item, so Google uses the page's own URL. If your trail is drawn in the page as an HTML list, Microdata or RDFa can mark up that list directly; Google's documentation shows the same trail in all three formats. Most content management systems and SEO plugins can output this markup for you, and Google notes that a CMS plugin "may be easier".

If the markup is added with JavaScript, Google's guide to generating structured data with JavaScript says it "can understand and process structured data that's available in the DOM when it renders the page." Our JavaScript SEO guide explains rendering and why server-side output is the safer default.

More than one trail

"If there are multiple ways to navigate to a page on your site, you can specify multiple breadcrumb trails for a single page." Google's example adds a second, shorter trail for the same award-winners page: Literature › Award Winners. In JSON-LD the two BreadcrumbList objects go in an array inside one script, each with its own positions starting at 1.

This suits shops where a product sits in two categories, or guides that belong to two topics. It doesn't mean every page should carry several trails; one that matches how people normally reach the page is usually enough.

Rules and common mistakes

Google says you "must follow these guidelines to be eligible to appear with breadcrumbs in Google Search", and warns that markup using techniques outside its structured data guidelines can lead to a manual action. The points that come up most with breadcrumbs:

  • Copying the URL instead of the user's path. Google recommends "breadcrumbs that represent a typical user path to a page, instead of mirroring the URL structure." A URL like /p/2026/item-4471 says nothing useful; Shop › Shoes › Running does.
  • Only one item. A trail needs at least two ListItems.
  • Missing or broken positions. Each item needs an integer position starting at 1 for the start of the trail.
  • Markup that doesn't match the page. The general guidelines say not to mark up content that is not visible to readers or that is misleading. Keep the names in the markup the same as the section names people see in your menus and links.
  • Blocking Google. "Don't block your structured data pages to Googlebot using robots.txt, noindex, or any other access control methods."
  • Old vocabulary. Google says "Data-vocabulary.org markup is no longer eligible for Google rich result features." Old themes sometimes still output it; replace it with schema.org markup.

Valid markup is not a promise. Google states that it "does not guarantee that features that consume structured data will show up in search results."

Testing and monitoring

  1. Test the code. Run the page or the snippet through the Rich Results Test and fix any critical errors. Google says non-critical issues are worth fixing too, "however, this isn't necessary to be eligible for rich results."
  2. Check how Google sees a live page. Deploy on a few pages first and use the URL Inspection tool, then ask Google to recrawl. Google notes "it may take several days after publishing a page for Google to find and crawl it."
  3. Watch the report. Once pages are indexed, the breadcrumb rich result report in Search Console shows valid and invalid items. Google suggests checking it after the first deployment and after any new template or code release: more invalid items usually means a broken template, and fewer valid items with no rise in invalid ones may mean the markup is no longer on the pages.
  4. If markup was ignored. After a structured data manual action, "the structured data on the page will be ignored (although the page can still appear in Google Search results)." Our guide to the Manual Actions report covers fixing one.

Our view: how we mark up breadcrumbs

This part is our own practice, not Google's guidance. We keep the names in the breadcrumb markup the same as the labels in the menus, and when a section is renamed we check that the markup changes with it. We use JSON-LD in the page's <head>, start the trail at the home page and keep names short, the way they read in the menu. On this site, for example, a guide's trail is Home › Guides › the guide. We add a second trail only where a page genuinely sits in two places. For a business with premises, the same template also carries LocalBusiness structured data on the relevant pages.

Frequently asked questions

Does Google still show breadcrumbs in search results?

Yes, on desktop. Since January 2025 Google no longer shows breadcrumbs in mobile results, where the visible URL is just the domain, but it still supports breadcrumb markup for desktop results.

What are the required properties for BreadcrumbList?

The BreadcrumbList needs itemListElement, an array of at least two ListItems. Each ListItem needs a position, a name and an item with the URL of that page. The last item can leave out the URL; Google then uses the URL of the page itself.

Should the breadcrumb trail match my URL structure?

Not necessarily. Google recommends breadcrumbs that represent a typical user path to the page instead of mirroring the URL structure.

Can a page have more than one breadcrumb trail?

Yes. If people can reach a page in several ways, you can mark up several BreadcrumbList trails on the same page, for example as an array in one JSON-LD script.

Does breadcrumb markup improve rankings?

Google describes structured data as a way to understand pages and make them eligible for rich results, and it does not guarantee that markup will be shown. Treat breadcrumbs as a clearer listing on desktop, not a ranking boost.

For more on structured data and search, see our guides to structured data basics, LocalBusiness structured data, your favicon and site name in Google and title tags. We build and maintain sites through our website development service.