Taming Shopify’s Messy URLs

Shopify generates a product URL that looks clean at first glance: /products/blue-running-shoes. The problem is that the same product often lives at several addresses at once. Add it to a collection and Shopify will happily serve it at /collections/mens-shoes/products/blue-running-shoes as well. Both paths resolve, both return a 200 status, and both look like separate pages to a crawler that doesn’t know any better.

Taming Shopify's Messy URLs

This isn’t a bug. It’s the platform’s default routing behaviour, and it quietly creates crawl and indexing headaches on almost every store that uses collections the way they were designed to be used.

Where Duplicates Come From

The main culprit is the collection prefix. Any product reachable through a collection gains a second, third, or tenth URL depending on how many collections it belongs to. A shoe that appears in “New Arrivals”, “Men’s Shoes”, and “Sale” can technically be reached through four different addresses, all showing identical content.

Shopify handles the most obvious version of this with a canonical tag that points every collection-prefixed URL back to the bare /products/ version. That helps, but it isn’t a complete fix. Crawlers still have to fetch each variant before they read the canonical, which spends crawl budget on pages you never wanted indexed in the first place. On a large catalogue, that adds up fast.

Tags create a similar mess. Filtered collection pages like /collections/shoes/red or URLs carrying ?sort_by= and other query strings can spawn a huge number of thin, near-identical pages. Shopify’s default tag pages in particular tend to be crawlable and indexable unless you take steps to rein them in.

Fixing Collection Paths

The most reliable habit is to always link to the canonical product path. When you build navigation, internal links, and related-product blocks, point them at /products/handle rather than the collection-nested version. Search engines lean heavily on your internal linking to decide which URL is the real one, so being consistent internally does more good than any single tag.

For faceted navigation and sort parameters, the cleanest approach is to keep those variants out of the index entirely. That usually means a combination of rel="canonical", careful use of your robots.txt (which Shopify now lets you edit through robots.txt.liquid), and “noindex” directives on the parameter-heavy pages that add no unique value. Getting the balance right takes some judgement, and store owners who don’t want to experiment on a live catalogue often reach the point where hiring a Shopify SEO specialist is the sensible move rather than guessing at Liquid edits. A misplaced noindex rule can hide pages you actually wanted found.

Tag pages deserve a decision, not neglect. If a tag-based landing page genuinely serves shoppers, treat it as a real page with unique copy and let it be indexed. If it exists only because Shopify created it, block it. Leaving hundreds of auto-generated tag URLs open to crawling is the single most common way stores dilute their own crawl efficiency.

Guiding the Crawlers

Once the duplicates are under control, the job shifts to steering crawlers toward the pages that matter. Shopify produces an XML sitemap automatically at /sitemap.xml, and it only lists canonical URLs, which is genuinely useful. Submit it in Google Search Console and check the coverage report periodically to see which pages are actually being indexed versus discovered-but-not-indexed.

Site architecture matters as much as any tag. A flat, logical structure where every important product sits within a click or two of the homepage helps crawlers reach your inventory without wading through endless filtered variants. Deep, tangled category trees slow discovery and bury newer products.

Keep an eye on the crawl stats over time. A sudden spike in crawled URLs, especially ones with query strings, is usually a sign that a new app or theme change has started generating fresh duplicates. Catching that early saves you from a slow, invisible erosion of crawl efficiency.

Start with one concrete task this week: open Search Console, sort your indexed pages by URL pattern, and flag every collection-prefixed or parameter-laden address that shouldn’t be there. That list is your fix-it roadmap.