You have a French store and you're launching an English version for the US. Everything seems to work — until you realize that when someone searches for your brand from France, Google shows the US page. Your French customers land on an English page, and conversion drops.
The culprit: badly configured hreflang. This tag tells Google which language or regional version to serve to whom. Done well, it supports international SEO. Done badly, it creates chaos with cross-redirects.
Better for large catalogs: it centralizes relationships in a single file. Easier to generate by script. This is the method recommended by Ecomptimize for catalogs with 5,000+ product pages.
Canonical says: "this is the reference URL for this content among several identical or similar URLs." It is used for deduplication.
Hreflang says: "these are the language versions of this content, each one is unique for its audience." It is used for localization.
Critical rule: hreflang points to a different URL (the version in another language). canonical points to a potentially identical URL (the same page or a variation with parameters).
A page should have both hreflang AND a canonical:
<!-- Canonical for this page -->
<link rel="canonical" href="https://example.com/fr/products/chaussure-derby" />
<!-- Language versions of this page -->
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/products/chaussure-derby" />
<link rel="alternate" hreflang="en-US" href="https://example.com/en-us/products/leather-derby-shoes" />
Fatal mistake: pointing the canonical of the EN version to the FR version ("canonicalizing translations"). Google reads that as "the EN version is a duplicate of FR to ignore" and does not index the EN page at all. SEO disaster.
hreflang="x-default" indicates which version to serve when no match is found. For example, a user in Romania who has neither FR nor EN-US nor EN-GB in their preferences — which version should be served?
Without x-default, Google chooses on its own. With x-default, you stay in control (typically the most generic English version).
Recommendation: always declare an x-default, ideally the generic English version.
Shopify Markets (since 2022) handles hreflang natively if you configure multiple markets with separate domains or subdomains. In most cases, no customization is needed.
Limits: Shopify Markets does not support every language/country combination with fine-grained control. For complex cases (10+ markets), use an app like Langify plus its manual hreflang module.
If you use a custom frontend (Next.js, Nuxt), generate hreflang server-side. On Next.js with next-intl, generation is automatic if you use /[locale]/... routes.
4 to 8 weeks for a clean implementation on an existing catalog. Google has to recrawl each page, validate bidirectional relationships, and adjust ranking by market. There is no immediate effect.
Hreflang works regardless of how the content was produced — human translator or AI. What matters is that pages are unique by locale (even if they are 80% similar with an honest translation), not where they came from.
Technically yes, but there is a risk if the difference is too minor. Google may treat the pages as duplicates without enough local value. Better option: one page with dynamic currency during navigation.
Yes, exactly like your product pages. Each translated article should reference its versions, and your blog hub should also reference localized hubs. See our 7-language editorial plan for the full process.