Free tool

hreflang checker — validate language alternates

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.

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