
Rules and ethics
Bilingual URL structure in Wales: prefix, domain or parameter
Bilingual technical SEO Wales starts with the URL pattern: compare path prefixes, separate domains and parameters, then see how hreflang and migration follow.
What to take away
- Choose the URL pattern firstit decides how you segment analytics, write robots rules, split sitemaps and annotate hreflang.
- A path prefix such as Cardiff Council's /ENG/ and /CYM/ is readable, easy to segment and easy to block or allow in robots.txt.
- Separate domains, as the Senedd uses with senedd.wales and senedd.cymru, give a clear Welsh identity but split authority and add cost.
- A language query parameter such as ?lang=cy is harder to canonicalise and harder to report on.
- Whatever the pattern, hreflang stays reciprocal and self-referencing, and each page keeps a self-canonical.
- If you inherit a parameter-based estate, plan a migration with a URL map and 301 redirects.
Which URL pattern should a bilingual Welsh site use?
Use a path prefix unless you have a reason to split domains. URL structure is the first decision on a bilingual estate, because every later task, from hreflang to analytics, inherits it. The table sets four patterns against the checks that decide the choice.
| Pattern | Example | What works | What it costs |
|---|---|---|---|
| Path prefix | cardiff.gov.uk/ENG/ and /CYM/ | Readable, easy to segment in analytics, easy to block or allow in robots.txt | Both languages share one domain and one crawl budget |
| Separate domains | senedd.wales and senedd.cymru | Clear Welsh identity, cross-domain hreflang between pairs | Splits authority and adds cost |
| Subdomain | A Welsh subdomain such as cy.example.org | Keeps the Welsh site separate | Splits authority and adds cost |
| Query parameter | ?lang=cy | Quick to build | Harder to canonicalise and harder to report on |
Language URL Patterns
Prefix /en/ /cy/
- Readability
- High
- Analytics segmentation
- Easy
- robots.txt control
- Easy
- Authority
- Shared
- Canonicalisation
- Simple
Subdomain or ccTLD
- Readability
- Medium
- Analytics segmentation
- Moderate
- robots.txt control
- Moderate
- Authority
- Split
- Canonicalisation
- Simple
Query ?lang=cy
- Readability
- Low
- Analytics segmentation
- Hard
- robots.txt control
- Hard
- Authority
- Shared
- Canonicalisation
- Hard
The Welsh Language (Wales) Measure 2011 opens with a Part on the official status of the Welsh language, which is why the Welsh version should be built as a full estate rather than an add-on. No pattern rescues a weak Welsh page. A bilingual site is two indexable estates sharing a domain, a CMS and a crawl budget, so Welsh pages that are thinner, slower or blocked drag the whole estate down whichever URL shape you choose.
Three questions that settle the choice
Ask who must run the estate, who must read its reports and how distinct the Welsh identity needs to be. The answers usually point to a prefix, and they point away from it only when identity outweighs the extra work of two properties.
Start with the editors. If one team writes both versions in one CMS, a prefix keeps the pair in one workflow and one template. Separate domains are easier to justify when the Welsh site has its own owners, its own publishing rhythm and its own audience.
Then ask who reads the reports. A prefix lets one analytics property segment English and Welsh traffic by path, while separate domains need two properties to be read side by side. Finally, ask whether the brand needs a clearly Welsh address, as a national body might.
Path prefixes: how Cardiff Council separates English and Welsh
Cardiff Council runs cardiff.gov.uk with English and Welsh versions under /ENG/ and /CYM/ path prefixes. Service pages, navigation and metadata are paired by language, and the language switch keeps users in the same section. The prefix also makes it easy to segment English and Welsh traffic in analytics.
Prefixes are readable and simple to block or allow in robots.txt, which matters when you must confirm that the Welsh path is not accidentally disallowed. Confirm too that redirects from old Welsh URLs land on the correct Welsh page, not the English one.
Treat the prefix as a rule the CMS enforces. One content record with two language fields lets editors write both versions in one workflow, and the CMS then generates paired URLs, paired metadata and paired hreflang. Fewer manual steps means fewer broken pairs.
A generic market entry checklist needs adapting for a two-language estate. The pairing rule is language, not market, and the prefix is where that rule becomes visible to crawlers.
Separate domains: the Senedd's senedd.wales and senedd.cymru
The Senedd runs senedd.wales in English and senedd.cymru in Welsh. The two domains use cross-domain hreflang to link each page to its pair, and the language switch gives users the same content in the other language. This pattern suits a national body that wants a clear Welsh identity.
The cost is split authority. A separate-domain estate has two sites to build signals for and two sets of reports to read. A subdomain or country-code domain also works, but it splits authority and adds cost in the same way.
Because the pair sits on different hosts, each hreflang set must name the full URL on both hosts, and both sides must carry it. Check the return link from the Welsh domain as carefully as the one from the English domain.
Why a language query parameter loses to a prefix
Avoid query parameters for language, such as ?lang=cy. They are harder to canonicalise and harder to report on than a path. If you inherit a parameter-based estate, plan a migration with redirects rather than living with the pattern.
A prefix lets a crawl tag each URL by language, template and section. Start with a Screaming Frog or Sitebulb crawl that separates English and Welsh URLs, then compare index coverage, response codes and canonical targets across the two sets. Differences that look cosmetic often signal a structural fault.
How the pattern shapes your hreflang set
Hreflang tells search engines which language version to serve, and the pattern only changes the URLs inside it. For English and Welsh the codes are en and cy. If you target regional variants, en-GB is the usual choice for the English version.
Reciprocal Hreflang Pair
- English page lists Welsh page
- English page lists itself
- Welsh page lists English page
- Welsh page lists itself
- x-default set once
Every pair must be reciprocal. The English page lists the Welsh page, the Welsh page lists the English page, and each page also lists itself. A one-way annotation is ignored: if the English page points to the Welsh page, the Welsh page must point back, or the cluster fails.
For example, the same reciprocal set appears on both pages:
link rel="alternate" hreflang="en-GB" href="https://www.example.org/en/service"
link rel="alternate" hreflang="cy" href="https://www.example.org/cy/gwasanaeth"
link rel="alternate" hreflang="x-default" href="https://www.example.org/en/service"
Replace the example URLs with your own. Keep the set identical on both sides.
Use x-default on the page you want shown when no language matches. For most Welsh organisations that is the English page, but a bilingual homepage can serve as the default if it routes users correctly. The value is the fallback for users whose browser language matches none of your versions.
The annotations can live in the head, in HTTP headers or in the sitemap. Pick one method and keep it consistent, because mixing methods across templates invites errors. Do not rely on browser language detection alone: it is a user experience aid, not a ranking signal.
Run a validation pass on every template. Check that the Welsh page returns 200 and that its hreflang set matches its English pair exactly. A single missing return link can void the cluster. A full hreflang audit for multilingual sites covers the wider tests.
Canonicals, sitemaps and robots rules for the chosen pattern
Each language version should be self-canonical: the English page canonicalises to itself and the Welsh page canonicalises to itself. Cross-language canonicals are wrong and will suppress one version. With a prefix the rule is one line in the template, while separate domains need the same check on both hosts.
Sitemaps should list both language versions, with xhtml:link alternates if you use the sitemap method for hreflang. Split sitemaps by language if the estate is large, which makes index coverage reporting clearer in Search Console. Follow Google's sitemap rules on format, size and submission, then confirm both files are fetched and parsed without errors.
Crawl checks should cover status codes, redirect chains and robots.txt rules for both language paths. On a large Welsh public-sector site, thousands of thin Welsh pages can pull crawl away from the pages that need it, so keep an eye on the share of crawl each path receives.
Set up a technical SEO review methodology that runs these checks on a schedule. Bilingual estates drift when templates change and no one re-tests the pairs.
Migrating from ?lang=cy to /cy/: a worked example
A Cardiff-based body migrates from ?lang=cy to /cy/. The plan lists 1,200 Welsh URLs, maps each to its new path and sets 301 redirects. Without the mapping step, half the Welsh estate would 404. The sequence below keeps the pairs intact.
- List all 1,200 Welsh URLs, with their English pairs.
- Map each Welsh URL to its new path under /cy/.
- Set a 301 redirect from every old URL to its mapped Welsh page.
- Update hreflang on both sides of every pair.
- Resubmit both sitemaps.
- Monitor index coverage for eight weeks.
Metadata moves with the URL. Each page keeps its own title, description and Open Graph locale, cy_GB on the Welsh page and en_GB on the English one, so social previews match the page language. A Welsh page with an English title tag is a mismatch, and it weakens relevance signals.
Decide early whether you need Screaming Frog, Sitebulb, a log analyser such as GoAccess, or a combination. A technical SEO tool implementation plan should cover how you segment by language, how often you crawl and who reads the output.
A pre-release checklist for bilingual URLs
Check every item below before a release, after a migration and at least twice a year. The list assumes an English and a Welsh version of shared content under whichever pattern you chose, and the first four items catch most indexing faults.
Bilingual Technical SEO Checklist
- Every English URL has a Welsh pair
- Hreflang reciprocal and self-referencing
- Language codes en-GB and cy correct
- Each language version self-canonical
- Both language sitemaps submitted and valid
- Welsh URLs not blocked or noindexed
- html lang matches page language
- Every English URL has a Welsh pair, and every Welsh URL has an English pair.
- Hreflang annotations are reciprocal and self-referencing on both sides.
- Language codes are correct
en-GBandcy, withx-defaultset once. - Both language sitemaps are submitted, valid and free of errors.
- Welsh URLs are not blocked by robots.txt or noindex rules.
- Titles, descriptions and Open Graph locales are written in the page language.
html langmatches the page language on every template.- Navigation, breadcrumbs and internal links stay within the same language.
- Redirects from legacy Welsh URLs land on Welsh pages, not English ones.
- Search Console coverage is reported separately for both language paths.
Public bodies carry one more item. GDS explained in 2018 that every new public sector website needs to meet accessibility standards and publish a statement saying they have been met, so keep that statement available in both languages.
Finally, agree what good looks like. A technical SEO quality checklist signed off by both language leads prevents the usual drift, where Welsh pages quietly fall behind after a template change.
Common questions
Can I use a subdomain for the Welsh version?
Should the language switch keep users in the same section?
Can I use en instead of en-GB for the English pages?
en-GB is more precise for a UK audience and is the better choice when you also serve other English-speaking markets.


