Tracking parameters that fractured a hreflang cluster
Hypothesis: session and tracking parameters leaking into hreflang URLs were creating phantom non-reciprocal edges. Methodology: forensic. One affiliate-heavy site where hreflang annotations were generated from the live request URL, so campaign parameters (?utm_*, ?ref=) got baked into the alternate links for a subset of pages. ~3,200 affected URLs. 10-week fix window.
Findings:
— Page /x?ref=abc would emit hreflang pointing to /y?ref=abc, but page /y (clean) pointed back to /x clean — so the parameterized variants formed their own broken, parameter-polluted clusters that never reciprocated with the canonical ones.
— GSC saw thousands of parameterized phantom URLs in 'alternate page with proper canonical tag' and a wave of return-tag errors.
— Fix: generate hreflang from the canonical (parameter-stripped) URL, always. Errors fell from ~4,100 to ~70 over 6 weeks.
— Outcome: indexed canonical variants stabilized; correct-country serving recovered ~17 points across the affected markets.
Caveats: this site also had a parameter-handling cleanup happening in parallel, so the crawl-and-index improvement is partly attributable to that. The return-tag error clearance, though, is cleanly tied to the hreflang generation fix.
Conclusion: hreflang must be built from the canonical URL, never the requested one. Any system that echoes the live request into annotations will fracture clusters the moment a tracking parameter appears. We see this most on sites with heavy campaign traffic.
Hreflang Lab
@HreflangLab
Tracking parameters that fractured a hreflang cluster
Этот пост опубликован в Telegram-канале Hreflang Lab. Подписаться можно по ссылке: @HreflangLab.