Mis à jour le 1er novembre 2026. Cet article décrit désormais le comportement réel de PrestaShop 9.2.0, des thèmes Classic 3.1.2 et Hummingbird 2.1.2 et du module gsitemap 5.0.0, vérifié dans leur code source.
Une boutique PrestaShop vendue dans plusieurs langues doit réunir trois éléments : des contenus réellement traduits, des balises hreflang cohérentes et des sitemaps complets. PrestaShop en fournit une partie nativement. Le reste dépend de votre configuration et de vos contrôles. Cet article part du code de PrestaShop 9.2 pour distinguer ce qui est automatique de ce qui reste à faire.
Ce que fait PrestaShop 9.2 pour hreflang
Le gabarit des thèmes
Dans les deux thèmes fournis, Classic et Hummingbird, le fichier templates/_partials/head.tpl contient le même bloc :
{block name='head_hreflang'}
{foreach from=$urls.alternative_langs item=pageUrl key=code}
<link rel="alternate" href="{$pageUrl}" hreflang="{$code}">
{/foreach}
{/block}
La variable $urls.alternative_langs est remplie par la méthode getAlternativeLangsUrl() de classes/controller/FrontController.php. Son comportement est simple :
- si une seule langue est active, la liste est vide et aucune balise n’est produite ;
- sinon, elle parcourt toutes les langues actives de la boutique, y compris la langue courante ;
- l’URL de chaque langue vient de
Link::getLanguageLink(), puis les paramètres de requête sont nettoyés ; - sur les pages de liste (catégories, marques, fournisseurs),
ProductListingFrontControllerapplique aux URL alternatives la même règle de pagination qu’à la balise canonique.
Le code de langue utilisé
La clé hreflang est le champ « Code de langue » de chaque langue (language_code dans la table ps_lang), et non le code ISO. Sur notre boutique de test PrestaShop 9.2, il vaut fr pour le français et es-es, it-it, de-de pour les autres langues. Google accepte les deux formes et ignore la casse. Vérifiez seulement que ce code correspond au marché visé : en-us sur une boutique destinée au Royaume-Uni envoie un signal incohérent. Le champ se modifie dans International > Localisation > Langues.
Ce que le thème ne fait pas
| Point | Comportement natif 9.2 | Action |
|---|---|---|
| Autoréférence | Oui, la langue courante est listée | Aucune |
| Réciprocité | Oui, même liste sur chaque version | Aucune, sauf thème modifié |
x-default | Non produit | Surcharger le bloc head_hreflang |
| Langue sans traduction | Listée quand même | Désactiver la langue ou traduire |
Page en noindex | Balises produites quand même | Sans gravité, à garder cohérent |
| Thème tiers | Variable selon l’éditeur | Contrôler le code source |
Le point le plus fréquent est la langue activée trop tôt. PrestaShop copie le contenu existant dans chaque nouvelle langue. Une version espagnole peut donc afficher la description française, tout en étant déclarée es-es. Google indique que des versions dont le contenu principal n’est pas traduit sont traitées comme des doublons.
Ajouter x-default sans modifier le thème parent
x-default désigne la page proposée lorsqu’aucune langue ne correspond au visiteur. Le plus propre est de surcharger le bloc dans un thème enfant, dans templates/_partials/head.tpl :
{extends file='parent:_partials/head.tpl'}
{block name='head_hreflang'}
{foreach from=$urls.alternative_langs item=pageUrl key=code}
<link rel="alternate" href="{$pageUrl}" hreflang="{$code}">
{/foreach}
{if isset($urls.alternative_langs['fr'])}
<link rel="alternate" href="{$urls.alternative_langs['fr']}" hreflang="x-default">
{/if}
{/block}
Remplacez fr par le code de la langue choisie comme version par défaut. Testez sur une copie de la boutique, puis videz le cache Smarty. Un thème enfant préserve la modification lors des mises à jour du thème parent.
Ce que met le module gsitemap
Le module gsitemap 5.0.0, livré avec PrestaShop 9.2, génère les sitemaps depuis le back-office ou par une tâche cron. Son code montre l’organisation suivante :
- un fichier par boutique et par langue, nommé
{id_boutique}_{iso}_{n}_sitemap.xml, par exemple1_fr_0_sitemap.xml; - un fichier d’index
{id_boutique}_index_sitemap.xmlqui référence tous les fichiers ; - un nouveau fichier environ toutes les 25 000 URL, sous la limite de 50 000 fixée par Google ;
- pour chaque URL :
loc,lastmod(date de mise à jour du produit, de la catégorie, de la marque ou du fournisseur),changefreq,priorityet les images des produits.
Le module retient les produits actifs dont la visibilité n’est pas « nulle part » et les pages CMS actives marquées comme indexables. Il exclut les pages bloquées dans le robots.txt du cœur. Lorsque vous régénérez le robots.txt depuis le back-office, PrestaShop y ajoute une ligne Sitemap: vers le fichier d’index s’il existe.
Deux limites sont à connaître :
- Pas d’annotation hreflang dans le sitemap. L’en-tête XML déclare les espaces de noms
sitemapetimage, mais pasxhtml. Les relations entre langues reposent donc uniquement sur les balises HTML du thème. C’est suffisant : Google traite les trois méthodes (HTML, en-têtes HTTP, sitemap) comme équivalentes. priorityetchangefreqsont sans effet. Google indique qu’il ignore ces deux valeurs. Seullastmodest pris en compte, et seulement s’il est exact de façon constante.
Les règles hreflang à respecter
Les règles de Google Search Central se résument ainsi :
- chaque version liste toutes les versions, y compris elle-même ;
- si deux pages ne se citent pas mutuellement, les balises sont ignorées ;
- les URL sont complètes, avec protocole et domaine ;
- la langue suit la norme ISO 639-1, la région facultative la norme ISO 3166-1 alpha-2 ;
- une région seule (
be) n’est pas valide, une langue seule (fr) l’est ; - la balise canonique de chaque version pointe vers elle-même, pas vers une autre langue.
Google détermine la langue d’une page à partir de son contenu visible. Il n’utilise ni hreflang ni l’attribut lang pour cela. Gardez donc une seule langue par page, navigation comprise.
Pas de redirection automatique par langue
Évitez de rediriger le visiteur selon son adresse IP ou la langue de son navigateur. Googlebot explore le plus souvent depuis les États-Unis, sans en-tête Accept-Language. Il risque alors de ne jamais voir certaines versions. Proposez un sélecteur de langue visible à la place. Dans PrestaShop, vérifiez aussi qu’aucun module de géolocalisation ne redirige les robots.
Structure des URL
PrestaShop place la langue dans un sous-répertoire (/fr/, /es/) lorsque plusieurs langues sont actives et que les URL simplifiées sont activées. Google range cette structure parmi les options simples à maintenir. Les paramètres d’URL (?id_lang=2) sont déconseillés.
Contrôler votre boutique en 5 étapes
- Ouvrez le code source d’une fiche produit, d’une catégorie et d’une page CMS. Recherchez
hreflanget vérifiez la liste. - Comparez les codes de langue avec vos marchés réels.
- Testez chaque URL alternative avec
curl -sI: elle doit répondre 200, sans redirection. - Ouvrez le fichier d’index de sitemap, vérifiez qu’il liste un fichier par langue, puis soumettez-le dans Search Console.
- Après quelques semaines, consultez le rapport « Indexation des pages » et filtrez le rapport Performances par pays.
Un crawl externe signale en une passe les balises manquantes et les liens non réciproques. La réciprocité se vérifie par une règle déterministe. Une IA peut aider à classer les anomalies, mais ses propositions restent à relire. Pour les questions de facettes et de canonical, voir notre article sur le SEO technique PrestaShop, et pour une vue d’ensemble, le guide avancé.
Traduire avec l’IA sans créer de doublons
Le flux le plus sûr part du contenu source, produit un brouillon avec un service de traduction ou un modèle de langage, puis confie la relecture à une personne qui connaît le marché. Une traduction mot à mot donne souvent des formulations que personne ne recherche. Vérifiez les mots-clés par langue et par pays. Pour la recherche d’intentions, voir SEO sémantique PrestaShop avec l’IA, et pour la méthode de rédaction, IA et SEO produit.
Pour écrire les traductions dans la boutique, deux voies existent : un module qui alimente les champs par langue, ou un export, une traduction relue, puis un import contrôlé. Avant d’installer un module, vérifiez sa maintenance, sa compatibilité avec PrestaShop 9 et la façon dont il transmet vos données à un service externe.
N’activez une langue qu’une fois les pages prioritaires traduites. Tant qu’elle est active, elle figure dans les balises et dans le sitemap.
Questions fréquentes
PrestaShop 9 génère-t-il les balises hreflang nativement ?
Oui, avec les thèmes Classic et Hummingbird, dès que deux langues sont actives. Chaque page liste toutes les langues actives, y compris elle-même. La balise x-default n’est pas produite. Un thème tiers peut se comporter autrement : contrôlez le code source.
Faut-il ajouter hreflang dans le sitemap de gsitemap ?
Non, si les balises HTML sont correctes. Google considère les méthodes comme équivalentes et n’apporte aucun bénéfice supplémentaire à leur cumul. Deux méthodes divergentes créent en revanche des incohérences.
Pourquoi Google affiche-t-il la mauvaise langue dans un pays ?
Causes fréquentes : contenu non traduit sur la version ciblée, code de langue inadapté au marché, redirection automatique ou absence de x-default. Commencez par vérifier que la page ciblée est réellement traduite et indexée.
Les champs priority du module gsitemap doivent-ils être réglés ?
Ce n’est pas utile pour Google, qui ignore priority et changefreq. Concentrez-vous sur l’exhaustivité du sitemap et sur l’exactitude de lastmod.
Sources
- Code source local de PrestaShop 9.2.0 :
classes/controller/FrontController.php(getAlternativeLangsUrl),classes/controller/ProductListingFrontController.php,classes/Tools.php(génération durobots.txt), thèmes Classic 3.1.2 et Hummingbird 2.1.2 (templates/_partials/head.tpl), module gsitemap 5.0.0 (gsitemap.php). - Google Search Central, « Indiquer à Google les versions localisées de votre page », mise à jour du 21 septembre 2026 : https://developers.google.com/search/docs/specialty/international/localized-versions
- Google Search Central, « Gérer des sites multirégionaux et multilingues », mise à jour du 10 décembre 2025 : https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites
- Google Search Central, « Créer et envoyer un sitemap », mise à jour du 8 juillet 2026 : https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap