~/guides cat how-to-audit-hreflang-without-a-crawler.md
How to audit hreflang without a crawler
Validate a page's hreflang set in the browser, including reciprocity and x-default, using Scalpel SEO's live checks. No Screaming Frog needed.
Hreflang is fiddly, and the failures are quiet: get reciprocity or x-default wrong and Google ignores the whole cluster, serving the wrong language with no error anywhere. Most people reach for a desktop crawler to check it, but you don't need one to audit a page or two.
Scalpel SEO reads the hreflang set on the page you're on, flags the common mistakes, and can fetch each alternate to confirm it links back. Here's the workflow.
Step by step
Open a representative page and go to the Hreflang tab
Pick one page that should be part of an international set, say your English homepage, and open Scalpel SEO. Switch to the Hreflang tab. It lists every link rel="alternate" hreflang on the page as a table of language-region code and URL.
Confirm the page references itself
Your current URL should appear in the set and be highlighted as the self-reference. If the page isn't listed among its own alternates, that's your first bug: every page in a cluster must include itself, or the set is incomplete.
Fix the issues it flags
The tab reports duplicate language codes, a missing x-default, and invalid codes, like en_us with an underscore instead of the correct en-US, or a region that doesn't exist. These are the errors that make Google discard the cluster rather than just one link.
Run the live status check
Click the live status check. Scalpel SEO fetches each alternate URL and reports its HTTP status and whether it links back to the page you started on. Reciprocity is the rule people miss: if /fr/ points to /en/ but /en/ doesn't point back to /fr/, Google drops the pair. A 404 or a redirect on an alternate is just as fatal.
Dock the side panel and walk the set
Open Scalpel SEO as a side panel so it stays put, then visit each alternate in turn. Confirm every page returns the same, complete set with matching self-references. One page with a broken set breaks the cluster for everyone.
Export the table for the ticket
Export the hreflang table as CSV and attach it to the developer ticket, with the exact lang and href pairs and the issues found. It's far clearer than a screenshot.
What a correct set looks like
Every page in the cluster carries the same block, including a self-reference and an x-default:
<!-- Same block on the en-GB page, the fr page, and every other alternate -->
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />x-default is the fallback for any locale you don't explicitly target. The codes are language-REGION, so en-GB, not en_gb.