Check your hreflang before Google ignores it

No signup · works on a page URL or an XML sitemap
Any page in the set. We read its hreflang tags, then fetch each version it names and read theirs. An XML sitemap that carries xhtml:link alternates works too — we check its first annotated entry and the pages that entry names.
A cluster is usually one page per market.
Fetching the cluster
Each page is fetched live, so a large set takes a few seconds.

Enter one page and we follow every language version it points at, then check the annotations against each other. Return links, invalid codes, canonical conflicts and dead targets — the four things that quietly switch hreflang off.

What needs fixing

Errors stop hreflang working for the pages involved. Warnings and notes are worth knowing but will not, on their own, make Google discard the annotation.

The return-link matrix

✓ declared, and the other page declares it back ! declared one way only — Google ignores both sides · not declared shaded the page's own self-reference

Page by page

What each URL in the set actually returned when we fetched it just now.

International SEO is rarely only a tagging problem
Broken hreflang is usually a symptom: a migration that moved URLs, a CMS that generates the set from the wrong field, or a market structure that was never going to work. We fix the tags and the thing that broke them.
Talk to us about your international setup →

How hreflang actually works

The short version, and the parts that catch people out. Worth reading before you change anything.