91 000 pages en 30 langues sans WordPress Multisite
Votre client envoie un email à 21h : « On peut ajouter le japonais le trimestre prochain ? » Votre estomac se contracte. Le réseau Multisite traîne déjà avec 12 langues. La mise à jour de WPML a cassé vos mises en page polonaises le mois dernier. La table partagée wp_options a atteint 840 MB et votre environnement de staging prend onze minutes à cloner. Vous avez patché cette architecture trois fois, et chaque correction rend le prochain lancement de langue plus difficile. Nous avons exécuté exactement cette configuration — 91 000+ pages, 30 langues, charge d'entreprise — et avons tué à la fois Multisite et WPML. Pas de renouvellement de plugin. Pas de tables partagées. Pas de fuite entre langues. La nouvelle pile se déploie plus vite, coûte 40% moins cher à héberger, et s'adapte sans l'angoisse. Voici l'architecture que nous avons réellement déployée, ce qui s'est cassé lors de la migration, et les quatre décisions qui l'ont fait marcher.
Donc nous avons arrêté de faire comme ça. Aujourd'hui, notre système de production fournit 30 langues sur 118+ pages par locale — c'est 91 000+ pages dynamiques au total — sans WordPress Multisite, sans WPML, et sans l'anxiété de renouvellement annuel qui vient avec l'un ou l'autre. Ajouter une nouvelle langue prend environ 45 minutes et coûte environ 22$ en jetons API.
Cet article est la rupture complète. Architecture, outils, coûts, et le chemin de migration que nous avons affiné sur plusieurs projets d'entreprise.
Table des matières
- Pourquoi WordPress Multisite s'effondre à grande échelle
- Le vrai coût de WPML et des plugins WordPress multilingues
- L'architecture moderne : Next.js + next-intl + Headless CMS
- Configurer le pipeline de traduction
- Traduction IA : L'économie qui a tout changé
- Options de Headless CMS pour le contenu multilingue
- Étape par étape : Construire un site en 30 langues
- Chemin de migration : WordPress vers Headless multilingue
- Comparaison des coûts : WordPress Multisite vs. Headless multilingue
- Benchmarks de performance
- FAQ
Pourquoi WordPress Multisite s'effondre à grande échelle
WordPress Multisite a été conçu en 2010 pour exécuter plusieurs blogs dans une seule installation. Il n'a jamais été architecturé pour de véritables déploiements d'entreprise multilingues. Voici ce qui se passe quand vous le poussez :
Base de données partagée, problèmes partagés. Chaque site d'un réseau Multisite partage la même base de données wp_ avec des tables préfixées (wp_2_posts, wp_3_posts, etc.). Le partage de contenu entre sites est fragile. Une mise à jour de plugin sur un site peut entraîner des défaillances en cascade sur tout le réseau. J'ai vu un seul script de migration mal formé mettre en panne 12 variantes de langue simultanément.
La complexité administrative augmente. Chaque sous-site a son propre tableau de bord d'administration, mais ils ne sont pas vraiment isolés. Les super admins voient tout. Les admins du site voient trop peu. Il n'y a pas de moyen propre de donner à une équipe de contenu allemande l'accès à seulement leur contenu sans gestion de rôles personnalisée qui se casse à chaque grande mise à jour de WordPress.
La compatibilité des plugins est un minefield. Tous les plugins ne sont pas compatibles avec Multisite. Quand votre site espagnol a besoin d'un plugin de formulaire qui ne joue pas bien avec Multisite, vous êtes bloqué de choisir entre la capacité et la stabilité. Multipliez cette décision par 10+ langues.
Pas de véritable architecture API-first. Oui, WP REST API existe. Mais il n'a pas été conçu pour le type de livraison de contenu aware-locale, déployée sur edge, en cache CDN que les sites multilingues modernes exigent. Vous finissez par boulonner des couches de cache et des points de terminaison personnalisés qui deviennent leur propre fardeau de maintenance.
Le vrai coût de WPML et des plugins WordPress multilingues
Parlez de chiffres, parce que c'est là que l'histoire multilingue de WordPress devient inconfortable.
Licence WPML : 199$/an pour le plan Multilingual Agency. C'est le point d'entrée pour un travail multilingue sérieux. Et c'est par site — ou par réseau en Multisite, ce qui semble mieux jusqu'à ce que vous réalisiez que vous êtes verrouillé dans leur cycle de renouvellement pour toujours.
Impact de performance : 20-40% plus lent temps de chargement des pages. J'ai benchmarké cela sur plusieurs sites clients. WPML ajoute des requêtes de base de données à chaque chargement de page pour résoudre les traductions, basculer les langues et gérer les traductions de chaînes. Sur une page chargée de contenu, c'est des dizaines de requêtes supplémentaires. Vos scores LCP souffrent. Vos utilisateurs le remarquent.
Les coûts de gestion de traduction sont les vrais tueurs. Les agences de traduction professionnelles facturent 0,10-0,20$ par mot. Pour un site d'entreprise avec 50 000 mots de contenu sur 10 langues :
- Estimation basse : 50 000 × 0,10$ × 10 = 50 000$/an
- Estimation haute : 50 000 × 0,20$ × 10 = 100 000$/an
Et c'est juste la traduction initiale. Chaque mise à jour de contenu, chaque nouvelle page, chaque article de blog — tout doit repasser par le pipeline de traduction.
Il y a une meilleure façon.
L'architecture moderne : Next.js + next-intl + Headless CMS
Voici la pile que nous avons construite et testée au combat sur des déploiements d'entreprise :
┌─────────────────────────────────────────────┐
│ Couche Edge / CDN │
│ (Vercel / Cloudflare) │
├─────────────────────────────────────────────┤
│ Application Next.js │
│ ┌─────────────────────────────────┐ │
│ │ next-intl (i18n routing) │ │
│ │ /en/about /de/ueber-uns │ │
│ │ /ja/about /ar/about │ │
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ Headless CMS / Supabase │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ Contenu │ │ Tables de │ │
│ │ Modèles │ │ Traduction (i18n)│ │
│ └──────────┘ └──────────────────┘ │
├─────────────────────────────────────────────┤
│ Pipeline de traduction IA │
│ (Claude API → Révision → Publication) │
└─────────────────────────────────────────────┘
L'idée clé : séparez la gestion de contenu de la gestion de traduction de la présentation. Chaque couche peut évoluer indépendamment. Échangez le CMS sans toucher les traductions. Changez votre framework frontend sans migrer le contenu. Ajoutez des langues sans toucher le code.
Configuration next-intl
Voici à quoi ressemble notre configuration de routing en pratique :
// src/i18n/routing.ts
import { defineRouting } from 'next-intl/routing';
export const routing = defineRouting({
locales: [
'en', 'es', 'fr', 'de', 'pt', 'it', 'nl', 'sv', 'no', 'da',
'fi', 'pl', 'cs', 'ro', 'tr', 'ar', 'hi', 'ja', 'ko',
'zh-CN', 'zh-TW', 'th', 'vi', 'id', 'ms', 'ru', 'uk'
],
defaultLocale: 'en',
localePrefix: 'as-needed'
});
// src/middleware.ts
import createMiddleware from 'next-intl/middleware';
import { routing } from './i18n/routing';
export default createMiddleware(routing);
export const config = {
matcher: ['/', '/(de|es|fr|ja|...)/:path*']
};
Cela vous donne des structures d'URL propres : /en/services, /de/dienstleistungen, /ja/サービス. Chaque locale obtient ses propres pages générées statiquement, servies depuis l'edge. Pas de requêtes de base de données à l'exécution pour la résolution de langue.
Tables de traduction Supabase
Nous stockons les traductions dans Supabase avec un schéma simple mais efficace :
CREATE TABLE translations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
namespace TEXT NOT NULL,
key TEXT NOT NULL,
locale TEXT NOT NULL,
value TEXT NOT NULL,
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(namespace, key, locale)
);
CREATE INDEX idx_translations_locale ON translations(locale);
CREATE INDEX idx_translations_namespace ON translations(namespace, locale);
Ce schéma gère 30 langues × des milliers de clés de traduction sans transpirer. Les requêtes sont simples, cachables et rapides.
Configurer le pipeline de traduction
Le pipeline de traduction est là que cette architecture paie vraiment. Voici notre flux de travail :
- Le contenu est rédigé en anglais dans le headless CMS
- Un script de build extrait toutes les chaînes traduisibles dans des fichiers JSON
- L'API Claude traduit chaque fichier JSON par locale cible
- Une étape de révision (optionnelle, pour le contenu critique) permet aux éditeurs humains d'approuver les traductions
- Les traductions sont commitées au dépôt ou poussées vers Supabase
- Next.js reconstruit les pages affectées via ISR ou reconstruction complète
// scripts/translate.ts
import Anthropic from '@anthropic-ai/sdk';
import { readFileSync, writeFileSync } from 'fs';
const anthropic = new Anthropic();
async function translateFile(sourcePath: string, targetLocale: string) {
const source = JSON.parse(readFileSync(sourcePath, 'utf-8'));
const message = await anthropic.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 4096,
messages: [{
role: 'user',
content: `Translate the following JSON values (not keys) to ${targetLocale}.
Maintain the exact JSON structure. Use natural, professional language
appropriate for a corporate website. Preserve any HTML tags or
interpolation variables like {name}.
${JSON.stringify(source, null, 2)}`
}]
});
const translated = JSON.parse(message.content[0].text);
writeFileSync(
sourcePath.replace('/en/', `/${targetLocale}/`),
JSON.stringify(translated, null, 2)
);
}
C'est simplifié, mais ça capture l'idée principale. En production, nous traitons par lots les requêtes, gérons les limites de taux, validons la structure de sortie et exécutons les vérifications de qualité automatisées.
Traduction IA : L'économie qui a tout changé
C'est là que les mathématiques deviennent amusantes.
Traduction traditionnelle pour notre site (118+ pages, environ 50 000 mots par langue) :
- Par langue : 5 000-10 000$ (tarifs d'agence)
- 30 langues : 150 000-300 000$
- Mises à jour annuelles : 50 000-100 000$
Traduction IA avec Claude :
- Par langue : ~22$ en jetons API
- Temps par langue : ~45 minutes
- 30 langues : ~660$ au total, ~22,5 heures
- Ajouter une nouvelle langue : 45 minutes, 22$
Ce n'est pas une faute de frappe. Vingt-deux dollars par langue.
Maintenant, je veux être honnête ici. La traduction IA en 2026 n'est pas parfaite pour chaque cas d'usage. Les documents juridiques, le contenu médical, le texte marketing très nuancé — ces cas bénéficient toujours de l'examen humain. Mais pour les sites d'entreprise, les descriptions de produits, la documentation et le contenu de blog ? La qualité est remarquablement bonne. Nous avons eu des locuteurs natifs passer en revue notre contenu traduit par IA en japonais, arabe et allemand, et le retour était régulièrement « qualité professionnelle avec des préférences de formulation occasionnelles ».
L'avantage réel n'est pas seulement le coût — c'est la vitesse. Quand vous publiez une nouvelle page en anglais et la voulez disponible en 30 langues, vous regardez des heures, pas des semaines. Pas de coordination d'agence. Pas de gestion de mémoire de traduction. Pas de va-et-vient sur la terminologie.
Options de Headless CMS pour le contenu multilingue
Vous avez des options ici, et le bon choix dépend de votre équipe et de votre échelle. Voici ce que nous avons évalué :
| Plateforme | Support i18n | Auto-hébergé | Tarification (2026) | Meilleur pour |
|---|---|---|---|---|
| Sanity | Support champ natif | Cloud + auto-hébergé | Tier gratuit, 15+$/mo pro | Contenu structuré, collaboration en temps réel |
| Payload CMS | Natif, TypeScript | Oui | Gratuit / OSS | Équipes développeur voulant le contrôle total |
| Strapi | Plugin i18n | Oui | Gratuit / OSS | Équipes déjà dans l'écosystème Strapi |
| Storyblok | Support champ natif | Cloud uniquement | 106+$/mo | Édition visuelle, équipes marketing |
| Supabase (brut) | Schéma personnalisé | Oui | Tier gratuit, 25+$/mo | Flexibilité maximale, équipes développeur |
Pour nos projets de développement de headless CMS, nous recommandons généralement Sanity ou Payload pour les sites riches en contenu et Supabase directement quand l'équipe veut le contrôle maximal sur le pipeline de traduction.
La distinction importante : avec une approche headless, le CMS gère le stockage de contenu et le flux de travail éditorial. La gestion de traduction vit dans votre couche d'application. Cette séparation signifie que vous n'êtes jamais verrouillé dans l'idée du vendeur de CMS sur comment le contenu multilingue devrait fonctionner.
Étape par étape : Construire un site en 30 langues
Voici le processus réel que nous suivons pour les solutions de site multilingue d'entreprise :
Étape 1 : Définir votre stratégie de locale
Avant d'écrire du code, décidez :
- Quelles langues avez-vous réellement besoin ? (Vérifiez vos analytics)
- Allez-vous utiliser des URL localisées (
/de/kontakt) ou des sous-domaines (de.example.com) ? - Allez-vous avoir besoin de variantes régionales (
en-USvsen-GB) ou juste de codes de langue ? - Quel contenu est traduit vs. quel contenu est locale-spécifique ?
Nous utilisons par défaut le routing basé sur chemins (/de/, /ja/) parce que c'est plus simple pour le SEO, plus facile à déployer sur un domaine unique, et fonctionne naturellement avec le middleware Next.js.
Étape 2 : Configurer Next.js avec next-intl
Installer et configurer :
npm install next-intl
Structurez votre répertoire de messages :
messages/
├── en.json
├── de.json
├── ja.json
├── ar.json
└── ... (30 fichiers de locale)
Chaque fichier contient des traductions nommées :
{
"navigation": {
"home": "Accueil",
"about": "À propos",
"services": "Services",
"contact": "Contact"
},
"hero": {
"title": "Développement web d'entreprise",
"subtitle": "Construit pour la performance, conçu pour la mise à l'échelle"
}
}
Étape 3 : Construire le pipeline de traduction
Créez un script qui :
- Lit vos fichiers sources en anglais
- Les envoie à l'API Claude pour traduction
- Valide la structure JSON de sortie
- Écrit les fichiers de locale
- Exécute les vérifications de qualité automatisées (clés manquantes, variables d'interpolation cassées)
Étape 4 : Implémenter hreflang et SEO
C'est là que beaucoup d'implémentations multilingues échouent. Chaque page a besoin des balises hreflang appropriées :
// src/components/LocaleHead.tsx
export function LocaleHead({ currentLocale, path }: Props) {
const locales = routing.locales;
return (
<>
{locales.map((locale) => (
<link
key={locale}
rel="alternate"
hrefLang={locale}
href={`https://example.com/${locale}${path}`}
/>
))}
<link
rel="alternate"
hrefLang="x-default"
href={`https://example.com${path}`}
/>
</>
);
}
Étape 5 : Gérer les langues RTL
Si vous supportez l'arabe, l'hébreu ou d'autres langues RTL (nous supportons l'arabe), vous avez besoin de CSS directionnel :
// src/app/[locale]/layout.tsx
export default function LocaleLayout({ children, params: { locale } }) {
const direction = ['ar', 'he', 'fa'].includes(locale) ? 'rtl' : 'ltr';
return (
<html lang={locale} dir={direction}>
<body className={direction === 'rtl' ? 'font-arabic' : 'font-sans'}>
{children}
</body>
</html>
);
}
Tailwind CSS v4 supporte les variantes rtl: nativement, ce qui rend le stylage directionnel gérable.
Étape 6 : Déployer et surveiller
Avec Next.js sur Vercel, les pages de chaque locale sont générées statiquement et servies par les nœuds edge les plus proches des utilisateurs. Un utilisateur allemand accédant à /de/dienstleistungen obtient une réponse d'un nœud edge de Francfort en moins de 100ms. Pas de requête de base de données. Pas de lookup WPML. Juste du HTML statique.
Chemin de migration : WordPress vers Headless multilingue
Si vous êtes actuellement sur WordPress Multisite avec WPML, voici le chemin de migration que nous avons affiné sur plusieurs projets clients.
Semaines 1-2 : Export de contenu et audit
- Exporter tout le contenu via WP REST API (incluant les traductions WPML)
- Mapper les types de contenu aux modèles de headless CMS
- Identifier les traductions orphelines et les lacunes de contenu
- Documenter tous les modèles d'URL pour les redirections 301
Semaines 2-4 : Configuration du Headless CMS et import de contenu
- Configurer les modèles de contenu dans votre headless CMS choisi
- Importer le contenu source en anglais
- Configurer les tables de traduction Supabase
- Exécuter le pipeline de traduction IA pour toutes les langues cibles
Semaines 4-6 : Construction du frontend
- Construire l'application Next.js avec next-intl
- Implémenter tous les modèles de page
- Configurer les balises hreflang et la génération de sitemap
- Configurer le pipeline de traduction automatisé pour le nouveau contenu
Semaines 6-8 : Test, redirections et lancement
- Test multi-navigateur et multi-locale
- Implémenter les redirections 301 à partir des anciens modèles d'URL
- Soumettre les sitemaps mis à jour à Google Search Console
- Surveiller l'indexation et les modèles de trafic après le lancement
Durée totale : 4-8 semaines selon le volume et la complexité du contenu.
Comparaison des coûts : WordPress Multisite vs. Headless multilingue
Voici la rupture de coûts honnête pour un site d'entreprise en 10 langues sur 3 ans :
| Catégorie de coût | WordPress Multisite + WPML | Next.js + Headless + Traduction IA |
|---|---|---|
| Licence CMS (3 ans) | 0$ (WP est gratuit) | 0-540$ (Sanity pro) ou 0$ (Payload OSS) |
| Licence WPML (3 ans) | 597$ | 0$ |
| Traduction professionnelle (initiale) | 50 000-100 000$ | 220$ (IA, 10 langs × 22$) |
| Mises à jour traduction (3 ans) | 30 000-60 000$ | 500$ (coûts IA estimés) |
| Hébergement (3 ans) | 3 600-7 200$ (WP géré) | 0-720$ (Vercel free-pro tier) |
| Développement (construction initiale) | 30 000-60 000$ | 40 000-70 000$ |
| Maintenance (3 ans) | 18 000-36 000$ | 6 000-12 000$ |
| Coût total 3 ans | 132 197-263 797$ | 46 720-83 460$ |
Le coût de développement pour l'approche headless est légèrement plus élevé au départ — vous construisez une infrastructure personnalisée au lieu de configurer des plugins. Mais les économies continues sont dramatiques. Pas de renouvellement WPML. Pas de factures d'agence de traduction. Pas de maux de tête de maintenance Multisite.
Benchmarks de performance
Nous avons exécuté des audits Lighthouse sur notre site multilingue de production et comparé avec des implémentations équivalentes de WordPress Multisite + WPML :
| Métrique | WordPress + WPML | Next.js + next-intl |
|---|---|---|
| LCP (Largest Contentful Paint) | 2,8-4,2s | 0,8-1,2s |
| FID (First Input Delay) | 120-280ms | 10-40ms |
| CLS (Cumulative Layout Shift) | 0,12-0,25 | 0,01-0,05 |
| Temps jusqu'au premier octet (TTFB) | 800-1 400ms | 50-150ms |
| Score de performance Lighthouse | 45-65 | 95-100 |
| Pages par langue | ~118 | ~118 |
| Pages totales indexées | ~1 180 (10 langs) | ~91 000+ (30 langs) |
La différence de TTFB seule vaut la migration. Quand vos pages sont générées statiquement et servies depuis des CDN edge, vous n'attendez pas que PHP démarre WordPress, charge WPML, interroge la base de données, résolve les traductions et rend un modèle. Le HTML est juste... là.
FAQ
La traduction IA est-elle assez bonne pour les sites web d'entreprise ?
Pour la plupart du contenu d'entreprise — oui. En 2026, Claude et GPT-4 produisent des traductions que les locuteurs natifs évaluent comme une qualité professionnelle pour le contenu commercial, les descriptions de produits et la documentation. Nous avons déployé des traductions IA en 30 langues incluant le japonais, l'arabe, le coréen et le chinois (simplifié et traditionnel) avec retour positif des examinateurs parlant natif. Le contenu juridique, médical ou hautement réglementé peut toujours justifier l'examen humain, mais même là, l'IA + examen humain est bien moins cher que la traduction purement humaine.
Combien coûte d'ajouter une nouvelle langue à un site multilingue headless ?
Avec notre pipeline, ajouter une nouvelle langue coûte environ 22$ en jetons API Claude et prend environ 45 minutes de temps d'ingénierie. Cela couvre la traduction de tout le contenu de page, navigation, métadonnées et chaînes d'interface utilisateur. Comparez avec la licence par site de WPML plus 5 000-10 000$ en coûts de traduction professionnelle pour un site d'entreprise typique.
Quelle est la meilleure alternative WordPress Multisite pour les sites multilingues ?
Pour les déploiements d'entreprise, un headless CMS (Sanity, Payload ou Strapi) associé à Next.js et next-intl fournit l'architecture la plus flexible et performante. Vous obtenez une vraie séparation contenu/présentation, des pages déployées sur edge et la capacité de gérer les traductions indépendamment de votre CMS. Pour les sites plus simples de moins de 50 pages, Webflow avec ses fonctionnalités de localisation peut fonctionner, mais vous atteindrez rapidement les limites à l'échelle d'entreprise.
Comment gérez-vous le SEO pour 30+ versions de langue ?
Chaque page génère des balises hreflang appropriées pointant vers tous les variants de langue plus une balise x-default. Nous générons des sitemaps XML par locale et les soumettons à Google Search Console. Chaque locale obtient son propre ensemble de balises de titre, descriptions et balises Open Graph — le tout traduit via le pipeline IA. Google a indexé plus de 91 000 pages sur nos 30 variants de langue.
Pouvez-vous migrer de WordPress Multisite vers headless sans perdre les classements SEO ?
Oui, mais ça nécessite une planification soignée. Les étapes critiques sont : mappage exhaustif de redirection 301 des anciennes URL vers les nouvelles URL préfixées par locale, implémentation appropriée de hreflang dès le départ, et soumission immédiate de sitemaps mis à jour après le lancement. Nous voyons généralement une période de transition d'indexation de 1-3 semaines, suivie d'améliorations de classement dues aux meilleurs scores de Core Web Vitals.
Quelle est la meilleure alternative WPML en 2026 ?
next-intl pour les applications Next.js, ou nuxt-i18n pour les applications Nuxt. Les deux gèrent le routage par locale, le formatage de messages et les métadonnées SEO nativement dans la couche framework — sans la surcharge de performance d'un plugin WordPress. Contrairement à WPML, il n'y a pas de frais de licence annuels, pas de surcharge de base de données, et pas de problèmes de compatibilité avec d'autres plugins. La logique i18n vit dans votre code d'application où elle appartient.
Comment gérez-vous la qualité de traduction sur 30 langues ?
Nous utilisons une approche multi-couches : traduction IA comme couche de base, vérifications de qualité automatisées (validation de structure JSON, préservation de variables d'interpolation, comparaison de longueur), et révision humaine optionnelle pour le contenu à haute visibilité comme les titres de page d'accueil et les CTA. Nous maintenons également un glossaire de terminologie par langue qui est passé à l'IA comme contexte, garantissant que les termes de marque, les noms de produits et le vocabulaire technique sont gérés de manière cohérente.
Cette approche est-elle viable pour les sites avec des mises à jour fréquentes de contenu ?
Absolument — c'est en fait mieux pour les mises à jour fréquentes que WPML. Quand vous publiez ou mettez à jour une page en anglais, le pipeline de traduction peut s'exécuter automatiquement via un webhook. Les nouvelles traductions sont générées en minutes, pas en jours. Avec ISR (Incremental Static Regeneration) dans Next.js, les pages mises à jour en ligne sans reconstruction complète du site. Nous avons eu des clients publiant des articles de blog quotidiens qui apparaissent en 30 langues dans l'heure, entièrement indexés par les moteurs de recherche le même jour.