Quick answer: paste a URL and see every hreflang alternate it declares, whether it names itself, whether x-default is present, and whether any code is malformed.
hreflang checker — validate language alternates
The rule that breaks most implementations
hreflang is not a per-page tag. It is a cluster, and every member has to agree on the membership. If your French page lists the English one as an alternate, the English page must list the French one back. One-directional hreflang is discarded.
That is why this tool checks one page and then says so explicitly. It can prove that this page has done its half. It cannot prove the cluster is sound, because that requires fetching each alternate and confirming the return reference.
Self-reference is not optional
Every page in a cluster must include an entry for itself. It looks redundant and it is load-bearing: it is how an engine confirms that the set it received from this page matches the set the other pages describe. A cluster missing its self-reference does not degrade politely — it can be dropped whole.
x-default earns its place
x-default names the page to serve when nothing in the cluster matches the visitor. Without it, a reader whose language you do not publish gets whichever version the engine picks, and that is rarely the one you would choose.
Bare language codes usually beat regional ones
Write pt rather than pt-PT unless you actually publish a separate Brazilian page. A bare subtag lets one page serve every reader of that language; a regional one tells the engine those readers are a different audience, and if you have no page for them they fall back to English.
Add a region only when you publish a distinct page for it and genuinely want the audiences kept apart.
On Shopify
Markets emits the tags for you once translated or country-specific versions are published. The usual failure is a theme that also emits its own set: two clusters on one page, disagreeing, and the engine trusting neither. Our hreflang tag generator writes a correct set; this page checks what a live one declares.
Frequently asked questions
Does every page need to list itself?
Yes. A cluster must be self-referential: the page must include an hreflang entry pointing at its own URL. Google treats a cluster whose members disagree about who is in it as unreliable and can discard the whole set, so a missing self-reference does not degrade the signal gracefully — it can remove it.
Is x-default required?
No, but it is nearly always worth having. It names the page to serve when no declared language matches the user. Without it, a visitor whose language you do not publish gets whichever version the engine guesses, and that guess is not usually the one you would pick.
Do the alternates have to point back?
Yes, and this is where most implementations break. If page A declares B as its French alternate, B must declare A in return. One-directional hreflang is ignored. Checking one page therefore cannot prove a cluster is correct — it can only prove that this page has done its half.
What code do I use for Portuguese or Spanish across countries?
A bare language subtag unless you genuinely publish country variants. Writing pt rather than pt-PT lets the page serve Brazilian readers too instead of leaving them on English. Only add a region when you publish a distinct page for it and want them kept apart.
Can hreflang fix duplicate content?
Partly, and not in the way people hope. It tells an engine that two pages are the same content for different audiences, which stops them competing. It does not consolidate ranking signals the way a canonical does, and it does nothing at all for duplicates within a single language.
Where does Shopify put hreflang?
Markets adds the tags automatically when you publish translated or country-specific versions. Trouble usually comes from a theme that also emits its own set, leaving two clusters on one page that disagree.
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.
Hreflang tag generator
Build a valid hreflang cluster for every language version of a page, with x-default, and a built-in check that every URL points back at every other one..
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..
Redirect checker
Follow any URL hop by hop: every status code, every intermediate URL, and the page that finally answers.
Robots.txt tester
Fetch any site robots.txt and test a path against Googlebot, Bingbot, GPTBot, ClaudeBot and PerplexityBot.
Sitemap checker
Fetch any XML sitemap or index and check it: URL count against the 50,000 limit, lastmod coverage and honesty, size and reachability..
HTTP header checker
Fetch any URL as Googlebot and read the full response headers, with the SEO-relevant ones called out: X-Robots-Tag, Cache-Control, Content-Type, Vary and HSTS..
AI visibility checker
Check what AI answer engines may do with a site: GPTBot, ClaudeBot, PerplexityBot and Google-Extended rules, llms.txt, and whether pages are quotable..
Canonical checker
Check the canonical on any URL: present or missing, self-referencing or pointing elsewhere, and whether a redirect or noindex contradicts it..
Heading structure checker
Check the heading structure of any page: how many H1s, whether levels are skipped, and how many sections a reader or an answer engine can actually navigate..
Indexability checker
One verdict from every signal that decides it: status code, robots meta, X-Robots-Tag, canonical target, redirect chain and whether the HTML has content at all..
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