Fixing Internal Links To and From Product Pages
Product pages are where a shop makes its money, yet they are often the weakest-linked pages on the site.
They sit at the bottom of the category tree, reachable only through paginated listings, and the links that do reach them frequently point at the wrong address: a collection-specific path, a variant parameter or a filtered URL rather than the product itself. This guide covers the routes into and out of product pages: one clear breadcrumb path, links that always use the canonical product address, category listings that crawlers can page through, and editorial content that sends people to products.
Why product pages end up poorly linked
On a typical shop, internal links concentrate at the top. The homepage links to main categories, categories link to subcategories, and every page repeats the same menu. Products only receive links from the listing pages they appear on, plus whatever related-product blocks happen to include them. The Internal Link Analysis makes the pattern visible: it measures how many clicks each page sits from the homepage and counts links in and out of each page. For most shops the products are the deepest pages with the fewest incoming links.
Some of that is natural. There are many more products than categories, so each will receive fewer links. The trouble is the avoidable part:
- Links split across several addresses for the same product, so the product's links are spread across duplicates instead of reaching one page.
- Products only reachable through page 9 of a category, or through a "load more" button that crawlers do not press.
- Breadcrumbs that change depending on how a visitor arrived, or that skip the subcategory, so the product's place in the catalogue is unclear.
- Guides and blog posts that never link to products, even though they are often the pages that attract links from other sites.
Choosing which products to show in "related" and "frequently bought together" blocks is a separate job, covered in the product cross-links guide. Products with no links at all are covered in the orphan products guide. This guide deals with the structural routes that every product depends on.
One product, one address in every link
A product can often be reached at several addresses. Search engines usually consolidate them using the canonical tag, but every internal link to a non-canonical version is a link that has to be worked out rather than one that lands directly on the page you want.
| Platform pattern | Example | Link to |
|---|---|---|
| Shopify collection-aware path | /collections/boots/products/fellside-walking-boot | /products/fellside-walking-boot |
| Variant parameter | /products/fellside-walking-boot?variant=40211 | The product address, unless the link is deliberately for one variant |
| WooCommerce with category in the permalink | /shop/boots/womens/fellside-walking-boot/
and /shop/boots/fellside-walking-boot/ | The single address set by the primary category |
| Tracking parameters on internal links | ?utm_source=homepage-banner | The clean address; use analytics events for internal campaigns |
| Search or filter results linking with parameters | /products/fellside-walking-boot?_pos=2&_sid=a1b2 | The clean address where the theme allows it |
Shopify: the collection-aware link
Some Shopify themes build product links with the within filter, which produces the /collections/.../products/...
form so the breadcrumb can show the collection. The canonical tag on those pages points to /products/handle,
so every collection listing is linking to a duplicate. In the product card snippet, look for something
like the first line below and change it to the second:
<a href="{{ product.url | within: collection }}">{{ product.title }}</a>
<a href="{{ product.url }}">{{ product.title }}</a>
Check the theme's related-products and search templates for the same pattern. If you rely on the collection path to show a breadcrumb, use a fixed breadcrumb based on the product's main collection instead, as described below.
Internal campaign tracking
Adding utm_ parameters to links between your own pages creates extra addresses and, in
most analytics setups, starts a new session attributed to your own site. Track clicks on homepage banners
and promo blocks with analytics events instead, and keep the link itself clean.
Breadcrumbs and the primary category
A breadcrumb trail such as Home โบ Walking boots โบ Women's boots โบ Fellside walking boot gives every product a link back up to its subcategory and category, and gives those category pages a link from every product they contain. That upward flow is one of the most useful internal linking patterns a shop has, and it costs nothing once the template is right.
Problems start when a product sits in several categories. Some themes build the trail from the path the visitor happened to take, so the same product shows different breadcrumbs, or none at all when reached from search. Others pick whichever category was assigned first, which may be a seasonal sale category that disappears next month.
- Pick one primary category per product. It should be the most specific permanent category, not a sale or "new in" collection. On WooCommerce, Yoast SEO and Rank Math both let you set a primary category that their breadcrumbs use. On Shopify, a metafield holding the main collection is a common approach.
- Build the trail from that field, not the visit path. Every visitor and every crawler then sees the same breadcrumb.
- Include every level. Skipping the subcategory leaves it without the links from its own products.
- Make every crumb except the current page a real link.
Breadcrumb markup
Mark the visible trail up as a list, and add BreadcrumbList structured data that matches it exactly:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Walking boots", "item": "https://example.co.uk/collections/walking-boots" },
{ "@type": "ListItem", "position": 2, "name": "Women's walking boots", "item": "https://example.co.uk/collections/womens-walking-boots" },
{ "@type": "ListItem", "position": 3, "name": "Fellside walking boot" }
]
}
</script>
The structured data describes the trail; it does not replace the visible links. Crawlers follow the
<a href> elements in the page, so the breadcrumb must be real links in the HTML.
Category listings that crawlers can page through
Category pages are the main road into products. If a crawler cannot get past the first page of a category, every product beyond it depends on sitemaps and related blocks alone.
- Use real paginated links. Each page of a category should have its own address, such
as
?page=2, and be linked with ordinary<a href>links. Google has said it no longer usesrel="next"andrel="prev"as an indexing signal, so the links themselves are what matter. - Back up "load more" and infinite scroll. Buttons that fetch more products with JavaScript are fine for visitors, but provide the same products at paginated addresses with links a crawler can follow, and update the address as the visitor scrolls.
- Do not canonicalise every page to page one. Page 2 onwards list different products. Pointing their canonical at page one tells search engines to ignore them, and the products only listed there lose their route in.
- Think about page size. Showing more products per page, within reason for speed, shortens the path to the deepest products.
- Add subcategories when a category is huge. A 600-product category with 25 pages is better split into a few meaningful subcategories, each linked from the parent, so products sit two or three clicks from the category rather than twenty.
The fix, step by step
Step 1
Map how the analysis reaches your products
Run the Internal Link Analysis and filter the results to product pages. Note each product's click depth and number of incoming internal links, then sort by depth. Pick your twenty best-selling or highest-margin products and check them specifically. If key products sit five or more clicks from the homepage, or are only linked from one listing page, you have found the structural gap this guide fixes. Keep the list as your baseline for later comparison.
Step 2
Point every product link at the canonical address
Open a category page, a search results page and a product page, and check the
href of product links in developer tools. If they use collection-aware paths, variant parameters,
tracking parameters or category-dependent permalinks, change the card and related-product templates so
they output the canonical product address. On Shopify that usually means removing the within: collection
filter; on WooCommerce, setting a primary category so each product has one permalink.
Step 3
Give each product one breadcrumb path
Assign every product a primary category, choosing its most specific permanent
category rather than a sale or seasonal collection. Change the breadcrumb template to build the trail
from that field instead of the visitor's route, include every level from the top category down, and make
each crumb a real link. Add matching BreadcrumbList structured data. Every product then
links up to its subcategory and category in the same way on every visit.
Step 4
Make category listings crawlable to the last page
Check that each category's later pages have their own addresses and are reachable through ordinary links, not only through a load-more button or infinite scroll. Remove canonical tags that point page two onwards at page one. Consider showing more products per page, and split very large categories into subcategories so no product sits deep in a long run of pages. Confirm by disabling JavaScript and paging through one category to the end.
Step 5
Link to products from guides and brand pages
Review your buying guides, comparison pages, care guides and brand pages. Where a guide recommends a type of product, link to the specific products or the relevant subcategory with anchor text that names them. Brand pages should link to that brand's products or to a filtered listing. These pages often attract visits and links from other sites, so a few well-placed product links here can bring key products much closer to the rest of the site.
Step 6
Tidy the links that leave each product page
Look at every link a product page sends out: breadcrumb, brand, size guide, delivery and returns information, reviews, related products and footer. Make sure each points at a live, canonical address, and that shared information pages such as the size guide use one address rather than a copy per product. Remove links to discontinued products and empty categories. Keep the page focused on buying, with a small number of useful routes onward rather than dozens of repeated blocks.
Step 7
Recrawl and compare product depth and inlinks
After the changes are live and caches are cleared, run the Internal Link Analysis again and compare your key products against the baseline from step one. Click depth should have fallen for products that were buried in long categories, and incoming links should now land on canonical product addresses rather than duplicates. In Search Console, watch whether more product pages are indexed over the following weeks, and repeat the check after any theme change.
Linking into products from content
Editorial pages, such as buying guides, "how to choose" articles, care instructions and comparisons, are often the pages on a shop that other websites link to. They are also read by people close to a purchase. Both are reasons to connect them to products carefully.
- Link from the point of recommendation. A guide to choosing walking boots that says "for wet upland routes, a fully waterproof leather boot is the safer choice" should link that phrase to the relevant subcategory or to a named product.
- Prefer categories for general advice, products for specific picks. If the guide recommends a type, link to the subcategory. If it names a product, link to the product.
- Keep links current. Products are discontinued more often than guides are updated. When a product is removed, check which articles link to it and point them at its replacement or its category.
- Link back from products to guides where it helps. A short "How to choose the right size" link on a product page, pointing at your sizing guide, helps buyers and completes the loop.
For how to place links inside long articles generally, see the Internal Links Guide. Here the key point is simply that content should lead to products, not only to other content.
Platform notes
Shopify
- Product links in cards, search results and recommendation blocks come from theme snippets. Search
the theme for
within: collectionand review each use. - Breadcrumbs are not built in to every theme. If yours derives them from the collection in the address, switching to canonical links will remove them, so add a breadcrumb that uses a stored main collection.
- Collection pagination uses
?page=addresses. Check that your theme's pagination outputs real links, especially if it uses a load-more button.
WooCommerce
- If your product permalink base includes
%product_cat%, the category chosen for the address matters. Set a primary category in your SEO plugin so the permalink and breadcrumb are stable. - Check that the shop and category archives paginate with links, and that any infinite scroll plugin keeps paginated addresses available.
Custom and headless shops
- Make sure product links are rendered as
<a href>elements in the server-rendered HTML, not only as click handlers in a client-side app. - Generate product URLs from one function used everywhere, so cards, search, basket and emails all link to the same canonical address.
1. Why do my product links go to a collection address on Shopify?
Some Shopify themes build product links with the within collection filter, which creates an address that includes the collection so the page can show where the visitor came from. The canonical tag on that page points to the plain products address, so the listing is linking to a duplicate. Changing the product card and related snippets to use the plain product URL means every internal link lands directly on the canonical page, with no consolidation needed.
2. Which category should a product's breadcrumb show?
Choose one primary category per product: its most specific permanent category, such as women's walking boots rather than walking boots or a seasonal sale collection. Build the breadcrumb from that stored choice rather than the route a visitor took, so the trail is the same for everyone and for crawlers. Include every level from the top category down, and make each crumb except the current page a real link that points at the category's canonical address.
3. Do breadcrumbs actually help product pages?
They help in two ways. Visitors get a clear route back to the category and subcategory, which is useful when a product is not quite right. And every product page links up to its categories, so those category pages receive links from all their products, while the product's own place in the catalogue is made explicit. Adding matching BreadcrumbList structured data describes the trail to search engines, though the visible links are what crawlers follow.
4. Is infinite scroll bad for product discovery?
Not for visitors, but it can hide products from crawlers if the extra products are only loaded by scrolling or pressing a button. The fix is to make the same products available at paginated addresses, such as page two and page three, linked with ordinary links, and to update the address as the visitor scrolls. Test by switching JavaScript off in your browser and checking that you can still reach the last page of the category.
5. Should page two of a category be canonicalised to page one?
No. Later pages of a category list different products, so they are not duplicates of page one. Pointing their canonical tag at page one tells search engines to treat them as the same page, which can remove the only route to the products listed further down. Give each paginated page a self-referencing canonical, link the pages together with normal links, and consider splitting very long categories into subcategories so fewer products sit on deep pages.
6. How many links should a product page have?
There is no correct number. A product page needs its breadcrumb, the site navigation, links to shared information such as delivery and sizing, and a small set of genuinely related products. Problems appear when repeated blocks of recommendations, recently viewed items and promotions add dozens of links that distract from buying. Aim for a few clear routes onward that a shopper would use, and check that each link points at a live, canonical address.
7. What should happen to links when a product is discontinued?
Find every page that links to it, including buying guides, brand pages and related-product blocks, and point those links at the replacement product or the most relevant category. Then decide what the product page itself should do: keep it live with a clear note and alternatives if people still look for it, or redirect it to a close replacement. Avoid leaving links to a page that returns an error or redirects to the homepage.
The Internal Link Analysis maps every internal link across your crawled pages, measures how many clicks each page sits from the homepage, and counts links in and out of each page, including your products.
Open Internal Linking Fixes โ