Hreflang links are reciprocal
mediumhreflang_reciprocity
Checks that hreflang links between locale pages are reciprocal.
What does this rule check?
For hreflang to work correctly, if page A declares page B as an alternate language version, page B must also declare page A. Without this reciprocity, search engines may ignore the hreflang signals entirely, treating locale versions as duplicate content.
Why is this important?
Non-reciprocal hreflang is invalid. Google treats it as an error and may ignore all hreflang signals for the affected pages, leading to duplicate content issues, wrong locale pages ranking, or pages being suppressed from the index.
How to fix
Ensure every hreflang alternate link is reciprocal. If /en/ points to /es/ as the Spanish version, /es/ must point back to /en/ as the English version. The easiest approach is to have all locale pages include the same complete set of hreflang tags.
Examples
<!-- /en/ page -->
<link rel="alternate" hreflang="es" href="/es/" />
<!-- /es/ page -->
<!-- No hreflang tags! Missing return link to /en/ -->
<!-- /en/ page -->
<link rel="alternate" hreflang="en" href="/en/" />
<link rel="alternate" hreflang="es" href="/es/" />
<link rel="alternate" hreflang="x-default" href="/en/" />
<!-- /es/ page -->
<link rel="alternate" hreflang="en" href="/en/" />
<link rel="alternate" hreflang="es" href="/es/" />
<link rel="alternate" hreflang="x-default" href="/en/" />
Agent fix snippet
Copy this snippet and paste it into your AI coding agent to fix this issue automatically.
Ensure all locale pages include the same complete set of hreflang tags.
Each page should reference itself and all its translations.
The easiest pattern is to generate hreflang tags from a shared config at the layout level.