All case studies

Wishfy · SEO + Développement

Architecture SEO multilingue — 4 langues, un domaine, zéro contenu dupliqué

Comment Wishfy a conçu une architecture i18n basée sur des sous-répertoires avec des hreflang corrects, des sitemaps par langue et un schema localisé.

EN, NL, DE, FR

Langues

100 % vérifiée

Réciprocité hreflang

4 par langue + 1 index

Sitemaps

Chaque page

Couverture schema inLanguage

Le défi

La plupart des sites multilingues se trompent sur l'un de ces trois points : des signalements de contenu dupliqué à cause de balises hreflang manquantes, des pages orphelines à cause de liens réciproques incomplets, ou un schema qui ignore totalement la langue. Wishfy avait besoin d'un site en quatre langues (anglais, néerlandais, allemand, français) qui maîtrise les trois dès le premier jour — non pas comme un correctif, mais comme une décision architecturale fondamentale.

La contrainte : un seul domaine (`wishfy.ai`), pas de sous-domaines, pas de TLD nationaux. Tout repose sur des sous-répertoires : `/en/`, `/nl/`, `/de/`, `/fr/`.

Stratégie de sous-répertoires

Les sous-répertoires l'emportent sur les sous-domaines pour le SEO multilingue lorsque vous construisez l'autorité de domaine en partant de zéro. Tout le capital de liens converge vers un seul domaine. Tout le budget de crawl reste dans une seule propriété. Google Search Console affiche une vue unifiée.

La couche de routage utilise le paramètre dynamique `[lang]` d'Astro. Chaque route de page commence par `[lang]/` — services, réalisations, blog, mentions légales. La racine `/` redirige vers la locale par défaut (`/en/`). Aucun contenu ne réside en dehors d'un sous-répertoire de langue.

Implémentation des hreflang

Chaque page émet un jeu complet de balises hreflang `<link>` dans le `<head>` — une pour chaque langue dans laquelle la page existe, plus un `x-default` pointant vers la version anglaise. L'implémentation utilise le `translationKey` de chaque entrée de contenu pour retrouver ses homologues dans les autres locales.

La réciprocité est vérifiée au moment du build : si `/en/services/seo` déclare une version alternative néerlandaise, `/nl/services/seo` doit déclarer la version alternative anglaise en retour. La réciprocité défaillante est le mode de défaillance hreflang numéro un, et nous le détectons avant le déploiement.

Les balises hreflang utilisent des URL complètes avec le domaine canonique — `https://wishfy.ai/nl/services/seo`, et non des chemins relatifs. La documentation de Google est explicite : les valeurs hreflang doivent être pleinement qualifiées.

Sitemaps par langue

Le site génère cinq sitemaps : un par langue (`sitemap-en.xml`, `sitemap-nl.xml`, `sitemap-de.xml`, `sitemap-fr.xml`) plus un index de sitemaps (`sitemap-index.xml`) qui référence les quatre. Chaque sitemap de langue ne contient que les URL de cette locale, avec des balises `<xhtml:link>` alternatives pointant vers les versions dans les autres langues.

Cette structure envoie un signal clair aux moteurs de recherche : voici toutes les pages en anglais, voici toutes les pages en néerlandais, et voici comment elles sont reliées. Pas d'ambiguïté, pas de bruit de sitemap multilingue.

Architecture des collections de contenu

Le contenu réside dans des répertoires préfixés par la locale au sein des collections de contenu d'Astro : `services/en/seo.mdx`, `services/nl/seo.mdx`. Chaque entrée porte un champ `locale` et un `translationKey` qui relie les traductions entre elles. Le schéma impose cela au niveau des types — vous ne pouvez pas créer une entrée de contenu sans déclarer sa langue.

Cette architecture signifie que les requêtes de contenu sont toujours sensibles à la locale. L'index des services pour le néerlandais n'affiche que les entrées néerlandaises. Le blog pour l'allemand n'affiche que les articles allemands. Il n'y a pas de filtrage approximatif en runtime — le modèle de données rend impossible le mélange accidentel de langues.

Couverture schema inLanguage

Chaque bloc schema JSON-LD du site inclut une propriété `inLanguage` correspondant à la locale de la page. Le schema Organization sur `/de/` déclare `"inLanguage": "de"`. Le schema Service sur `/fr/services/geo` déclare `"inLanguage": "fr"`. Cela indique à la fois aux moteurs de recherche et aux LLM exactement à quel contexte linguistique appartient chaque bloc de données structurées.

Le résultat

Quatre langues. Un domaine. Zéro signalement de contenu dupliqué dans Google Search Console. Réciprocité hreflang à 100 % vérifiée au moment du build. Sitemaps par langue avec des annotations alternatives correctes. Un schema qui sait dans quelle langue il s'exprime. Voilà à quoi ressemble une architecture SEO multilingue lorsqu'elle est intégrée aux fondations au lieu d'être greffée après le lancement.

Want results like these?

Let's talk about what we can build for you.

Contact us

Faisons de votre marque la réponse évidente

Demandez un audit gratuit. Nous vous montrons comment ChatGPT, Claude, Perplexity et Google AI voient votre entreprise — et où se trouvent les opportunités.