Breadcrumb SEO means giving every category and product page a visible trail of links to its parent pages, such as Home › Kitchen Appliances › Coffee Makers › Drip Coffee Makers, and describing that trail with BreadcrumbList structured data. The trail gives shoppers a one-click way up the catalog, gives crawlers consistent internal links to your category pages, and lets Google show the path in desktop search results instead of a raw URL.
In an online store, the breadcrumb is generated from the category tree, so its quality is the tree's quality. A shallow tree with clear names and one primary category per product produces clean trails on thousands of pages at once. A messy tree produces trails that change from visit to visit, point to sale collections or show a different path in the markup than on the page. This guide covers the markup and the platform behavior, and spends most of its time on the catalog decisions that produce good breadcrumbs.
What breadcrumbs change in Google Search, and what they do not
Google's breadcrumb structured data documentation describes a BreadcrumbList of at least two ListItem entries, each with a position, a name and an item URL. Google recommends breadcrumbs that represent a typical user path to the page instead of mirroring the URL structure, and it does not require a crumb for the home page or for the page itself.
Where the trail appears has changed. On 23 January 2025, Google began rolling out a change that removed breadcrumbs from mobile search results in all languages and regions, because the path was cut off on small screens; mobile results now show the domain only. Desktop results still show the domain followed by the breadcrumb path, and Google said sites using breadcrumb markup did not need to change anything. The breadcrumb report in Search Console and the Rich Results Test still work.
Breadcrumbs are not a ranking factor on their own. Their search value comes from links. Google's guidance on ecommerce site structure says Google generally does not read a site's structure from its URLs but from the links between pages, and recommends linking from menus to categories, from categories to subcategories and from there to every product. A breadcrumb on every product page adds a link to its category and each parent above it, which keeps category pages well linked across the whole catalog.
Hierarchy, attribute and history breadcrumbs in a store
Three kinds of trail show up on ecommerce sites. Only one of them belongs in structured data.
Three breadcrumb types compared
| Hierarchy (location) | Home › Coffee Makers › Drip Coffee Makers | The category tree | Yes | Every category and product page |
|---|---|---|---|---|
| Attribute (filter) | Drip Coffee Makers › Black › 12 cups | Filters the shopper applied | No | Removable filter chips on listing pages |
| History (path) | Back to results | The shopper's own session | No | A link next to the hierarchy trail on product pages |
Usability research supports using two of them together. In a Baymard Institute benchmark of 50 large ecommerce sites published in 2013, 45% offered only one type of breadcrumb and 23% had none. Baymard's recommendation was a hierarchy trail with a history-based "Back to results" link appended, so shoppers who filtered a list can return to it with their filters intact, while shoppers who landed from search can still move up a level.
Building the trail from the category tree
A breadcrumb is only as stable as the category it points to. Before touching templates or markup, check the tree itself.
- Depth: two to four levels below the home page is enough for most catalogs. A trail like Home › Kitchen › Small Appliances › Coffee › Coffee Makers › Drip › Programmable is long on desktop and adds levels nobody browses.
- Names: use the words shoppers search for (Drip Coffee Makers, not Filter Brewing Equipment), keep them short, and use one spelling and casing everywhere. The crumb label is the category name, not its SEO title.
- URLs: every crumb except the last links to the canonical, indexable URL of that category. Never link a crumb to a filtered, sorted or paginated URL.
- No dead ends: a category with no products or a noindex tag should not appear in a trail. Merge empty branches before you publish them.
- Seasonal groups stay out: Gifts Under $100, Fall Sale and New Arrivals are collections for merchandising, not levels in the hierarchy.
For background on designing the tree itself, see our product taxonomy guide. The breadcrumb is one of the places where a weak taxonomy becomes visible to every visitor.
Choosing one primary category for products in several categories
Most stores assign products to more than one category, and that is fine for browsing. The breadcrumb needs one path, though, and if you do not choose it, the platform or theme will, often by taking whichever category comes first in a list. The result is a coffee maker whose trail says Home › Fall Sale on one page view and Home › Gifts on the next.
Pick the primary category with fixed rules, so the choice is the same for every product:
- Choose the deepest permanent category that describes what the product is (Drip Coffee Makers), not who it is for or what promotion it is in.
- Never choose a sale, seasonal, brand or "new" collection as primary.
- If the product URL contains a category path, the primary category and the URL path must match.
- Keep the primary category stable. Changing it changes the breadcrumb on the page and in the markup, and on path-based URL setups it can change the URL as well.
- Make the product's category in Google Merchant Center or your feed agree with the primary category, so the feed and the page describe the same thing.
How Shopify, WooCommerce and Magento build product breadcrumbs
Each platform resolves the multi-category problem differently, and none of them asks you which category is primary by default.
Shopify: collections without a tree
Shopify has no category hierarchy in its data model. A product has one product category from Shopify's Standard Product Taxonomy, used for tax and channels, and belongs to any number of collections. A collection can include other collections as sources (nested collections), but that merges product lists; it does not give a product a parent path. Breadcrumbs therefore come from the theme or an app. When a shopper reaches a product from a collection page, the theme can build the trail from that collection if product links use the Liquid within filter, which produces URLs like /collections/coffee-makers/products/brewline-12-cup. Shopify's own documentation warns that these URLs duplicate the product page and to consider the SEO implications; standard themes still point the canonical tag to /products/brewline-12-cup. A shopper who arrives from Google has no collection context, so the theme shows a short trail or picks a collection itself.
WooCommerce: the first category in a sorted list
WooCommerce's breadcrumb class builds the product trail from Home, the shop page (only when your product permalink base contains it), the ancestors of one product category, that category and the product. When a product has several categories, it sorts them by parent term ID in descending order and takes the first. That puts a subcategory ahead of a top-level category, but which subcategory wins depends on database IDs, not on your intent, unless a developer overrides it with the woocommerce_breadcrumb_main_term filter. When the breadcrumb is rendered, WooCommerce's structured data class turns the same trail into BreadcrumbList markup. SEO plugins such as Yoast SEO add a primary category field that decides the breadcrumb instead; if you use one, make sure only one plugin prints breadcrumb markup. Our WooCommerce SEO guide covers the related permalink settings.
Magento and Adobe Commerce: the category the shopper came from
In the Luma theme, product page breadcrumbs are built in the browser by breadcrumbs.js, which looks for a category in the product URL or in the referring page and matches it against the navigation menu. A shopper who opens the product from a category gets the full path; a shopper who lands from a search result gets Home › Product. Luma's breadcrumb template prints plain HTML without BreadcrumbList markup, so structured data comes from your theme or an extension. By default, Magento leaves the category path out of product URLs, which avoids duplicate product URLs; our Magento SEO guide covers that setting and the canonical tag.
Worked example: a drip coffee maker from category path to JSON-LD
Take a fictional store, example.com, selling the Brewline 12-Cup Programmable Drip Coffee Maker with a thermal carafe. The product is assigned to three categories: Drip Coffee Makers (under Kitchen Appliances › Coffee Makers), Gifts Under $100 and Fall Sale. Applying the rules above, Drip Coffee Makers is the primary category, and the product URL is /products/brewline-12-cup-thermal-drip-coffee-maker without a category path.
The visible trail on the product page reads Home › Kitchen Appliances › Coffee Makers › Drip Coffee Makers › Brewline 12-Cup Programmable Drip Coffee Maker. The JSON-LD in the page head is one object with "@context": "https://schema.org", "@type": "BreadcrumbList" and an itemListElement array of four ListItem objects. Each row below is one of those objects.
BreadcrumbList for the Brewline coffee maker, item by item
| ListItem | 1 | Kitchen Appliances | https://example.com/kitchen-appliances |
| ListItem | 2 | Coffee Makers | https://example.com/kitchen-appliances/coffee-makers |
| ListItem | 3 | Drip Coffee Makers | https://example.com/kitchen-appliances/coffee-makers/drip |
| ListItem | 4 | Brewline 12-Cup Programmable Drip Coffee Maker | (omitted: the current page) |
Three details make this markup reliable. The names match the visible crumbs character for character. Every item URL is the canonical URL of an indexable category page, returning 200, with no parameters. And the same trail appears whichever collection the shopper came from, because it is generated from the primary category, not from the session. Google also accepts several BreadcrumbList objects on one page for content with more than one real path, but for products a single primary path is easier to keep consistent. Validate the page in the Rich Results Test, then watch the breadcrumb report in Search Console after the next crawl. Product markup for the same page is covered in our product page SEO guide.
Breadcrumb HTML for shoppers and screen readers
The JSON-LD is for Google; the visible trail is for people, and it has its own rules. The W3C ARIA Authoring Practices breadcrumb pattern puts the trail inside a navigation landmark (a nav element) labeled with aria-label, for example "Breadcrumb", and sets aria-current="page" on the link to the current page. If the last crumb is plain text instead of a link, aria-current is optional.
- One position on every template: below the main menu and above the H1, on category and product pages alike, so shoppers learn where to look.
- Crumbs in an ordered list: each crumb a list item, each parent a link, the current page last and not linked.
- Separators drawn with CSS: a › typed between the links gets read aloud between every crumb by some screen readers; a CSS pseudo-element keeps it visual.
- A short version on phones: long trails wrap into three lines on a narrow screen. Many stores show only a link to the parent (‹ Drip Coffee Makers) on mobile and the full trail from tablet width up. Keep the full trail in the HTML and the JSON-LD so the markup does not change by device.
Breadcrumbs on filtered URLs, sorted lists and canonical tags
Faceted navigation creates thousands of URL variations of a category page, and breadcrumbs should ignore almost all of them. On a filtered URL such as /kitchen-appliances/coffee-makers/drip?color=black&capacity=12-cup, the hierarchy trail stays exactly the same as on the unfiltered category: the filters are shown as removable chips, not as extra crumbs and not in the markup. The rules for which filter pages to index are in our faceted navigation SEO guide.
The exception is a filter combination you have deliberately turned into a landing page, such as Thermal Carafe Coffee Makers with its own static URL, unique copy and a self-referencing canonical. That page is part of the hierarchy and gets a trail ending in its own name. A few more rules keep breadcrumbs and canonicals in line:
- Breadcrumb links on page 2, 3 and further of a category point to the category's first page, never to another paginated URL.
- A product reachable through several URLs (a collection path on Shopify, a category path on Magento) carries the same breadcrumb markup on all of them, and its canonical points to the single product URL.
- Never link a crumb to a URL that is noindexed, redirected or canonicalized elsewhere; crawlers follow those links on every product page.
- If you translate the store, each language version gets crumbs in its own language that link to category URLs in that language.
Our technical SEO guide for ecommerce covers crawl paths and index rules per template in more depth.
Auditing breadcrumbs across a catalog
A breadcrumb audit takes an afternoon with a crawler that extracts structured data and a category export. Work through these checks once, then repeat them after every theme or category change.
Ecommerce breadcrumb audit
Clean category data behind every trail
Most breadcrumb problems start in the product data: products in no category, products assigned only to a top-level parent, ten near-identical categories and no record of which category is primary. WISEPIM does not render your storefront or print breadcrumb markup; your theme or SEO plugin does that. What it handles is the data the breadcrumb is built from. You can manage the category tree with nesting and product counts per branch, find empty categories and products sitting on a parent, set a primary category for many products at once, and let AI categorization assign categories from your own tree, which is 95%+ accurate. AI categorization also marks its first choice as the primary category, so review those picks against the rules above.

