Skip to content

Find hreflang errors: missing return links and bad codes ​

The Evergreen Crawl Hreflang report checks the hreflang annotations on the pages bots received: whether each page refers to itself, whether its alternates answer, and whether every language version declares the full set. Also called an hreflang audit or hreflang checker.

Hreflang links the language and regional versions of a page. Search engines use it to show each searcher the right version. A set that misses its self-reference or its return links may be ignored.

The top of the Hreflang report for a site with English pages. Four cards: Pages with hreflang 395 (100.0% of indexable pages, up 15), Self-referenced 94.9% of 395 hreflang pages (down 0.6 points), Observed broken targets 0, and Declaring while excluded 93 of 647 pages declaring hreflang (up 10). Below, Declared language coverage reads: 1 distinct declaration profile across 395 pages, the largest covers 395 (100.0%), with one row, en, 375 pages, declared on 395, weakest pair shown as a dash, incomplete 0

What the report shows ​

The report answers whether each language set is valid and complete, and what changed since the comparison crawl.

Cards: are the hreflang sets valid? ​

The four cards at the top sum up the hreflang sets:

  • Pages with hreflang: pages that declare hreflang, with their share of indexable pages.
  • Self-referenced: the share of those pages whose set includes the page itself.
  • Observed broken targets: pages whose alternates the crawl found broken.
  • Declaring while excluded: pages that declare hreflang while they are not indexable, out of every 200 page declaring hreflang.

View on a card opens its pages in Data Explorer.

Declared language coverage: is every language version complete? ​

Declared language coverage has one row per language, with these columns:

  • Language: the hreflang code.
  • Pages: pages that are this language, by their self-referencing entry.
  • Declared on: pages that declare this language as an alternate, wherever they sit.
  • Weakest pair: the language these pages cover least often, and how often. On a healthy set this reads 97% or more, and one low number usually means one template stopped emitting an alternate.
  • Incomplete: pages of this language whose set misses a language the rest of their cluster declares.
  • GSC impr and AI fetches: the demand on the language's pages.

The line above the table counts the distinct declaration profiles, the different sets of languages pages declare, and how many pages the largest one covers. One profile across the site means every page declares the same set.

An alternate on another host carries a cross-host chip: it is declared, never validated, because the crawl holds only your own site's pages. The x-default fallback carries an optional chip and never counts as a coverage gap. Extra languages fold into one row at the end of the table. When no page declares hreflang, the card reads "No page in this crawl declares hreflang alternates, so there is no coverage to draw."

Changed since last crawl: which sets moved? ​

Changed since last crawl lists the pages whose hreflang state changed since the comparison crawl, ranked by the demand they carried before. The states are No hreflang declared, No self-reference, Broken alternate observed, Declared, no broken target seen and No longer an indexable 200. Click a move to see each page's languages and broken alternates before and now. When nothing moved, the card reads "No page changed its hreflang verdict since" and the comparison crawl.

Issues in this category ​

The last card lists the Hreflang checks that found pages, with their pages and demand.

The Issues in this category card of the Hreflang report for the same site: P1 No self-reference - the whole set may be ignored on 20 pages (0.7%) with 670 GSC impressions and 38 AI fetches, and P2 Page emits hreflang while blocking indexing on 93 pages (3%). One check had its pages claimed by a more specific finding, and 9 checks found nothing on this crawl

How to read it ​

  • The sets come from the pages bots received. Hreflang injected by JavaScript or by an Edge SEO rule counts, because the crawl reads the page as EdgeComet served it.
  • A set has to be complete both ways. Each version lists itself and every other version, and every version it lists points back. The checks No self-reference - the whole set may be ignored and Alternate does not point back find the gaps.
  • Hreflang on a non-indexable page sends a mixed signal. Declaring while excluded counts pages that point searchers to versions of themselves while asking not to be indexed.
  • Alternates on other hosts are flagged, not checked. The crawl holds only your own site's pages.

What to do next ​

  • Fix it at the edge. Add or correct hreflang with an Edge SEO link tag rule, for one page or a whole section, without a release.
  • Check a low Weakest pair. One low number usually means one template stopped emitting an alternate. Hover the cell to see which language it measures and how it compares with the best-covered language.
  • Ask about it. Ask in the header starts with "How common are broken targets?", "Which language lacks coverage?" and "What changed since the baseline?".

Where to find it ​

In the dashboard: Evergreen Crawl > Hreflang.