Insights / Articles techniques
Comment gérer un blog multilingue avec Sveltia CMS
Un flux pratique pour modifier les articles source en japonais dans Sveltia CMS, générer des PR de traduction avec GitHub Actions et GitHub Copilot, et publier des pages statiques localisées plus utiles pour le SEO qu'une simple traduction d'interface.

Sommaire
- Structure utilisée
- Quand la traduction d’interface suffit
- Bénéfices SEO des pages localisées
- 1. Chaque langue est directement crawlable
- 2. Les métadonnées sont localisées
- 3. hreflang relie les variantes
- 4. RSS et sitemap deviennent multilingues
- Rôle de Sveltia CMS
- Règles pour Copilot
- Leçons des PR
- Références
- Résumé
Acecore édite principalement ses contenus en japonais, mais publie le blog en 9 langues. Le point essentiel est que traduire le texte affiché et publier de vraies pages localisées sont deux choses différentes.
La traduction du navigateur ou d’un widget peut aider le lecteur. Mais elle ne génère pas d’URL /fr/blog/.../, de métadonnées localisées, de RSS, de sitemap ou de liens hreflang.
Si le multilingue vise aussi la recherche organique, la traduction doit faire partie du processus de publication.
Structure utilisée
- Source japonaise :
src/content/blog/{slug}.md - Traductions :
src/content/blog/{locale}/{slug}.md - URLs :
/blog/{slug}/,/en/blog/{slug}/,/fr/blog/{slug}/ - Édition : Sveltia CMS
- Traduction : PR GitHub Copilot
- Publication : build et revue
Sveltia CMS sert d’interface d’édition pour la source japonaise. Les traductions passent par des pull requests afin de garder un historique, une revue et une validation CI.
Quand la traduction d’interface suffit
Elle convient pour une lecture interne, une consultation ponctuelle, des écrans d’administration, ou des pages qui ne visent pas de trafic de recherche.
Ce modèle est léger, car aucun fichier traduit n’est maintenu. Mais il ne crée pas non plus de pages indexables par langue.
Bénéfices SEO des pages localisées
Les moteurs de recherche, les aperçus sociaux et les lecteurs RSS travaillent avec des URLs et du HTML.
Si seule la page japonaise existe, le navigateur peut la traduire pour l’utilisateur, mais le title, la description, le RSS et le sitemap restent ceux de la page japonaise.
Avec des pages statiques, chaque langue a sa propre URL.
/blog/copilot-translation-pipeline/
/en/blog/copilot-translation-pipeline/
/fr/blog/copilot-translation-pipeline/
/de/blog/copilot-translation-pipeline/
1. Chaque langue est directement crawlable
Google peut traiter JavaScript, mais sa documentation rappelle aussi les limites de JavaScript et recommande le rendu statique ou côté serveur comme solution plus stable. Pour les autres crawlers et lecteurs RSS, le HTML initial traduit est encore plus important.
2. Les métadonnées sont localisées
Le frontmatter peut être traduit :
title: "Comment gérer un blog multilingue avec Sveltia CMS"
description: "Flux avec Sveltia CMS et GitHub Copilot pour créer des PR de traduction."
Cela influence les résultats de recherche, l’OGP, les cartes liées et le RSS.
3. hreflang relie les variantes
Google recommande hreflang lorsque différentes URLs correspondent à différentes langues ou régions. Avec une traduction seulement côté interface, il n’existe pas d’URL localisée à relier.
4. RSS et sitemap deviennent multilingues
Des fichiers traduits permettent de générer /fr/rss.xml et des URLs localisées dans le sitemap.
Rôle de Sveltia CMS
Sveltia CMS ne traduit pas. Il garde simple l’édition de la source japonaise :
- articles japonais
- auteurs
- tags
- JSON source japonais
- images
- frontmatter comme date, FAQ et linkCards
La mise en place du CMS est détaillée dans le Guide d’installation de Sveltia CMS.
Règles pour Copilot
La PR de traduction doit préserver les identifiants et localiser le texte.
Keep:
- slug
- image path
- author id
- tag ids
- external URLs
- code blocks
Localize:
- title
- description
- FAQ
- body text
- internal blog URLs when locale-specific URLs exist
Leçons des PR
- Les anciens articles mentionnaient encore Pages CMS après la migration vers Sveltia CMS.
- Si
datereste ancien, l’article ne remonte pas en tête du blog. - Le slug doit rester identique entre les langues.
- Les liens internes doivent respecter la locale du lecteur.
- L’IA accélère la traduction, mais la relecture reste nécessaire.
Références
- Google Search Central: Localized Versions of your Pages
- Google Search Central: Managing Multi-Regional and Multilingual Sites
- Google Search Central: JavaScript SEO Basics
- Google Search Central: Spam Policies
- Guide d’installation de Sveltia CMS
Résumé
La traduction d’interface aide à lire une page. Les pages statiques localisées transforment chaque langue en véritable contenu du site.
Sveltia CMS gère le japonais, GitHub Copilot crée les PR de traduction, et Astro build valide le résultat avant publication.
Translation Workflow
Flux de Sveltia CMS jusqu’à la PR de traduction
Le japonais reste la source of truth et la traduction est séparée dans le processus de PR GitHub.
Modifier uniquement le japonais
Mettre à jour `src/content/blog/{slug}.md` avec Sveltia CMS ou Markdown.
Détecter le commit du CMS
Faire du prefix `cms:` et du path modifié le contrat côté GitHub Actions.
Créer une PR de traduction
Transmettre à Copilot le source path, la locale et les règles de traduction afin qu’il génère les fichiers traduits.
Appliquer après le build
Intégrer dans main uniquement les PR qui passent Astro build, Pagefind et la vérification des liens.
Différence entre traduction de l’interface et génération de pages propres à chaque langue
Traduction de l’interface
- Le navigateur ou le widget de traduction de l’utilisateur traduit au moment de l’affichage
- L’URL, title, description et OGP restent souvent dans la langue source
- Il est difficile de publier des pages par langue dans sitemap, RSS et hreflang
- Le texte des URL partagées et des résultats de recherche reste proche de la langue source
Pages multilingues statiques
- Des URL par langue comme `/{locale}/blog/{slug}/` peuvent être publiées
- title, description, corps, FAQ et données structurées peuvent être propres à chaque langue
- hreflang indique aux moteurs de recherche la relation entre les versions linguistiques
- RSS, sitemap, liens internes et Search Console peuvent être gérés par langue
Décisions à prendre lors de l’adoption
- Traiter l’article japonais comme source de traduction
- Conserver le même slug pour les fichiers traduits et l’article japonais
- Fixer les conditions de déclenchement du workflow, comme les commits `cms:`
- Ne pas casser les URL, path d’images, blocs de code ni ID de tags pendant la traduction
- Vérifier au build les sorties hreflang, canonical, RSS et sitemap
Pages associées
FAQ
La traduction d'interface suffit-elle ?
Elle est utile pour lire une page, mais elle ne crée pas d'actifs par langue pour le SEO, les flux RSS, les sitemaps et les liens internes.
La traduction par IA est-elle mauvaise pour le SEO ?
Le problème n'est pas l'IA elle-même, mais la publication massive de pages sans valeur. Terminologie, faits, liens et naturel doivent être relus.
Les pages traduites sont-elles du contenu dupliqué ?
Google indique que des pages localisées ne sont considérées comme doublons que si le contenu principal n'est pas traduit. Il faut relier les variantes avec hreflang.