What is an hreflang reciprocity checker?
An hreflang reciprocity checker is a small tool that compares two web pages and tells you one thing: do they link to each other the right way?
Say you have the same article in English and in German. hreflang is a tag that tells search engines, "this is the German version of that English page." It helps Google and Bing show the right language to the right visitor.
But there is one rule people get wrong all the time.
The link has to go both ways.
If your English page points to the German page, the German page has to point back to the English one. That link back is called a return tag. When both sides are present, the pair is reciprocal. When only one side is there, it is one-way, and search engines quietly throw it out.
This reciprocity checker fetches both pages, reads their tags, and shows you whether each one links back. You paste two URLs, you get a clear verdict in seconds, and there is no login.
Why reciprocity matters so much
When only one page links to the other, the search engine cannot confirm the match.
So it drops the whole group of tags. The two versions then compete as near-duplicates of each other, and the wrong-language page can outrank the right one. A German searcher might land on your English page, bounce, and cost you the sale.
The worst part is that it fails silently. Nothing looks broken. The page loads, the tag is right there in the source, and yet it does nothing because the other half is missing. You can lose international traffic for months and never see an error.
Google is direct about this in its own docs: hreflang annotations must be confirmed from both sides, or they are ignored. You can read the rule in Google's guide to localized versions of a page.
What a correct hreflang pair looks like
Every page in a language group lists every other page, including itself, plus an x-default fallback. Both pages carry the exact same set of tags.
<link rel="alternate" hreflang="en"
href="https://site.com/en/shoes" />
<link rel="alternate" hreflang="de"
href="https://site.de/schuhe" />
<link rel="alternate" hreflang="x-default"
href="https://site.com/en/shoes" /><link rel="alternate" hreflang="en"
href="https://site.com/en/shoes" />
<link rel="alternate" hreflang="de"
href="https://site.de/schuhe" />
<link rel="alternate" hreflang="x-default"
href="https://site.com/en/shoes" />Notice that the English page lists itself with hreflang="en". That self-referencing tag is not optional. A set that does not point back at its own URL is treated as incomplete, and search engines may drop it.
The parts of an hreflang tag
| Part | Example | What it does |
|---|---|---|
rel="alternate" | On every tag | Marks this as another language or region version |
hreflang | hreflang="de" | Names the language, and region if you add one |
href | href="https://site.de/seite" | The full URL of that version |
x-default | hreflang="x-default" | The fallback when no language matches the visitor |
How to read your reciprocity result
The checker boils a pair down to one of three verdicts. Here is what each one means and the fix it points to.
| Verdict | What it means | What to do |
|---|---|---|
| Reciprocal | Both pages link to each other | Nothing. The pair is set up correctly. |
| One-way | Only one page links to the other | Add the missing return tag on the page that does not link back. |
| Missing | Neither page links to the other | Add a full hreflang set to both pages, each listing both URLs and itself. |
The tool also shows each page's canonical next to its tags. That matters because a stray canonical can undo perfectly good hreflang, which is the next thing to watch for.
Where hreflang can live
You do not have to put hreflang in the page head. There are three valid spots, and you should pick one and stick with it.
- The page head, as link tags. The most common choice.
- The XML sitemap, which is tidy when you have many pages.
- The HTTP headers, handy for PDFs and other non-HTML files.
Here is the same English and German pair, this time inside a sitemap:
<url>
<loc>https://site.com/en/shoes</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://site.com/en/shoes" />
<xhtml:link rel="alternate" hreflang="de"
href="https://site.de/schuhe" />
</url>
<url>
<loc>https://site.de/schuhe</loc>
<xhtml:link rel="alternate" hreflang="en"
href="https://site.com/en/shoes" />
<xhtml:link rel="alternate" hreflang="de"
href="https://site.de/schuhe" />
</url>Notice that both URLs list the full set again. The reciprocity rule is the same no matter where the tags live. You also should not mix methods: do not list a page in the sitemap and again in the head with different URLs, or you will send conflicting signals.
Getting your language and region codes right
An hreflang value is a language code, with an optional region code after it. The language always comes first. If you make one up or swap the order, the tag is silently dropped.
| Code | What it means | When to use it |
|---|---|---|
en | English, any region | A single English page for the world |
en-GB | English, United Kingdom | A UK-specific English page |
de | German, any region | One German page for all German speakers |
es-MX | Spanish, Mexico | Pricing or shipping aimed at Mexico |
x-default | Fallback for everyone else | Where to send an unmatched visitor |
Language codes follow the ISO 639 standard, and region codes follow ISO 3166-1 alpha-2. A common slip is using en-UK, which is wrong. The country code for the United Kingdom is GB, so the correct value is en-GB.
Common hreflang mistakes
Most hreflang problems come down to a short list.
| Mistake | What happens |
|---|---|
| One-way tags, no return tag | Google ignores the whole group, so pages compete as duplicates |
| Wrong or made-up language codes | The tag is skipped, so that version is never linked |
| Canonical points to another language | Canonical and hreflang fight, and hreflang loses |
| Relative URLs instead of full URLs | Tags can be misread or thrown out |
| No self-referencing tag | The set is incomplete and may be dropped |
Do not let the canonical undo it
Here is a sneaky one.
A translated page sometimes sets its canonical to the original language instead of to itself. Now canonical and hreflang point in different directions, and Google solves the conflict by ignoring the hreflang.
Each language version should set its canonical to itself. That is why this checker shows both signals together, so you catch a self-defeating canonical at the same time as a missing return tag.
How to fix a one-way pair, step by step
If the checker says one-way, the fix is short.
- Open the page that does not link back, the one flagged red.
- Add an
<link rel="alternate" hreflang="...">tag for the other page, using its full URL. - Confirm that page also lists itself with its own language code.
- Make sure the canonical on each page points to that same page, not to its translation.
- Re-run the checker. The verdict should flip to reciprocal.
After you ship the change, give search engines time to recrawl both URLs. You can speed this up by requesting indexing in Google Search Console, which also reports hreflang errors it finds during its own crawls.
Keeping hreflang correct at scale
Checking two pages by hand is easy.
Across hundreds of pages it breaks the moment you add a new language or a new page. Every page in a group has to be updated, and one missed return tag can quietly unlink the whole set. This is exactly the kind of thing humans forget and machines do not.
Massblogger's pSEO builds the self-referencing canonical and the full reciprocal hreflang set right into the page template. Every generated page references all the others, and itself, automatically, so a new translation never lands as a broken one-way pair.
Frequently asked questions
- What is an hreflang reciprocity checker?
- An hreflang reciprocity checker compares two pages and tells you if they point to each other with hreflang tags. hreflang only works when the link goes both ways. If your English page lists a German version, the German page has to list the English one back. This tool checks that the return link exists, in both directions, and flags it when one side is missing.
- What are hreflang return tags?
- A return tag is the link back. If your English page declares a German alternate, the German page must declare the English page in return. Google only trusts the pairing when both sides reference each other. A missing return tag is the most common hreflang mistake.
- Why is my hreflang being ignored?
- Almost always because the link is one-way. One page lists the other, but the other does not link back. Without the return tag, Google throws out the whole annotation for that group of pages, and the versions start competing as duplicates. Wrong-language pages can then outrank the right ones.
- Do I need an x-default hreflang tag?
- It is recommended. x-default tells search engines which URL to serve when none of your listed languages match the visitor. So a user whose language is not in your set still lands somewhere sensible instead of a random version.
- Should each language page's canonical point to itself?
- Yes. A translated page should set its canonical to itself. If it points the canonical to the original language instead, canonical and hreflang send opposite signals, and Google ignores the hreflang. That is why this checker shows both signals together.
- What language and region codes can I use in hreflang?
- Use ISO language codes, with an optional region code. Examples are en for English, en-GB for British English, de for German, and es-MX for Mexican Spanish. The language comes first, then the region. Invalid or made-up codes are ignored, so the format has to be exact.
- Where do hreflang tags go?
- You can place them in the page head as link tags, in your XML sitemap, or in the HTTP headers. Most sites use the head or the sitemap. Whichever you pick, every page in the language group needs the full set of tags, including a self-referencing one.