eCommerce SEO Technical SEO Shopify Architecture

492K non-indexed URLs. The problem was structural.

I audited a multilingual Shopify store where Google was discovering far more URLs than the site actually needed for organic search.

The analysis connected indexation data with duplicate product paths, URL parameters, pagination, crawl behavior, internal linking and hreflang to identify the template-level causes behind the excess URL footprint.

Technical SEO Snapshot
The main structural issues found in the audit
Case Study
URL Proliferation
492K non-indexed URLs versus 37.4K URLs intentionally submitted in sitemaps
Duplicate Product Paths
Collection-based product URLs multiplied alternate paths to the same products
Crawl Waste
31% of sampled crawl activity was spent on JSON resources instead of HTML pages
Multilingual Consistency
Hreflang, pagination and canonical URL patterns were not consistently aligned
JSON share of crawled resources 31%
Primary focus: Crawl & Indexation
37.4K
URLs intentionally submitted through the sitemap
45.9K
URLs already indexed by Google
492K
Non-indexed URLs exposing structural URL proliferation
31% JSON
Share of sampled crawl resources spent on JSON
From URL sprawl to controlled architecture

Google was crawling the system the site generated — not the site the business intended.

The sitemap contained 37.4K intended URLs, while Google had discovered hundreds of thousands more. The gap came from repeatable Shopify URL patterns, not from one isolated indexation issue.

Before Expanding URL Footprint
Pattern State Impact
/collections/…/products/… Duplicate More URLs
?variant / tracking params Crawlable Expansion
?page=1 Duplicate Extra crawl
JSON resources 31% crawl Waste
Target Controlled Search Architecture
Layer Rule Target Action
Products 1 URL Canonical path Consolidate
Parameters Limit Crawl footprint Restrict
Pagination Clean Page-one URL Normalize
Internal links 200 Final URLs Direct

The goal was not to index more URLs. It was to reduce unnecessary URL generation and align crawling, internal links, canonicals and hreflang around the pages the store actually wanted Google to rank.

”’
The technical diagnosis system

The URL count was a symptom. The architecture was the cause.

I compared the store’s intended search inventory with what Google had actually discovered, then traced the gap back to repeatable Shopify rules rather than treating hundreds of thousands of URLs as isolated errors.

01

Measure the gap

Compare sitemap inventory with discovered, indexed and excluded URLs.

GSC + sitemap
02

Find repeating generators

Group collection paths, parameters, pagination and other recurring URL patterns.

URL pattern analysis
03

Validate crawl & signals

Check crawl composition, internal links, canonicals and hreflang for conflicting signals.

31% JSON · 301/404 links · multilingual signals
04

Prioritize template fixes

Convert the diagnosis into changes that stop recurrence and concentrate signals around priority URLs.

Developer roadmap
Diagnosis rule

Fixing URLs one by one would not solve a template-level problem. The leverage came from changing the rules that kept generating duplicate paths, crawl waste and conflicting search signals.

Finding 01 · Product URL architecture

One product could exist under multiple crawlable URLs.

Shopify collection paths exposed alternate URLs for the same products. Across multiple languages, the same structural pattern multiplied the crawlable footprint and split internal signals across unnecessary paths.

Problem Duplicate product paths
Primary /products/{product-handle} Canonical
Alternate /collections/.../products/... Duplicate

The alternate collection URL added no unique search value but still expanded crawling and internal-link complexity.

Target One search URL per product
  • 01 Keep /products/{product-handle} as the canonical product path
  • 02 Consolidate collection-based product duplicates into the canonical URL
  • 03 Point product cards, listings and widgets directly to canonical 200 URLs
  • 04 Align sitemap and hreflang with the same canonical product architecture
Architecture rule

One product should have one primary search URL. Category context can stay in navigation and breadcrumbs without creating additional crawlable product paths.

Finding 02 · Crawl efficiency

Parameters, pagination and JSON were expanding the crawl workload.

The excess footprint came from repeatable template rules rather than isolated URLs: query parameters, duplicate first-page pagination and non-HTML resources were all consuming crawl attention without adding equivalent search value.

8 parameter patterns

Query-string expansion

Tracking and product parameters created alternate crawlable URLs without creating new organic landing-page value.

Scope Template level Restrict
?page=1 duplicate

First-page duplication

The clean category URL already represented page one, so a second crawlable ?page=1 version added unnecessary duplication.

Target Clean URL Normalize
31% JSON crawl share

Non-HTML crawl consumption

A material share of sampled crawl activity was going to JSON resources instead of priority HTML pages.

Target Priority HTML Reduce
Crawl rule

The objective was not to block Google blindly. First stop generating unnecessary URL variants where possible, then restrict crawling where those resources add no public search value.

Case Study FAQ

Questions Behind the Technical Decisions

A few practical details behind the highest-impact recommendations.

Did 492K non-indexed URLs mean those pages should all be indexed?

No. The problem was not that Google refused to index 492K valuable pages. Much of the discovered inventory came from repeatable technical patterns: alternate product paths, parameters, redirects, 404s and duplicates. The priority was to reduce unnecessary URL generation and concentrate crawl and ranking signals around useful canonical pages.

Why were collection-based product URLs a problem if canonical tags existed?

Canonicals help consolidate signals, but they do not stop the site from generating, crawling and internally linking to alternate product paths. The recommended model was one canonical product URL, with internal links, sitemap entries and hreflang aligned to that same destination.

Why did 31% JSON crawl share matter?

JSON represented a material share of sampled crawl activity while those resources were not priority organic landing pages. The recommendation was not to block Google blindly, but to reduce unnecessary JSON crawling where it added no public search value and keep more crawl attention on useful HTML.

How were the fixes prioritized for implementation?

Priority went to repeatable rules with the largest structural impact: consolidate duplicate product URLs, control parameters and pagination, reduce unnecessary JSON crawling, and point internal links directly to final 200 URLs. Hreflang and other supporting signals were then aligned with the corrected architecture.

Scroll to Top