Technical SEO

Hreflang for Ecommerce: Multi-Currency, Variants, and Scale

By Alex··8 min read
Hreflang for Ecommerce: Multi-Currency, Variants, and Scale

Key Takeaways

  • Product catalog asymmetry (items available in some markets but not others) is the primary cause of orphan hreflang references in ecommerce
  • Pages with identical language but different currencies/pricing require region-specific hreflang codes (en-US vs en-GB vs en-AU) — language-only codes cannot distinguish them
  • Faceted navigation and pagination URLs should NOT carry hreflang annotations — only canonical product and category pages should
  • The XML sitemap method is effectively mandatory for ecommerce at scale — HTML link elements cannot maintain 20,000+ annotation relationships sustainably

An online retailer sells 5,000 products in four markets: US, UK, Germany, and France. That is 20,000 product pages needing hreflang annotations. Each product page references all four market versions — that is 80,000 annotation relationships. Then the German market drops 200 products due to compliance regulations. Those 200 German pages disappear, but the US, UK, and French pages still reference them. Eight hundred broken hreflang links appear overnight, silently. No error page. No user-visible break. Just Google progressively ignoring the annotations across the entire catalog.

Generic hreflang guides assume symmetric content: every page exists in every language. Ecommerce breaks this assumption constantly. Products launch in one market before others. Regional regulations remove items. Pricing structures differ. Seasonal catalogs rotate on different schedules. Hreflang for ecommerce requires handling this asymmetry at scale without generating thousands of broken references every time the catalog changes.

Regional Pricing Creates Same-Language Pages That Need Distinct Annotations

A common ecommerce pattern: the same product sold in the US, UK, and Australia — all English-speaking markets. The product description is near-identical. The difference: USD, GBP, and AUD pricing. Without hreflang, Google may consolidate these into a single indexed page (usually the highest-authority market), suppressing the others from local search results.

Language-only codes (hreflang="en") cannot solve this. They tell Google "this page is in English" but give no signal about which English-speaking market it targets. Region-specific codes are required:

<link rel="alternate" hreflang="en-US" href="https://example.com/us/product-name" />
<link rel="alternate" hreflang="en-GB" href="https://example.com/uk/product-name" />
<link rel="alternate" hreflang="en-AU" href="https://example.com/au/product-name" />
<link rel="alternate" hreflang="x-default" href="https://example.com/us/product-name" />

This applies beyond English. A store selling in France, Belgium, Switzerland, and Canada needs to distinguish fr-FR, fr-BE, fr-CH, and fr-CA — each with different VAT rules, shipping options, and potentially different product availability.

ScenarioWrong approachCorrect approach
Same product, different currencyhreflang="en" on all versions (Google consolidates them)Region-specific codes: en-US, en-GB, en-AU
Same language, different VAT/shipping infoSingle version with dynamic pricing (no hreflang)Separate URLs per market, hreflang with region codes
Same product, genuinely identical content across regionsRegion-specific hreflang (creates maintenance overhead for no benefit)Single canonical page, no hreflang — let Google serve it globally

The decision rule: if a user in Market A would be confused or unable to complete checkout on the Market B version (wrong currency, wrong shipping, wrong legal terms), the pages need separate hreflang annotations. If the pages are genuinely interchangeable, hreflang adds cost without benefit.

Catalog Asymmetry Generates Orphan References at Scale

The most damaging ecommerce-specific hreflang problem is catalog asymmetry — products that exist in some markets but not others. According to Google's documentation, hreflang annotations must point to live, crawlable pages. A reference to a 404 or redirected URL breaks the bidirectional chain.

Asymmetry sources in ecommerce:

  • Regulatory exclusions — products banned or restricted in specific markets (supplements, electronics with different safety certifications, alcohol)
  • Staggered launches — new products available in the primary market weeks before international rollout
  • End-of-life per market — products discontinued in one region while remaining active in others
  • Seasonal catalogs — winter collections live in the Northern Hemisphere while Southern Hemisphere markets show summer items

The fix is not to simply exclude missing products from hreflang clusters — you must also ensure that existing market pages do not reference the missing variant. This requires the hreflang generation system to check product availability per market before outputting annotations.

