Hreflang on 96 Shopify stores: what we found
We checked the hreflang tags on 96 Shopify stores, drawn at random from stores that publish tags in two or more languages, against Google's guidelines. Here is how often they were wrong, which mistakes came up most, and how we did it.
The short version
- 19% of stores had at least one error on the pages we checked (18 of 96). An error here means a rule Google states is broken, so some of that store's tags are likely ignored.
- The most common error was a canonical that disagrees with the tags (7 stores), usually a translated page that tells Google it's a copy of the main-language page.
- Product pages fared worse than home pages: 27% of the product pages we read had an error, against 14% of home pages.
- 6 stores printed two sets of hreflang tags on the same page.
- Every store used full addresses and valid codes. The easy part is usually right. What goes wrong is pages disagreeing with each other.
What we checked
For each store we read the home page and one product page, the first product in the store's own product feed, then fetched the alternate addresses their tags listed. The checks are the same ones our free hreflang checker runs, built from Google's documentation:
- Return links: if page A lists page B as an alternate, page B has to list page A back. Google ignores pairs that don't.
- Self-reference: each page lists itself among its own alternates.
- Valid codes: language codes from ISO 639-1, region codes from ISO 3166-1, such as
en-GB, noten-UK, with an optional script such aszh-Hans. - Full addresses: each alternate is a complete URL with
https://and the domain. - No duplicate codes: one address per language and region on a page.
- x-default: at most one, pointing at a page that exists.
- Canonicals agree: each alternate is the canonical version of its own page, not a page that points its canonical somewhere else.
- Alternates that work: no redirects, 404s or
noindexpages among the alternates. - One set of tags: the tags come from one source, not from two that print overlapping sets.
Errors break a rule Google states. Warnings, such as an alternate that redirects or a missing x-default, are worth fixing but don't make Google ignore the tags on their own.
What we found
| Problem | Kind | Stores | Share |
|---|---|---|---|
| Canonical disagrees with the tags | Error | 7 | 7% |
An alternate is marked noindex | Error | 6 | 6% |
| Two sets of tags on one page | Warning | 6 | 6% |
| An alternate redirects | Warning | 5 | 5% |
| One-way link: the alternate doesn't link back | Error | 4 | 4% |
| An alternate returns 404 or a server error | Error | 4 | 4% |
| One code points at two addresses | Error | 4 | 4% |
| x-default repeated or conflicting | Error or warning | 4 | 4% |
Tags outside the page's <head> | Error | 1 | 1% |
| The page doesn't list itself | Error | 1 | 1% |
Share is of the 96 stores. A store with several problems counts once in each row. No store had invalid codes or alternates without a full address.
Translations that call themselves copies
Five stores had translated or regional pages whose canonical points at the main-language page:
<!-- on https://yourstore.com/fr/products/linen-shirt --> <link rel="canonical" href="https://yourstore.com/products/linen-shirt">
The hreflang tags say the French page is the version for French speakers. The canonical says it's a copy of the English page. Google gets two contradicting instructions and can leave the French page out of French results. On Shopify this often comes from theme or app code that builds the canonical from the product's address without the language folder; Shopify's own canonical_url keeps it. The canonical guide covers how to find which one your store uses.
A related pattern showed up on three stores that list each colour as its own product. The colour pages name the main product as their canonical but still carry a full set of hreflang tags. Google expects hreflang tags on canonical pages, so tags on a page that calls itself a copy are likely to be ignored. Decide which page should be in search, and put the tags on that one.
Alternates that tell Google to stay away
Six stores listed alternates that carry noindex:
<!-- on https://yourstore.com/ --> <link rel="alternate" hreflang="es-PT" href="https://yourstore.com/es-pt"> <!-- on https://yourstore.com/es-pt --> <meta name="robots" content="noindex">
One tag sends Spanish speakers in Portugal to a page, and the page itself asks to be kept out of search. Often one of the two is left over: a market the store stopped selling in, or a language version hidden on purpose while its tags stayed. If the page should be found, take the noindex off. If it shouldn't, take it out of the tags.
Links to products that aren't there
On three stores, the product page listed an alternate in another market that returns 404:
<link rel="alternate" hreflang="nl-NL" href="https://nl.yourstore.com/products/linen-shirt"> <!-- https://nl.yourstore.com/products/linen-shirt returns 404 -->
This is what happens when a product isn't sold in one market but its tags still list that market. A 404 can't link back, so Google ignores the pair. Shopify's automatic tags left such products out in our own test, so this suggests tags written by a theme or an app. Hreflang Manager leaves them out too.
Six stores printed two sets of tags on the same page. Duplicate hreflang tags on Shopify covers how to find the second source.
How stores set up their markets
We sorted stores by where their alternates live, read from the addresses in their tags:
- Subfolders on one domain, such as
yourstore.com/fr: 73 stores. - A separate domain per market, such as
yourstore.fr: 13 stores. - Subdomains, such as
fr.yourstore.com: 9 stores. - A mix of these: 1 stores.
Stores using subdomains had errors more often in our sample (4 of 9, against 11 of 73 using subfolders), but nine stores are too few to say that subdomains cause more problems.
How we picked the stores
We started from the Tranco list (list V354N), a research ranking of the most visited sites on the web, and drew 25,000 sites from it at random. We requested each home page once: 16,986 answered, 761 of them were Shopify stores, and 224 of those published hreflang tags in two or more languages. We drew 100 of the 224 at random for the full check, and 96 of them had at least one page we could read.
Every request identified itself as a Goodkeel research crawler with a link back to this site, honoured robots.txt beyond the first home-page request, and the full checks ran at no more than five a minute across the whole study.
Limits
- Stores with tags only. We studied stores that publish hreflang tags. A store that sells in several languages and prints no tags at all isn't counted, so these numbers say how often tags are wrong, not how often they're missing.
- Bigger stores. Tranco ranks sites by traffic, so stores large enough to make the list are over-represented. Small stores may do better or worse.
- Two pages per store. A store whose home page and first product were fine could still have problems elsewhere, so the share of stores with problems is a lower bound.
- One moment. We checked each store once, on 3 November 2026.
- Pages we couldn't read. We read 91 home pages and 48 product pages. 19 stores don't publish the product list we used to pick a product. Some stores turn automated requests away (Shopify's bot protection can answer "too many requests" on the first try), so 8 home pages and 26 product pages stayed unreadable even when we tried again later. Another 7 product pages came back with no tags; checking by hand, at least one of those did have tags, so we left them out rather than count them as missing.
We don't name any store. Every example on this page uses a made-up domain and product.
Check your own store
Paste a product page into the free hreflang checker. It runs the same checks as this study, on any page of your store, with nothing to install. If you'd like your whole store checked every week and the tags managed for you, that's what Hreflang Manager does.
The guides cover the common fixes: translated URL handles, duplicate hreflang tags, language and region codes, and Shopify's automatic hreflang tags.
Sources
- Google Search Central: Tell Google about localized versions of your page.
- Le Pochat, Van Goethem, Tajalizadehkhoob, Korczyński and Joosen, "Tranco: A Research-Oriented Top Sites Ranking Hardened Against Manipulation", NDSS 2019. List used: V354N.