ShipDR works best on desktop.

Free Hreflang Checker

Reads the annotations on a page, validates every tag, and then fetches the alternates to check they point back. The missing return link is the commonest hreflang failure and it is invisible from the page you started on.

Alternates are fetched too, up to eight, because a missing return link is the most common hreflang error and it lives on the other page.

What hreflang is for

If the same page exists in more than one language, search engines have two problems: they may treat the versions as duplicates of each other, and they have to decide which one to show to whom. hreflang answers both by declaring that these URLs are the same content in different languages, and which is which.

It is not a ranking signal, and it will not make a page rank in a country it otherwise would not. It is a routing instruction, and the payoff is that the right version is served, which shows up in bounce rate and conversion rather than in position.

The return link, and why one page cannot tell you

hreflang has to be reciprocal. If your English page names a French alternate, the French page has to name the English one back. Google calls a one-sided annotation unconfirmed and may ignore it, so a half-built set produces nothing at all while looking complete from either end.

That is why this tool fetches the alternates. Reading only the URL you gave it, the mistake is not visible: the page you are inspecting is correct, and the omission is on the page it points to. It is the same reason the open graph checker requests the og:image instead of trusting the tag. A declaration is a claim about something else, and the something else is checkable.

Up to eight alternates are fetched. Beyond that the rest are reported as not tested rather than assumed correct, since a set can be large and each check is a request.

The rules a set has to satisfy

Every page lists itself

Each page carries the complete list including its own URL, so all pages in a set are annotated identically. A set where pages list only the others is discarded.

Every pair confirms both ways

A to B and B to A. Unconfirmed annotations may be ignored entirely.

Valid codes only

Language from ISO 639-1, optional region from ISO 3166-1 alpha-2, separated by a hyphen. en-GB, not en-uk, and never an underscore.

Each page canonicalizes to itself

A canonical pointing elsewhere tells Google not to index this page, and the annotations go with it.

One method per set

Link tags, sitemap or headers, not a mixture for the same pages, or the declarations can contradict each other.

The errors this catches by name

Honest limits

This reads link tags in the HTML. A site that declares hreflang through its sitemap or through HTTP headers will correctly show none here, and that is a real answer rather than a fault: it means the annotations are somewhere this tool does not look. It fetches up to eight alternates and names the rest as untested. And it validates the shape of a tag, not the judgement behind it: nothing can tell you whether the Spanish page really is the Spanish version of this content, or whether targeting es rather than es-MX was the right call for your market.

The canonical interaction is checked because it is decisive; for the rest of what a canonical decides, the canonical checker goes further.

Your language versions are yours. Your backlinks are on other people's sites.

An hreflang set stays correct until someone edits a template, and you can check it whenever you like. The links pointing at your pages are somewhere you cannot see: they get pruned, flipped to nofollow, or stranded on pages that turn noindex. ShipDR reads every listing you track on a schedule and reports the day one changes.

  • Every listing rechecked on a schedule, not once
  • Live, dofollow and indexable, read from the page itself
  • Told the day a backlink drops or flips

Adding a website and charting its Domain Rating is free, no card. The backlink engine is $10 once, per website, with no subscription.

Fair questions

What does hreflang actually do?

It tells search engines that several pages are the same content in different languages or regions, so the right version is shown to the right person. It is not a ranking signal and it does not translate anything. Its job is to stop your language versions being treated as duplicates of each other, and to stop a French reader landing on the English page.

Do the annotations have to be reciprocal?

Yes, and this is where most sets break. If page A says page B is its French version, page B has to say the same about A. Google calls annotations without a return link unconfirmed and may ignore them entirely, which means a set can be half-built and produce nothing. The failure is invisible from A, because the missing half is on B: that is why this tool fetches the alternates instead of just reading the page you gave it.

Does every page need to list itself?

Yes. Each page in a set includes an annotation pointing at itself along with all its alternates, so every page in the set carries the same complete list. A set where pages only list the others is discarded.

What is x-default for?

It names the page to show when none of your versions match the visitor. A language selector, or the version you would rather an unmatched visitor saw. It is optional, and without it that choice is made for you rather than by you.

Is it en-UK or en-GB?

en-GB. This is the single most common invalid value in the wild. Language codes are ISO 639-1 and region codes are ISO 3166-1 alpha-2, and in ISO 3166 the United Kingdom is GB; UK is not a country code at all. The tag is not rejected loudly, it is simply ignored, so a site can carry en-uk for years while believing it has a British version. This checker flags it by name.

Can hreflang and canonical conflict?

Yes, and it voids the whole set. If a page canonicalizes to a different URL, you have told Google that page is not the one to index, and its hreflang annotations go with it. The rule is that every page in an hreflang set should canonicalize to itself. A canonical pointing at the English version from the French one is a common and completely silent way to lose the entire set.

Should hreflang go in the HTML, the sitemap, or the headers?

Any of the three, and never more than one for the same set. Link tags in the head are the most common and the easiest to inspect. A sitemap keeps the markup clean and scales better across many languages, at the cost of being invisible when you view a page. HTTP headers exist for non-HTML files like PDFs. Mixing methods for the same pages is how sets end up contradicting themselves. This tool reads the link tags, so a site annotating through its sitemap will correctly show none here.