An Hreflang Checker That Fetches the Other Side
Most hreflang tools read one page and list its tags. That answers the easy question. The hard one is whether the pages it points at point back, and this checker fetches them to find out.
What the Report Grades
Four sections, each marked pass, warning or fail, rolled into a score out of 100.
- ReachabilityThe status of every URL, redirects (a tag should never point at a URL that redirects) and noindex.
- CanonicalsMissing, multiple, relative and conflicting canonical tags, and the one that matters most: a page with hreflang that canonicalises elsewhere, which makes Google ignore its hreflang entirely.
- HreflangEvery code checked against ISO 639-1, ISO 15924 and ISO 3166-1 (en-UK, en_US and bare country codes are the usual casualties), the self-reference and x-default, and every target fetched to confirm it answers 200, is not noindex, does not redirect, and links back.
- ClustersThe pages that reference each other, grouped, with a verdict on whether each group is fully cross-linked.
Return links are the finding that fixes the most Search Console "no return tags" warnings. If page A says B is its German version, B must say A is its English version, or Google drops the pair. The hreflang guide has the full rule set and the tag snippets to copy.
How a List of URLs Becomes a Report
Paste up to 25 URLs, or one sitemap, into the checker. Each page is fetched from this server, six at a time, following redirects in validated hops. Canonical and hreflang annotations are read from three places: link elements in the HTML head, Link HTTP headers, and, when the input was a sitemap, the xhtml:link entries next to each URL. Every hreflang target that is not already in the list is fetched as well, up to 40 pages per check, so return links can be verified against the real page rather than assumed.
Each hreflang value is validated against the ISO 639-1 language list, the ISO 15924 script list and the ISO 3166-1 region list, with a table of the usual near-misses (en-UK, en_US, en-EU, a bare region code, a region mistaken for a language) that names what was probably meant. Canonicals are compared with the final URL of the page, with each other when HTML and header disagree, and with the hreflang set, because a canonical pointing elsewhere cancels the hreflang on that page. Pages are then grouped into clusters by the links between them and each cluster is checked for completeness.
What it deliberately does not do
It does not crawl your site. You choose the URLs, or the sitemap chooses them for you, and the check stops at the alternates those pages declare. It does not query Google or read Search Console, so it cannot tell you what Google has indexed, only what your pages say today. It does not execute JavaScript: tags injected by a script after load are invisible to it, and to most crawlers' first pass too. A page that answers 200 with valid tags here can still be treated differently by Google for reasons a fetch cannot see, such as quality signals or the tags changing between crawls.
When a verdict looks wrong
The contact page says what to send. For a single page's full indexability picture, our sister tool indexcheck.tools covers meta robots, canonicals and more in one report.