# Internal linking for ecommerce catalogues

Hub pages, related products, breadcrumbs and descriptive anchors so Google can find more than your homepage.

- Date: 2026-08-15
- Category: SEO

Ecommerce internal linking is how a catalogue tells Google which pages matter, without asking the crawler to guess from the homepage and a sitemap. Hub collections, breadcrumbs, related products and descriptive anchors are the production version. This note is for Magento, Shopify, WooCommerce and custom Laravel shops where the menu looks complete and the crawl still dies in a corner of the tree.

I am Alan Vo. Eighteen years on storefronts taught me that merchandisers think in grids and Google thinks in links. Google’s [crawlable links documentation](https://developers.google.com/search/docs/crawling-indexing/links-crawlable) is blunt: a link is an `a` with an `href` to a crawlable URL. Carousels that only exist in JavaScript, “load more” without a paginated URL, and buttons that push filters with no href are not an internal linking strategy.

## Why ecommerce internal linking fails on large catalogues

Ecommerce internal linking fails on large catalogues when most SKUs are only reachable from a sitemap or a search box, and the visible links all say “Shop now”. Googlebot follows hrefs. Shoppers follow photos. The site can sell and still be a desert in the link graph.

Typical Magento and Shopify failures I still open:

- Homepage hero slides to campaign URLs that 404 after the sale
- Mega menu that lists 80 categories with the same parent name repeated
- Product cards whose only accessible name is an image
- Related products powered by an app that renders after load with no `<a href>`
- Breadcrumbs that skip the category the product is assigned to
- Footer of manufacturer links that point at faceted Magento URLs nobody wrote copy for
- Pagination as infinite scroll with no `?p=2` or `rel` path

Sitemaps are a hint. They are not a substitute for links. Google can discover a URL from a sitemap and still treat it as unimportant if nothing in the HTML graph points at it. On a 15,000 SKU Magento store that is most of the long tail.

Descriptive anchors matter because they are a ranking clue and an accessibility clue. “Read more”, “View”, and “here” waste both. The product name, the collection name, or the spec (“steel track for heavy curtains”) is the anchor. Image links need alt or adjacent text so the accessible name is not empty.

Facets confuse the graph. Magento layered navigation injects hundreds of links that look like internal linking and are actually crawl traps. I treat facet links as a separate policy in [Magento faceted navigation and crawl budget](https://alanvo.com/blog/magento-faceted-navigation/). The internal linking programme is hubs, products, breadcrumbs and a few editorial paths. It is not “every filter is a hub”.

![ecommerce internal linking research on a laptop with search results](../../images/blog/ecommerce-internal-linking-1.jpg)

## Why ecommerce internal linking still matters in 2026

Ecommerce internal linking still matters in 2026 because AI crawlers and Googlebot both walk hrefs, and catalogues got bigger while themes got more client-side. If the HTML of a collection does not list products as links, you are hoping for rendering. Hope is not a crawl strategy.

What changed is the mix of discovery. Sitemaps, RSS, and apps submit URLs. The link graph still decides which of those URLs look like part of the site. Orphan PDPs rank late or not at all. Orphan collections never earn the head queries.

Laravel and custom catalogues (bike builders, made-to-order) often have a second tree: the configurator. If the only path to a model is a JS builder with no crawlable model URL, you have a brochure and a tool, not a catalogue Google can index. Give models real URLs and link them from family hubs.

On-page copy without links is a dead end. A materials paragraph that never links to the collection for that material is a missed hub. I would rather have two descriptive links in the body than a 400-word blob and a generic “continue shopping”.

## How ecommerce internal linking should work in production

Ecommerce internal linking should work as a pyramid: home and a few hubs, collections that list products with named anchors, products that link back up and sideways to true relatives, breadcrumbs that match reality. Every indexable URL should have at least one crawlable HTML link from a page you already care about.

I draw the hubs first. Not 200 Magento categories. The 10 to 30 collections that have search demand and enough products. Those get menu placement, a block on the homepage that is actual links, and internal links from related guides.

Collections must list products in HTML. Magento list mode and Shopify collection templates usually do. Problems start with “view all” that never paginates, or with apps that replace the grid with a JS filter that removes hrefs until you interact. I view-source. If I cannot see product URLs, Google might not either.

Pagination needs crawlable next pages. `rel=next` is no longer a ranking system Google leans on, but page 2 still needs an href. Canonical rules belong with on-page SEO. Linking rules are: do not trap page 2 behind a button with no URL.

![Notebook outline for headings and title tags](../../images/blog/ecommerce-internal-linking-2.jpg)

Products link to:

- The primary category (breadcrumb and a line in the body)
- Two to five related SKUs chosen by merchandising or a sane affinity, with product names as anchors
- A size guide or spec CMS page when it exists, once, not in a loop

They should not link to every other SKU in the catalogue through a “customers also viewed” widget that is a screenshot in a blog post and a JS file in production.

Breadcrumbs: Home > Hub > Collection > Product. URLs in the trail must 200. Magento products in multiple categories should pick a primary for the crumb so you do not oscillate. Schema BreadcrumbList should match the visible trail.

Menus: keep them stable. A seasonal mega menu that drops the only link to a hub is how that hub falls out of the crawl. Put evergreen hubs in a footer column as backup, with real names.

Cross-links between sibling collections (“see also linen”, “see also thermal lining”) belong in HTML near the intro, not only as filter chips.

I use the same descriptive-anchor rule in [on-page SEO for ecommerce stores](https://alanvo.com/blog/on-page-seo-ecommerce/). Internal linking is on-page SEO with a graph.

For Magento, I strip footer auto-link blocks that dump every attribute option. That is not a hub strategy. That is a crawl bomb.

## Production checklist for catalogue links

1. Crawl the site logged out. List indexable products with in-degree zero from HTML (sitemap-only). Those are orphans.

2. Confirm collection templates output `<a href="product-url">` with the product name in the accessible name.

3. Confirm pagination URLs exist and are linked.

4. Fix breadcrumbs on a sample of PDPs, including products in two categories.

5. Replace “Shop now” in body copy with the destination name where it is a real hub.

6. Cap related products at a small set. Make them hrefs in the first HTML.

7. Remove or `noindex` facet link farms in footers.

8. Keep the main menu’s hub list versioned. Do not let a campaign overwrite it without a footer fallback.

9. Add two body links from each pillar CMS page into collections.

10. After a theme or Hyva swap, re-crawl. New templates love to drop breadcrumbs.

11. Check hreflang clusters still link to themselves and siblings. That is international internal linking.

![Product grid on a phone used for on-page SEO checks](../../images/blog/ecommerce-internal-linking-3.jpg)

12. Re-run the orphan report a month later. Merchandising will add SKUs that never get a category.

## What breaks ecommerce internal linking

Personalisation breaks it. A related-product module that only shows after a cookie means Google sees a different graph than a shopper. Serve a default related set in HTML.

A/B tools that rewrite menus break it. Bots get the control. You think the new IA is live.

Headless storefronts break it when the app router does not emit real anchors. SSR the collection grid.

Multi-store Magento breaks it when a product is assigned to website A and linked from a menu on website B.

Out-of-stock handling: if you 404 the PDP, inbound links rot. Prefer available-but-unavailable with a link to a successor SKU.

PDF catalogues and lookbooks that never link back to live product URLs are one-way streets.

I do not invent a traffic percentage for “we added related products”. I will say orphans started ranking after they gained a collection link, because that is how discovery works. Store-level conversion numbers I publish are elsewhere, on named work cases, not on a linking ticket.

## How to measure ecommerce internal linking

You measure ecommerce internal linking with crawl in-degree, Search Console coverage of product URLs, and whether collection landing pages actually pass click-through to SKUs. Analytics pathing is a bonus, not the first instrument.

Look at: products in sitemap vs products found via HTML crawl; impressions on SKUs that used to be orphans; crawl depth in Screaming Frog.

If collection pages have impressions and products in that collection have none, the grid may not be crawlable, or canonicals may point all products at the collection (a different Magento crime).

Watch crawl stats after removing facet footer links. Requests should move toward product paths.

## Related work on this site

Deep catalogues are where internal linking is the architecture. I shipped Laravel for [Orbea](https://alanvo.com/work/orbea/), a bike maker with a catalogue and MyO custom builds that still need model URLs, and Magento for [Arteriors](https://alanvo.com/work/arteriors/), luxury lighting and furniture where listing, product and inspiration pages have to connect without turning into a filter explosion. Those sites only work if hubs, products and configurator landings are real links, not only a sitemap dump.

## Ecommerce internal linking FAQ

### What is ecommerce internal linking?

Ecommerce internal linking is the crawlable HTML links between hubs, collections, products and a few guides, using descriptive anchors. It is how Google finds SKUs and how you say which collections are the centre of the site. Menus, breadcrumbs, grids and related products are the usual surfaces.

![Team reviewing a site map on a whiteboard](../../images/blog/ecommerce-internal-linking-4.jpg)

### Does ecommerce internal linking replace a sitemap?

Ecommerce internal linking does not replace a sitemap. Sitemaps help discovery. Links help importance and recurring crawl. Orphan products with only a sitemap entry are the first thing I fix on a large Magento or Shopify catalogue.

### Can JavaScript menus count as ecommerce internal linking?

JavaScript menus count as ecommerce internal linking only if they still render as `a href` in HTML Google can get, preferably in the first response. A menu that exists only after a click is a shopper tool, not a crawl path. Server-render the evergreen hubs.

### How many related products should ecommerce internal linking include?

Ecommerce internal linking should include a small related set, typically a handful of SKUs, with real names as anchors. Twenty “also viewed” tiles that load late do not help the graph and often hurt INP. Quality of hrefs beats quantity of widgets.



HTML version: https://alanvo.com/blog/ecommerce-internal-linking/
