Quick answer: add one row per language version, generate the tag block, and paste the SAME block into every page in the set. The reciprocity check below is the part most implementations get wrong: a cluster only works when every URL lists every other URL, including itself.
Hreflang tag generator — free, with reciprocity check
The one mistake that breaks most implementations
An hreflang cluster is a mutual claim. Google accepts it only when every URL in the set names every other URL — including itself. Miss the self-reference, or list a page that does not list you back, and the entire annotation is discarded silently. There is no error anywhere; the pages simply keep competing.
So the test is not "did I add hreflang tags". It is "does every page in this set carry the identical block". That is why the tool above generates one block to paste everywhere rather than a different block per page.
Language code, or language and region?
| You publish | Use | Who gets it |
|---|---|---|
| One French page for all French speakers | fr |
Every French speaker, anywhere |
| Different prices/stock for France and Canada | fr-FR and fr-CA |
Only those two markets |
One French page, tagged fr-FR |
fr-FR |
France only — Canada falls to x-default |
That last row is the trap. Narrowing the code without publishing the other regions does not make the page more relevant to France; it makes it invisible to everyone else who speaks the language. Start broad and split only when the content genuinely diverges.
x-default
x-default is the fallback for searchers you have no version for. It is commonly the English page, but that is a convention rather than a rule — a language-selector page is equally valid, and on a site whose primary market is not English, the primary-market page is the honest choice.
Canonicals and hreflang together
Each language version must canonicalise to itself. Pointing the French page's canonical at the English URL tells Google the French page should not be indexed at all, which undoes the entire cluster. The two signals answer different questions: canonical answers "which of these near-identical URLs is the real one", hreflang answers "which of these different-language pages suits this searcher".
There is a further condition that is easy to state and easy to violate: a page may only self-canonicalise if it genuinely carries translated content. A locale URL serving the English page under its own canonical is a duplicate wearing a language tag, and it is the most common way a multilingual rollout makes a site worse rather than better.
Verifying it worked
Search Console's International Targeting report lists hreflang errors including "no return tags" — the reciprocity failure above — against real crawls of your live pages. A snippet validator cannot see that, because reciprocity is a property of the set, not of any one page.
More on the Shopify specifics in Shopify hreflang.
Frequently asked questions
What does hreflang actually do?
It tells Google that several URLs are the same page in different languages or regions, so the right one is shown to the right searcher instead of the versions competing with each other. It is a signal about which version to SERVE, not about which to rank — hreflang will not make a page rank where it otherwise would not.
Why must hreflang be reciprocal?
Google treats an hreflang cluster as a claim that a group of URLs belong together, and it only trusts the claim when every member confirms it. If the English page lists the French one but the French page does not list the English one back, the annotation is unconfirmed and Google discards the whole set. This is the single most common reason a correct-looking implementation does nothing, which is why the checker in this tool tests it explicitly.
What is x-default for?
x-default names the page to serve when no language version matches the searcher. It is not "the English version" by definition — it is the fallback, typically a language selector or your primary-market page. It is optional, but without it a searcher whose language you do not publish gets whichever version Google guesses.
Should the code be a language or a language and region?
Use the bare language code unless you genuinely publish different content per region. "fr" serves every French speaker; "fr-CA" only serves French speakers in Canada, and if that is your only French page, French speakers in France fall through to x-default. Add a region only when prices, stock or shipping actually differ.
Where do the tags go?
Three placements are valid and equivalent: <link> elements in the <head>, an HTTP Link header, or xhtml:link alternates inside your XML sitemap. Pick ONE. Two sources that disagree is worse than one source that is slightly incomplete, and mixed implementations are a common source of silent failure.
Does hreflang fix duplicate content?
Partly. It stops near-identical language versions from being treated as duplicates of each other, which is its main job on a translated site. It does nothing for duplicates within one language — for that you need canonical tags. Note that each hreflang version should canonicalise to ITSELF, not to the English original; a cross-language canonical tells Google to drop the page entirely.
All free tools
SEO Title Generator & Checker
Generate SEO titles from your keyword and check any title's character count, pixel width, and keyword position.
Meta Description Generator & SERP Preview
Generate high-converting meta descriptions and preview how your page looks in Google.
Keyword Density Checker
Paste any text and see keyword density, top 1–2–3-word phrases, and stuffing warnings.
Robots.txt Generator (AI-Crawler Aware)
Generate a correct robots.txt in seconds.
LSI & Related Keyword Generator
Generate related keywords, question keywords, and commercial long-tails from any seed term.
Image Alt Text Generator & Checker
Build descriptive, SEO-friendly alt text for product images and check existing alt text for length, redundancy, and stuffing.
Googlebot Simulator — See What Google Sees
Fetch any URL with Googlebot's user agent: status code, redirects, title, meta robots, canonical, X-Robots-Tag, H1s, and an indexability verdict.
Schema markup generator
Generate valid JSON-LD schema free: Product, FAQPage, BreadcrumbList, LocalBusiness and Article.
UTM builder
Build consistent UTM-tagged campaign URLs free.
URL slug generator
Turn any title into a clean, lowercase, hyphenated URL slug.
Readability checker
Paste text and get Flesch Reading Ease, Flesch-Kincaid grade level, sentence length distribution and the specific sentences that are dragging the score down..
SERP preview tool
Preview how a title, URL and meta description will render in Google on desktop and mobile, measured in pixels rather than characters so truncation is accurate..
SEO ROI calculator
Estimate what a ranking improvement is worth: search volume, position-based CTR, conversion rate and order value, plus a payback period on your SEO spend..
Open Graph generator
Generate Open Graph and Twitter card meta tags with a live preview of how the link will look when shared on Facebook, LinkedIn, X, WhatsApp and Slack..
SEO report generator
Generate an on-page SEO report for any URL: title and meta lengths, headings, canonical, schema types, image alt coverage, links and indexability, scored..
Related guides
Run this across your whole catalog
RankEngine applies and verifies these fixes on every product in your Shopify store — automatically.
Install RankEngine free