This website uses cookies

Read our Privacy policy and Terms of use for more information.

🔎 Focus: Crawling
🔴 Impact: High
🟢 Difficulty: Low

Sponsored by Ahrefs

Want to automate the grunt work?

Meet Agent A, the AI teammate with full access to your Ahrefs data. From fixing keyword cannibalization to shipping technical reports straight into Notion or Google Docs, it does the work you’d rather not.

E-commerce looked normal

A client came to us with a Shopify store that looked fine on paper. Canonical tags were in place everywhere. Google wasn't indexing duplicates. Every SEO checklist would have given this site a pass.

Then we pulled the crawl stats and found Googlebot spending real crawl budget hammering thousands of URLs that had no business being crawled at all. The site had around 300,000 pages in the XML sitemap, and Google found an additional 900,000 pages that it crawled but excluded from the index.

The tag that everyone thinks is a fix

Canonical tags tell Google which page to index. That's it. That's the whole job.

They don't tell Google to stop crawling the duplicate. They don't tell Google to stop wasting time on the canonicalized URL. A canonical tag is a note left on the door of a room Google has already walked into. It doesn't stop Google from walking in again tomorrow.

Google will come back to the canonicalized URLs and waste even more resources.

On this client's store, we found three separate versions of this same story playing out at once.

Three ways a Shopify store leaks crawl budget

The first was a parameter added by a recommendation app, showing up on hundreds of product URLs.

It created canonicalized pages with pr_prod_strat parameters

It created thousands of product URLs with pr_prod_strat parameters tacked onto the end. Every one of those parameterized URLs was a duplicate of the clean product page. Every single one had a canonical tag pointing to the product without those parameters. And Googlebot was actively crawling every single one, because the "you may also like" section was linking to the parameterized version instead of the clean one.

The second was almost identical, just from a different source. Shopify's own native sort tracking/position parameter, showing up on URLs from the internal search and filtered collection pages.

Same thing. Hundreds of URLs, actively crawled, dutifully canonicalized, still burning budget.

It created canonicalized pages with _pos parameters

The third was the strangest one, because the internal linking was already correct. Every current link on the site pointed to the clean product URL. But Google's index still held thousands of product pages with an old collection path baked into the product URL, a leftover from some earlier version of the site's structure. Nobody was linking to those anymore. Google just hadn't forgotten them yet.

https://www.domain.com/collections/collection-name/products/product-name

Three different causes. Same symptom. Same fix. Same Shopify limitations

  • We could rebuild the recommended product section, but we decided to just use a JS code to clean up the internal linking and stop feeding Google the bad URL with parameters. This solution works well only after JS rendering, but it is good enough.

  • Shopify doesn’t allow bulk/wildcard redirects, so we decided to just block the particular parameters and paths in robots.txt

What were the results?

  • The number of excluded pages in the Google Database dropped from 900,000 to 355,000

  • The portion of valuable indexable pages in the structure grew from 18% to 41% - more Google resources went to indexable pages

  • The traffic grew from 600-700 to 2,500-3,500 daily clicks

Huuuge traffic growth at the same time we cleaned the Google Database

That’s solid drop in Google Database man

What I actually check for now

At this point, when I look at a Shopify site, or honestly any ecommerce site with a decent product catalog, I start with, where is Google actually spending its crawl budget, and does that match where the real, current internal linking sends people.

Those two things drift apart more often than you'd expect, and usually for stupid reasons. An app adds a parameter nobody asked it to add. A native platform feature tracks something internally, and it leaks into crawlable URLs. A site restructure happens, and nobody thinks to check whether the old URL patterns are still sitting in Google's index somewhere, quietly still getting crawled.

None of these problems is staring you in the face. They don't break anything visibly. The site still works, the pages still load, the canonical tags still do their narrow job. That's exactly why they survive so long. Nothing about them looks broken from the surface.

The fix, once you find it, is almost always boring too. Fix the internal links. Redirect the old paths or block them. It's just work that requires actually looking at what's happening on the site.

Closing

I love working on e-commerce sites because the same principal applies to every single site. Remove, block, and redirect low-value pages and point Google to the real value on your site.

The real challenge is to understand where to look.

Is your site bloated with low-quality pages?

Reply to this email with “Bloat” and your domain.

I’ll take a look at your site and check if you should clean your site of pages that waste Google resources and destroy your traffic. technical SEO foundational improvements to make it grow for years without you even knowing it.

Seeeeee you soon 👋

oh that’s a human