Articles

Breadcrumbs and site structure for AI agents

Usually fixed by: Developer

An AI agent that lands on one of your product pages from a search result knows nothing about the rest of your store. Breadcrumbs and a clear site structure tell it where it is, what the product belongs to and where to go next. This guide covers breadcrumbs as real links, BreadcrumbList structured data and a hierarchy agents can follow.

Why structure matters to an agent

AI agents often skip your home page. An assistant such as ChatGPT, Claude or Perplexity fetches the page that answers the question it was asked: a product, a category, a help article. A browser agent shopping for someone may start from a search result too. Either way, the agent lands in the middle of your site and has to work out the context from that one page.

Breadcrumbs answer three questions at once:

  • What is this? "Home > Coffee > Espresso > Dark Roast Beans" says the product is an espresso coffee, even if the product name doesn't.
  • What else is like it? The "Espresso" link leads to the alternatives an agent needs when it's comparing, or when this product is sold out or the wrong size.
  • How is this store organized? A consistent trail across pages shows the agent your categories without it having to open the whole menu.

Without breadcrumbs, an agent has to guess the category from the page title, the URL or the menu, and menus are often built with JavaScript or hidden behind a button. A breadcrumb trail is the shortest, most reliable map you can give it.

  1. Home northwind.example
  2. Coffee /coffee/
  3. Espresso /coffee/espresso/
  4. Dark Roast Beans The page the agent landed on
One trail, the whole context. An agent that lands on a product page can read what it is and where its alternatives live from four short links.

A breadcrumb trail only helps if an agent can read it and follow it. That means three things.

  1. It's in the HTML the server sends. Many agents read a page without running JavaScript. A trail that a script draws after the page loads is invisible to them. See why AI agents can't see your JavaScript-only content.
  2. Each step is a real link. An <a href> with the category's URL, not a <span> with a click handler. Agents follow links; they rarely guess what a styled box does when pressed.
  3. It's marked up as navigation. The W3C's ARIA Authoring Practices Guide describes the breadcrumb pattern: the trail sits inside a navigation landmark with a label, and the link to the current page carries aria-current="page". Screen readers rely on this, and so do browser agents that read the page's accessibility tree.
<nav aria-label="Breadcrumb">
  <ol>
    <li><a href="/">Home</a></li>
    <li><a href="/coffee/">Coffee</a></li>
    <li><a href="/coffee/espresso/">Espresso</a></li>
    <li><a href="/coffee/espresso/dark-roast-beans" aria-current="page">Dark Roast Beans</a></li>
  </ol>
</nav>

Use words, not icons, for each step. A house icon for "Home" needs an aria-label, or it becomes one of the unnamed links agents can't read. Keep the separators (the ">" or "/" between steps) in CSS or mark them aria-hidden="true", so they aren't read out as part of each name.

Hard to use

  • Trail drawn by JavaScript after load
  • Steps are styled spans with click handlers
  • A house icon with no name
  • Generic <div> with no landmark

Easy to use

  • Trail in the server-sent HTML
  • Every step is an <a href>
  • "Home" in words, or a labeled icon
  • <nav aria-label="Breadcrumb"> with aria-current
Same trail, different results. The visible design can be identical; what changes is whether an agent can read and follow it.

Add BreadcrumbList structured data

The visible trail is for people and browser agents. Structured data says the same thing in a form any agent can parse without reading your layout. Schema.org defines a BreadcrumbList as a chain of linked web pages, typically described by their URL and name and typically ending with the current page.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Coffee",
      "item": "https://northwind.example/coffee/" },
    { "@type": "ListItem", "position": 2, "name": "Espresso",
      "item": "https://northwind.example/coffee/espresso/" },
    { "@type": "ListItem", "position": 3, "name": "Dark Roast Beans" }
  ]
}
</script>

