What the page declares
| Language | URL | Status | Points back |
|---|
Reciprocity
Each row is a page in the set; each column, who it points to. Every cell should be ticked.
Findings
Next step
Shall we fix it for you?
Send us this result and we reply within one business day with what we would fix first, how much work it is and what you can leave as it is.
Opens the form with the diagnosis already written. You can edit it before sending.
How to use it
01
Type the URL
We read its <head> from our server and extract the hreflang tags it declares.
02
We visit every alternate
Up to twenty, two at a time. From each we read its status, its canonical and its own alternates.
03
We cross the set
The matrix shows who points to whom. Whatever is not reciprocal, self-referencing and with x-default shows up in the findings.
The three rules of hreflang
- Reciprocal
- If the Spanish version points to the English one, the English one has to point to the Spanish one. A one-way hreflang is discarded by Google without warning: it is the error Search Console calls "no return tags".
- Self-referencing
- Each page includes itself in its list of alternates, with its own language. It looks redundant and it is mandatory: that way the set is identical across every version.
- With x-default
- One of the URLs is additionally declared as x-default: the one offered to anyone matching no language. It is usually the main version or a language selector.
All three are broken the same way: someone adds a language and updates only the new page. Google does not warn; it simply stops using the set and every version competes against the rest.
An hreflang that never drifts
Hand-written hreflang breaks as soon as the site grows: a new page in one language, a URL that changes, a copied canonical. On this site no tag is hand-written: every piece of content carries a key shared with its translation, and from it come the language switcher, the alternates and the x-default.
And before publishing, the build verification walks every page and checks reciprocity: if an alternate does not point back, the deploy does not go out. It is what we set up on every multilingual site.
Frequently asked questions
hreflang in the HTML, in the HTTP header or in the sitemap?
All three work and Google treats them the same; what you cannot do is mix them within one set. HTML is the easiest to audit and what this tool reads. The HTTP header is for PDFs and other files without a <head>. The sitemap is handy with dozens of languages, because it does not bloat every page.
Which URL do I point x-default at?
At the one you want shown to anyone matching none of your languages: usually the main version of the site or a language selector page. It does not have to be a different URL; on this very site x-default points to the Spanish version.
"es-ES" or plain "es"?
It depends on whether you have different versions per country. If your Spanish serves Spain, Mexico and Colombia alike, use "es": with "es-ES" you are telling Google that page is for Spain, and a Mexican will be offered something else, or nothing. The region is only added when a genuinely different version per country exists. "es-419" is valid and means "Latin American Spanish".
Do I need hreflang if the pages are almost identical?
Yes, precisely then. Two pages in the same language for two countries, with only the currency changed, are duplicate content to Google unless you tell it they are regional alternates. hreflang is what turns that duplicate into a per-country choice.
Why does Search Console say "no return tags"?
Because some alternate you declare does not declare you. It usually happens when adding a new language: the new page is updated with every alternate, but the old ones are left untouched. This tool detects it by visiting each alternate and checking that it points at you.
How do hreflang and canonical coexist?
Each alternate has to be canonical of itself. If the English page declares the Spanish one as canonical, Google keeps the Spanish one and ignores the English page’s hreflang. It is one of the most frequent mistakes on sites that copy the main language’s canonical to every version.
How many alternates does it check?
Up to twenty, which covers the vast majority of sites. Each alternate is a request from our server; with more than twenty languages the check is done in batches so the audited site is not overloaded.
Is anything stored?
No. The URL and its alternates are read by our Cloudflare function, returned to your browser and not stored; each read is cached for ten minutes to avoid repeating the same request. The analysis happens in your browser.
Does your site speak two languages and Google only hears one?
A consistent hreflang across every version is not an afternoon’s tweak: it is an architecture. We build it so it generates itself and gets verified on every deploy.
We reply within one business dayBogotá · UTC−5