Hreflang Checker: Find and Fix Broken Tags
A hreflang checker goes through the language versions of a page and confirms that every hreflang annotation uses a valid code, points at a live and indexable URL, and is confirmed by a return link on the target page. When those conditions fail, Google ignores the broken annotations and falls back to guessing which version to show, so a French searcher can land on the UK page even though a French one exists.
Hreflang errors do not produce anything a visitor would notice. The pages load, the layout is fine, and the only symptom is the wrong URL appearing in a country's search results, usually spotted months later by someone in that market.
Three places hreflang can live
Google accepts hreflang in any one of three forms, and a checker has to read whichever the site uses:
<link rel="alternate" hreflang="fr-fr" href="https://example.com/fr/" />
in the HTML <head>; an HTTP Link header, which is the only option for PDFs and other non-HTML files; or <xhtml:link rel="alternate" hreflang="fr-fr" href="..." /> entries inside the XML sitemap. Large multi-market sites often use the sitemap method because it keeps the page <head> small. Mixing methods is allowed but makes contradictions more likely, since two systems now describe the same cluster.
Each version should list every other version and itself. The self-reference is not optional in practice: without it, the set is harder for Google to confirm.
What a checker validates
| Check | Correct | Broken example |
|---|---|---|
| Language code | ISO 639-1, e.g. fr, de |
fr-FR is fine, french is not |
| Region code | ISO 3166-1 alpha-2 after the language, e.g. en-gb |
en-uk (the code for the United Kingdom is gb) |
| Region alone | Not allowed | hreflang="gb" |
| Return link | B lists A whenever A lists B | Italian page links to Spanish, Spanish does not link back |
| Target status | 200, indexable |
Target redirects, returns 404, or has noindex |
| Canonical | Each version's canonical names itself | All versions canonicalised to the English page |
| Fallback | x-default for unmatched visitors |
No x-default, so Google chooses |
The canonical row deserves its own attention. If every language version carries a canonical pointing at the English URL, Google is told the others are duplicates, and hreflang cannot override that. Our canonical tag checker guide covers how those conflicts appear. A similar thing happens when one version picks up a noindex, which is why catching a noindex before it reaches production matters on multilingual sites.
Search Console no longer helps much here. Google retired the International Targeting report, which used to list hreflang errors, so validation now falls to crawlers and your own checks.
Checking a cluster by hand
For one set of pages:
- Open the source of one version and copy every
hreflangline. - Open each target URL and confirm its status code, that it has no
noindex, and that its canonical points to itself. - In each target, confirm the list of alternates matches the one you started with, including the self-reference.
- Check that
x-defaultexists and points somewhere sensible, such as a language selector or the main market.
Five languages means twenty-five pairs to verify for a single page type. That is fine once. It does not survive regular deploys across a portfolio.
Why multi-market sites drift
Different markets are often edited by different people on different schedules. A product is removed from the German store while the other stores still reference its URL. A redirect goes live on one market during a restructure. A translation team publishes a new page without adding it to the other versions. Normal QA confirms the page loads, and nobody reopens the alternates.
Where Deltio helps, and where a crawler is still needed
Deltio does not replace a crawler for validating every reciprocal pair. What it does is watch, on a daily cycle, the signals that break clusters in practice. It compares each check with the previous one for canonicals, noindex, robots.txt, titles and the URLs in the sitemap, and alerts that site's Slack channel and email when one changes. A canonical rewritten on the Spanish templates, or a batch of Italian URLs dropping out of the sitemap, shows up the next day instead of in a quarterly review. Manual scans are there for checking right after a release.
It fits alongside the rest of your SEO monitoring setup. A full hreflang crawl after major changes, plus daily change detection in between, covers both sides. You can try Deltio for 14 days on a multilingual client site.
Frequently asked questions
- Are hreflang codes case sensitive?
- No. Google treats en-GB and en-gb the same way. The convention is lowercase language and uppercase region, but consistency matters more than case. What does break the tag is using the wrong code, such as uk instead of gb, or a region without a language.
- Do I need hreflang if the site only has one language but several countries?
- It can help. Pages like en-us, en-gb and en-au with near-identical content are easy for Google to treat as duplicates, and hreflang tells it which version to show in each country. If the content is genuinely identical and prices or currencies do not differ, one version may be enough.
- Does Bing use hreflang?
- Bing has historically relied more on the content-language meta tag and the html lang attribute than on hreflang. Setting a correct lang attribute on each version is cheap and covers both engines.
- Can I put hreflang in both the HTML and the sitemap?
- Yes, but it is not required and creates two sources that must stay in sync. If they disagree, the conflict makes the annotations less reliable. Pick one method per site where possible.
- How much does Deltio cost?
- Starter is £24 / €29 / $31 a month for up to 50 sites and 5,000 URLs, or £20 / €24 / $26 a month billed annually. Professional (up to 200 sites) is £49 / €59 / $64 monthly and Enterprise (up to 500 sites) is £119 / €139 / $149 monthly, both discounted on annual plans. There is a 14-day free trial on every plan.