Free tool, no signup

Hreflang checker

Hreflang is unforgiving in a particular way: it is either completely right or completely ignored, and nothing tells you which. One invalid code or one missing self-reference and the cluster stops working.

Paste a page. This reads its annotations from the HTML and the Link header, validates every code, and checks the parts people forget.

Free, no account. One page is fetched as a crawler would see it, without running JavaScript.

What a working set looks like

Three pages, three languages, each page naming all three and itself, plus a fallback:

<link rel="alternate" hreflang="en" href="https://example.com/page" />
<link rel="alternate" hreflang="fr-CA" href="https://example.com/fr-ca/page" />
<link rel="alternate" hreflang="de-CH" href="https://example.com/de-ch/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />

That same block, byte for byte, goes on all three pages. Annotations can also travel in an HTTP Link header, which is how non-HTML files such as PDFs do it, and this checker reads both.

The four ways it breaks

An invalid code. en-uk, en-eu, a UN region number such as 419. The entry is dropped, and with it the link between two pages.

No self-reference. The page lists its alternates but not itself, so the set never closes.

No return link. The English page names the French one, and the French page says nothing. Confirmation has to be mutual.

A canonical pointing somewhere else. Each page in a cluster must be canonical to itself. A canonical aimed at the English version from the French page tells search engines the French page should not be indexed at all, which cancels the hreflang.

Checking the other half

Return links are the half a single page cannot prove. Confirming them means fetching every alternate and reading its annotations too.

A crawl of the site collects every page's annotations in one pass, and the downloadable database lets you join the declarations against each other in a few lines of SQL, which is the only comfortable way to audit a large cluster.

Also worth pairing with the canonical checker, since the two interact more than anything else on this list.

Questions people ask

What does hreflang actually do?
It tells search engines that several pages are the same content for different audiences, so the right one is shown to each. It does not make a page rank; it stops the wrong version outranking the right one in a given country, and stops the versions being treated as duplicates of each other.
Why is en-uk wrong?
Because the country part must be an ISO 3166-1 Alpha 2 code, and the United Kingdom is GB. UK is the one everybody writes and it is silently ignored. The language part is ISO 639-1, so Hebrew is he rather than the old iw, and Indonesian is id rather than in.
Does every page have to list itself?
Yes, and it is the most common failure. Each page in a cluster must name every version including its own, and every page named must name the others back. A one-way annotation is discarded.
What is x-default for?
The page to show somebody whose language and country match none of your versions: usually a language selector or your main international version. It is optional, and most multi-region sites want one.

Other free tools here

One page is a start. Crawl the whole site.

These tools check a single address. The Site Spider crawls up to 5,000 pages and runs fifteen checks over all of them, still free and still without an account.
Scan a site, free