Choose locales from real content and operating commitments
A locale is the language and, only when it matters, the regional audience for a page. Keep a matrix of page type, language, region, owner, content differences, URL pattern, and fallback. Add a regional version only when its main content or commercial terms genuinely differ and someone can keep it current; a generic language page is often the better choice.
Do not translate only headers and footers around unchanged main content and call it local. Google cautions that boilerplate-only translation can create a poor experience and repeated results. Review priority copy, prices, availability, policies, support, and transactional messages. If a page cannot be supported yet, omit it rather than publish a misleading shell.
Record intended code, public URL pattern, owner, canonical target, fallback, and launch state in one governed table.
Use stable URLs and let people choose
Give each language version a direct URL that a browser and crawler can request. Google recommends different URLs rather than changing language with cookies or browser settings. Country domains, subdomains, and subdirectories can work; choose the pattern your team can govern consistently. Google lists URL parameters as not recommended for URL-based segmentation.
Show a language or region choice and keep a visitor on the version selected. Google advises against automatic redirects based on guessed language and says dynamic changes can prevent discovery of variations. Do not use IP location as the deciding mechanism; Google says it is difficult, generally unreliable, and may limit crawling. Preserve direct URLs and an easy way to switch back.
Open each locale URL in a clean session and confirm it serves that version without a location-based bounce.
Build complete, valid hreflang clusters
An hreflang cluster connects equivalent locale URLs. Google supports HTML link elements, HTTP Link headers for non-HTML responses, or XML sitemap entries, and treats the methods as equivalent. Choose the one your release process can generate and audit. Every alternate URL must be fully qualified, including https, and resolve to the intended public page.
On every equivalent page, publish the same set: a self-reference and every supported alternative. Google says tags can be ignored when pages do not point to each other and identifies missing return links as a common mistake. Generate clusters from shared data, not hand-edited templates. If a page is unavailable in a locale, do not invent a near-match merely to fill the grid.
For every listed pair, verify both pages expose the same alternate set, including their own URL.
Use the HTTP Link-header method for localized PDFs when HTML head markup is unavailable.
Select language tags with the search implementation in mind
Language tags are identifiers such as en, en-GB, or zh-Hant. BCP 47 is the IETF best-current-practice framework, and the IANA Language Subtag Registry is the reference registry W3C directs authors to. Start with a primary language, then add script or region only when it distinguishes the content. W3C advises keeping tags as short as the necessary distinction allows.
For Google hreflang, follow Google’s supported-code rules, not every syntactically valid BCP 47 tag. Google requires a language first, never a region alone, and documents ISO 639-1 language codes with optional ISO 3166-1 Alpha-2 regions. It explicitly says es-419 is unsupported for hreflang. Check codes during implementation and reject improvised values in deployment checks.
Use en-GB only when the UK version differs meaningfully; otherwise a generic en version is simpler.
Keep canonical, fallback, and content signals compatible
Canonicalization chooses a preferred URL among duplicate or very similar URLs; hreflang identifies intentional alternatives. For independent locale pages, use a self-referential canonical or a canonical in the same language. Google recommends a same-language canonical or the best available substitute. A cross-language canonical can consolidate away the alternate you intended to present.
Use x-default for people whose browser language does not match a listed version, especially with a language or country selector. It is a fallback, not a replacement for real alternatives. Decide whether it is a neutral selector or default-language page, make it usable, and avoid automatic-redirect loops. Keep each page’s visible main content clearly one language.
Compare requested URL, final URL, canonical, indexability, hreflang targets, and sitemap entry on each sample.
Test the release as a route-and-content change
Before deployment, sample each template type: home, category, commercial, editorial, help, and localized files. Inspect the delivered head, headers, or sitemap according to your chosen method. Confirm public responses, final HTTPS URLs, self and reciprocal alternates, canonical targets, visible local content, a working switcher, and no accidental noindex or robots block.
After release, inspect representative pages in Search Console. Its live test checks whether Google can access a current page; the indexed report can show the selected canonical. The live test cannot predict the selected canonical or guarantee indexing. Keep a dated release log with tested clusters, exceptions, owners, and retest evidence.
Block release when a priority page redirects incorrectly, has a broken reciprocal pair, conflicts with canonical, or cannot be selected.
Version locale configuration and retain the prior URL and annotation map for a safe shared-template reversal.