Implementation pattern for asymmetric catalogs:

// Pseudocode for hreflang generation
for each product:
  available_markets = get_live_markets(product_id)
  for each market in available_markets:
    page_url = build_url(product_id, market)
    hreflang_set = available_markets  // only markets where product exists
    output_annotations(page_url, hreflang_set)

This generates annotations only between markets where the product actually exists — no orphan references. The generation must run on every catalog update, not just at initial deployment.

Faceted URLs and Pagination Multiply Complexity Exponentially

Google's guidance is clear: hreflang annotations should reference canonical URLs. Faceted navigation URLs (filters for color, size, price range) and paginated category pages (page 2, page 3) are typically non-canonical — they either canonicalize to the base category page or are excluded from indexing entirely.

The multiplication problem: a category with 50 products, 5 color filters, 4 size filters, and 3 pages of pagination creates 60+ URL permutations per language. Across 4 languages, that is 240+ URLs — none of which should carry hreflang annotations because none are the canonical category page.

Rules for ecommerce URL types and hreflang:

URL typeHreflang?Reason
Canonical product page (/product-name)YesPrimary indexable page representing the product
Canonical category page (/category)YesPrimary indexable page representing the category
Faceted URL (/category?color=red)NoNon-canonical, should not be independently indexed
Paginated URL (/category?page=2)NoGoogle handles pagination through crawling, not hreflang
Search results page (/search?q=term)NoNon-canonical, dynamic content
Cart/checkout pagesNoUser-session-specific, not indexable

If your CMS automatically injects hreflang into every page template (including faceted and paginated URLs), override this behavior for non-canonical URLs. The hreflang generation should only fire when the current URL matches the page's canonical declaration.

For large catalogs, the XML sitemap hreflang method eliminates this problem entirely — the sitemap only lists canonical URLs, so faceted and paginated URLs never enter the annotation system. This is why the sitemap method is effectively mandatory for ecommerce sites with more than a few hundred products.

MendMySEO audits hreflang specifically for ecommerce patterns — flagging orphan references from catalog asymmetry, annotations on non-canonical faceted URLs, and missing region codes for same-language multi-market stores. Join the waitlist.

Frequently Asked Questions

Should I add hreflang to product pages that have only minor text differences between markets?

If the pages have different URLs, different pricing, or different availability information, add hreflang with region-specific codes. The "minor text difference" threshold is not about word count — it is about whether Google might consolidate the pages as duplicates. Different currencies alone justify separate hreflang annotations because a user landing on the wrong currency version cannot complete their purchase without confusion.

How do I handle hreflang for products that go out of stock in one market?

Temporarily out-of-stock products should keep their hreflang annotations intact — the page still exists and returns a 200 status. Only remove hreflang references when a product page is permanently deleted (returns 404 or 410) or redirected to a different page. For temporary unavailability, keep the page live with an "out of stock" notice and maintain the full hreflang cluster.

Do I need separate hreflang for mobile vs. desktop URLs in ecommerce?

If you use responsive design (same URL for mobile and desktop), no additional hreflang is needed — one annotation per language-region covers both device types. If you have separate mobile URLs (m.example.com), you need hreflang annotations on both the desktop and mobile versions, with each pointing to the correct mobile or desktop alternate in other languages. Responsive design eliminates this complexity entirely.

Can Shopify and WooCommerce handle hreflang automatically?

Shopify's built-in multilingual features (Shopify Markets) generate basic hreflang automatically for connected storefronts. WooCommerce requires plugins (WPML, Polylang, or TranslatePress) that generate hreflang for translated content. Both handle symmetric catalogs well. Neither automatically resolves catalog asymmetry — if a product exists in your US store but not your German store, the default hreflang output from these platforms will still reference the non-existent German URL. Manual configuration or custom development is required for asymmetric catalogs.

Should my sitemap separate hreflang annotations by product type or market?

Structure your hreflang sitemap by page type (products, categories, informational pages) rather than by market. Each sitemap entry contains ALL market variants for that URL — splitting by market forces Google to reconcile annotations across multiple sitemap files, increasing the chance of processing delays. Keep all language alternates for a given URL in the same sitemap file, limited to 50,000 URLs per file.