Google's Search Central documentation on localized pages is direct about this: hreflang annotations describe a set of pages that are equivalent alternates of each other, and it asks site owners to confirm the links are reciprocal — every page in the set should link to every other page in the set, including itself. When a page names an alternate that does not link back, Google's own documentation says the annotation may be disregarded.
That is a quiet failure. The page still renders. The HTML is still valid. Nothing in a browser, a linter, or a normal QA pass will show a broken hreflang set — the only symptom is a search result that doesn't show up where it was supposed to, in a market nobody in the room is testing from.
Three pages, each in a different language, each listing all three (including itself):
<!-- on https://example.com/en/ --> <link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="fr" href="https://example.com/fr/" /> <link rel="alternate" hreflang="de" href="https://example.com/de/" /> <!-- on https://example.com/fr/ --> <link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="fr" href="https://example.com/fr/" /> <link rel="alternate" hreflang="de" href="https://example.com/de/" /> <!-- on https://example.com/de/ --> <link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="fr" href="https://example.com/fr/" /> <link rel="alternate" hreflang="de" href="https://example.com/de/" />
Every page names all three, including itself (the self-reference Google's documentation also
asks for). If the German page above were missing its own entry pointing back at
/fr/, the French page's link to German would be one-way, and Google's documentation
says it may be ignored for exactly that pair.
Almost never on purpose. The common real cause is a rollout: a site adds a new locale and updates its language switcher and hreflang block for the new page, but the existing pages' hreflang blocks are generated from a template or a migration script that only ran once, before the new locale existed. Every existing page keeps pointing at the same set it always had; the new page points at all of them; nothing points back at the new page except the new page itself. The same thing happens in reverse when a locale is retired — its alternates keep naming a page that no longer exists or was never repointed.
Google's Search Central documentation on localized versions of a page instructs site owners to confirm that hreflang links are reciprocal — each page in a set of alternates should link to every other page, and every other page should link back to it. Google's own guidance says that when a return link is missing, the search engine may disregard the annotation.
Google's documentation says a hreflang annotation without a matching return link may be ignored. In practice this means the language- or region-targeted result you intended for a search in a particular market may not appear, and instead a visitor might land on the wrong-language version of the page with no signal ever reaching you that the annotation failed, because nothing about it produces an error — the page still loads fine and the tag is still valid HTML.
Usually a new locale is added to a site's language switcher and its hreflang set before every existing locale's own page has been updated to add a matching entry pointing at the new one — a rollout that touches N pages needs to touch N pages' hreflang blocks, and a template or migration script that only updates the new page's own tag leaves every existing page pointing at nothing that points back. It also happens when a page is retired or moved and its alternates are not updated to drop or repoint the now-dead entry.
hreflang="x-default" names the page to show a visitor whose language or region does not match any of the other declared alternates. Google's documentation describes it as optional but recommended whenever a page set has more than one real language or region variant, specifically for sites that do automatic language/country selection with a landing page a generic visitor should see.
Check your own pages: hreflang Reciprocity Check. See also: how this differs from Merkle's hreflang Tags Testing Tool.