hreflang¶
Wygard records the hreflang annotations on a page — every (href, hreflang) pair — and alerts you when a language or region link changes, disappears, or stops mirroring its counterparts.
| Scope | Tier | Default | Alert |
|---|---|---|---|
| Per URL | Advanced | On when hreflang is found on any URL | 🟠 Heads-up |
Why it matters¶
hreflang tells Google which language and region version of a page to serve to which searcher. It only works when the annotations are complete and reciprocal — every version has to point at every other version, including itself. A single broken or missing link and search engines fall back to guessing, serving the wrong-language page or splitting ranking signals across mutations that no longer reference each other.
Because the annotations live in the <head> and never render, a template change or a translation deploy can quietly break the reciprocity with no visible symptom. The default severity is Heads-up — worth a review, rarely an instant traffic cliff. This is an Advanced-tier test.
What Wygard checks¶
On every run, the crawler:
- Fetches the monitored URL.
- Collects every
<link rel="alternate" hreflang="…" href="…">in the<head>. - Stores each annotation as a
(href, hreflang)pair. - Compares the full set against the stored desired value.
When Wygard first finds hreflang on a URL, it also pulls in the sibling language mutations that URL references and enables the test across them as a mirrored set — so a break in reciprocity shows up from whichever side it happened. If no hreflang is found on a URL, the test stays disabled there.
Common alerts¶
- hreflang link changed — an
hrefor language code no longer matches the baseline. - hreflang annotation removed — a language or region version that used to be listed is gone.
- Reciprocity broken — a mutation in the mirrored set stopped pointing back at this page.
Responding to an alert¶
- Open the alert and review which pair changed — Wygard shows the previous set of annotations versus what it found this run.
- Decide whether the change was intended (you retired a locale, moved a translated URL) or accidental (a template regression, a broken build on one language site).
- If intended, adopt the new set as the baseline from the alert card.
- If accidental, restore the missing or changed annotation — and make sure every mutation in the set references every other one, itself included.
Pair it with Canonical
hreflang and the Canonical test work together: canonical picks the authoritative URL within one language, hreflang connects the authoritative URLs across languages. A canonical that points at the wrong locale quietly cancels the hreflang signal.