Google's breadcrumb documentation adds some practical rules:

  • A BreadcrumbList needs at least two ListItems, each with a position, a name and an item (the URL).
  • You don't need a ListItem for your domain, or for the current page. If you include the current page, it can leave out item.
  • Breadcrumbs should represent a typical path a person takes to the page, rather than mirror your URL structure.
  • If people can reach a page in more than one way, a page can carry more than one breadcrumb trail.

Generate the structured data from the same template as the visible trail, so the two never disagree. If the markup says "Espresso" and the page says "Coffee > Beans", an agent can't tell which is right. The same principle applies to all your markup; see product data that AI shopping agents can read.

Platforms often do this already. Many e-commerce themes and SEO plugins output BreadcrumbList for you. Before building anything, view the source of a product page and search for "BreadcrumbList". If it's there, check it matches the trail on screen and that it's in the HTML rather than added by a tag manager.

Keep the hierarchy shallow and logical

Breadcrumbs reflect your structure; they can't fix it. A trail like "Home > Shop > All > New > Sale > Misc > Beans" tells an agent nothing useful. A good structure for agents looks a lot like a good structure for people:

  • Few levels. Home, category, perhaps a subcategory, then the product. Every extra level is another page an agent has to load and another chance to lose the thread.
  • Category names people would use. "Espresso" and "Filter coffee", not "Collection A" or internal range names. Agents match the words in a shopper's request against the words on your pages.
  • Every category has a real page with its own URL. A category that only exists as a filter state or a menu panel can't appear in a breadcrumb, be linked to or be recommended. Readable URLs such as /coffee/espresso/ help people and agents see where they are, even though Google says it doesn't rely on URL structure to work out how a site is organized.
  • Every product is reachable by links. Google's guidance for online stores is to link from menus to category pages, from category pages to subcategories and from there to every product. Agents follow the same paths. See category and collection pages AI agents can browse.
  • One main home for each product. A product in three collections can show the trail of the collection a shopper came from, but pick one main trail for the structured data and the canonical URL. See canonical URLs and duplicate pages.
  • Home: links to every main category
  • Category: Coffee
  • Subcategory: Espresso
  • Product: Dark Roast Beans
Narrow quickly. A shallow structure gets an agent from the home page to any product in a few links.

The top of the structure matters most. If your home page doesn't link to your categories in plain HTML, agents that start there can't get down the tree at all. See link your key pages from the home page.

What AgentScore checks

AgentScore doesn't test breadcrumbs directly, but two of its Navigability checks cover the groundwork:

  • "Page has main and navigation landmarks" looks for a <main> and a <nav> (or their ARIA roles) on each page the scan renders. Both present passes, one missing warns, both missing fails. A breadcrumb trail inside its own labeled <nav> follows the same habit on every other page. In our study of 255 stores, this check fell short on 41% of them.
  • "Key pages are linked from the home page" checks that your home page links to a product page or the cart (or, for software companies, the pricing page) with ordinary links in the HTML. If it doesn't, the check warns. That's the top of your hierarchy.

Both run on the home page only. A clean result there doesn't prove your product pages carry breadcrumbs, so check a few product and category pages yourself.

Where to start

Most of this is a template change, done once for each page type.

Breadcrumb checklist

  • Visible trail on product and category pages, in the server-sent HTML
  • Real links for every step except the current page
  • Navigation landmark with aria-label="Breadcrumb" and aria-current on the last step
  • BreadcrumbList structured data that matches the visible trail
  • Category pages with their own URLs and plain names
  • Trails that mirror filters or internal range names
Six things to look for. Check them on one product page and one category page, then fix the template.

Try it this week: open a product page, view the source and search for "Breadcrumb". You want a <nav> with real links and a BreadcrumbList that names the same steps. If either is missing, ask your developer or platform admin whether your theme can turn it on.

For the other things agents need on every page, see buttons, links and forms agents can use.

← All articles Test your site with AgentScore →

Can AI agents use your site?

Get your free AgentScore in under a minute. No sign-up needed.