Building a Multilingual WordPress Website
Adding a language is easy. Running a site in two languages well is a content and structure decision first, and a plugin choice second.

Short answer
A multilingual WordPress website needs three decisions: a URL structure for each language, usually subdirectories such as /fr/; a method, either a translation plugin such as WPML, Polylang or TranslatePress, or WordPress multisite; and a translation process people will actually maintain. Correct hreflang tags then tell Google which version to show to whom.
A multilingual WordPress website shows the same site in two or more languages, with each language version on its own URL so search engines can index it and visitors can switch between them. WordPress does not do this on its own. You add it with a translation plugin or by running WordPress multisite, and you need a plan for who writes and maintains each language. The technical setup takes days. The translation process lasts the life of the site.
Language or country?
Decide first what you are actually targeting. A site for French speakers anywhere is a language decision. A site for customers in France, with French prices, delivery and legal terms, is a country decision. The answer shapes the URL structure and how much of the site differs between versions.
URL structure options
| Structure | Example | Good for | Trade-off |
|---|---|---|---|
| Subdirectory | example.co.uk/fr/ | Most businesses | Weaker country signal |
| Subdomain | fr.example.co.uk | Versions run by separate teams | Slightly more setup |
| Country domain | example.fr | Strong country targeting | Authority built separately per domain |
| URL parameter | ?lang=fr | Avoid | Harder to manage and to crawl |
For most UK businesses adding one or two languages, subdirectories are the right choice. All the plugins below support them.
Multilingual WordPress plugins compared
| WPML | Polylang | TranslatePress | Multisite | |
|---|---|---|---|---|
| How it works | Linked translations of each post | Linked translations of each post | Translate visually on the front end | Separate site per language |
| Free version | No, paid only | Yes, with a paid Pro version | Yes, with paid tiers | Built into WordPress |
| Editing experience | Translation editor in the admin | Translations edited like normal posts | Click and translate on the page | Each site edited separately |
| Best for | Complex sites, WooCommerce | Lighter sites, developers | Non-technical editors | Very different content per language |
Pricing, WooCommerce support and machine translation options differ by plan and change often, so check each vendor's current details: WPML, Polylang, TranslatePress. Hosted translation services such as Weglot work differently again: translation happens through an external service on a subscription, which is quick to set up but adds a recurring cost and a dependency outside your site.
My default for a business site with a custom content model is Polylang or WPML, because both handle custom post types, taxonomies and custom fields properly. TranslatePress suits sites where editors want to translate what they see on screen. Multisite suits organisations where each language version is managed by a different team with genuinely different content.
Hreflang
Hreflang tags tell Google that pages are language versions of each other, so it can show the French version to French searchers. The main plugins generate them automatically. What matters is that they are correct:
- every version must link to every other version, including itself
- tags must be reciprocal; Google's guidance on localised versions says one-way annotations may be ignored
- an x-default tag should point to the fallback version, often the English site or a language selector
- only link pages that are actually translated, not pages that fall back to English
Check them with a crawler after launch. Broken hreflang is common and silent.
Content that gets missed
Translation plugins translate posts and pages easily. These are the items that get forgotten:
- menus, widgets and footer text
- form labels, error messages and confirmation emails
- custom fields, which need configuring as translatable
- SEO titles, meta descriptions and image alt text
- WooCommerce emails, shipping descriptions and checkout text
- legal pages, which may need local versions rather than translations
- theme strings hard-coded in templates, which must be properly internationalised in code
That last point is why the theme matters. A custom theme should wrap every text string in WordPress translation functions so plugins can find it. Custom post types and custom fields explains the field side.
SEO for each language
Each language version needs its own keyword research, because people in another language search for different phrases, not translated ones. Titles and descriptions should be written for that language, not translated word for word. The URL slugs should be translated too. The general principles of an SEO-friendly website structure apply to each version.
A worked example
Hypothetical, to show the decisions in order. Say a Kent engineering supplier sells to UK customers and wants to reach buyers in France and Germany. It has 30 pages, 12 product categories and a contact form, but no online checkout.
- Targeting: French and German speakers, not specific countries, because prices are quoted on request. Language targeting is enough.
- URLs: subdirectories, so /fr/ and /de/, keeping all links pointing at one domain.
- Plugin: Polylang, because the content model uses custom post types and the editors are comfortable in the WordPress admin.
- Scope: translate the homepage, the 12 category pages, the contact page and the legal pages first. Leave the English blog untranslated and out of the language switcher on those pages.
- Translation: machine translation as a draft, then reviewed by a fluent speaker with technical knowledge, because a mistranslated specification is worse than none.
- Enquiries: form labels and confirmation emails translated, and enquiries routed to whoever handles that language.
That site launches with 17 translated pages per language, not 30, and every one of them is good. It is better than a full machine-translated copy nobody has read.
Keeping it maintained
The common failure is a second language that is launched and then neglected. New pages appear in English only, prices drift, and the French site quietly falls out of date. Before launching, decide who translates new content, how quickly, and whether incomplete translations are hidden or fall back to English.
Next step
If you are adding a language to an existing site or building a multilingual one, I set up the structure, plugin and hreflang as part of the WordPress development service. The WordPress website development guide covers the content model decisions underneath it.
Related services
Related reading
WordPress
WordPress Website Development: What Businesses Actually Need
The decisions that determine whether a WordPress site earns its keep are made in the first week, not the last. Here is what they are.
WordPress
WordPress Custom Post Types and Custom Fields
If you have more than three of something, it probably wants to be a content type. Here is how custom post types and fields turn a pile of pages into a structured site.
WordPress
What Makes a WordPress Website SEO Friendly?
Installing an SEO plugin is not SEO. Here is what actually makes a WordPress build search-friendly, and what has to happen during development.
SEO
How to Create an SEO-Friendly Website Structure
Structure is decided early and expensive to change. Here is how to get it right the first time.