A hreflang audit checks whether each localized page correctly lists its language and regional alternatives, including itself, and whether every alternate points back. This matters on multilingual and multi-regional sites where several URLs serve equivalent content for different audiences. Google's guidance says that if two pages do not point to each other, the annotations may be ignored. A crawl should therefore test the whole cluster, not just whether a page contains one hreflang tag.

Diagram of English, German and French localized pages linking to each other in both directions
A valid localized cluster should have consistent alternate references across all included versions.

1. Build a list of the URLs that should form each cluster

Start from your XML sitemap, language selector, CMS export or existing hreflang report. For every page, record the canonical URL, intended language-region code, page status and its expected alternate URLs. Do not assume that every page has the same number of variants: some content may only exist in two languages, while other pages may have a broader set.

Normalize URLs before comparing them. Decide how your site handles HTTPS, hostnames, trailing slashes, uppercase paths and query parameters. A URL that redirects to a different canonical address should be reviewed, because the alternate annotation should point to the intended final page rather than an accidental URL variant.

2. Check language and region codes

Google documents language codes using ISO 639-1 and optional region codes using ISO 3166-1 alpha-2. The language comes first, so use values such as en, en-GB, de-DE or fr-CA. A country code alone is not a valid language-region value. The reserved x-default value can identify a fallback page for users whose language is not explicitly matched; it is especially useful for language selectors, but is not required for every site.

Check that each code matches the actual page. A URL for French content intended for Canada should not be labeled as German or use a region-only code. Treat language-region labels as metadata to validate, not as a substitute for checking the page's real language and audience.

3. Verify reciprocal and self-referencing links

For each page, compare its declared alternate set with the expected cluster. Each localized version should list itself and the other variants. Then test the relationship in both directions: if the English page points to the German page, the German page must point back to the English page.

For example, an English page might include:

<link rel="alternate" hreflang="en" href="https://example.com/en/product/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/product/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/product/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/language-selector/" />

The same alternate set should appear on each of the localized product pages, adjusted only if the actual cluster differs. This example is illustrative; replace the example URLs with real, live canonical URLs. Do not copy it into production without checking the site's variants.

4. Check status codes, canonicals and content

Fetch each target URL and record its response. Investigate 404s, server errors, redirect chains, blocked pages and URLs that resolve to a different canonical page. Check that the canonical and hreflang signals do not contradict each other, and that each alternate has meaningful localized content rather than an unrelated page or a generic redirect.

A practical audit table can include source URL, hreflang code, target URL, target status, target canonical, reciprocal link present, and result. Separate the error type from the affected cluster so a single missing alternate can be traced to every page that references it.

5. Choose one implementation method where practical

Google supports hreflang annotations in HTML, HTTP headers or XML sitemaps. The methods are equivalent from Google's perspective. Using all three does not provide a special advantage and can make maintenance harder, so choose the method your team can keep consistent. HTTP headers can be useful for non-HTML files such as PDFs; XML sitemap annotations can help when a site manages many URL variants centrally.

If you use XML sitemaps, each URL entry needs the appropriate alternate links, including itself, and the sitemap must declare the XHTML namespace. After publishing a change, validate the generated sitemap rather than assuming the CMS or deployment process wrote the expected data.

6. Make the report actionable

Group issues into a few clear classes: missing reciprocal link, missing self-reference, invalid code, broken target, redirect or canonical mismatch, and missing expected variant. Prioritize errors affecting important landing pages or large localized sections, then rerun the crawl after fixes. Keep a sample of each failure and the corresponding source and target URLs so developers can reproduce it.

Hreflang does not force Google to show a specific URL and does not replace normal language detection or canonicalization. It is a signal about equivalent language or regional versions. Treat a clean report as an implementation check, not a ranking guarantee.

Sources

About Deepak Parmar

Deepak Parmar is an SEO and automation expert with 7 years of experience in SEO, AI search, GEO, and web development. He specializes in helping brands improve visibility across Google, ChatGPT, Gemini, Perplexity, and other AI search platforms.

At ToolBoxKart, Deepak writes about SEO, AI, automation, search technology, and practical digital workflows, combining hands-on technical experience with real-world research and experimentation.

LinkedIn · YouTube

Latest published posts