# Yoast SEO et WPML : pourquoi les métadonnées se dupliquent entre les langues

> Sur un site multilingue, le titre SEO ou la meta description personnalisés d'une page se recopient à l'identique dans chaque traduction. Voici pourquoi, et comment l'éviter.

- Auteur : WordPress Développement
- Publié le : 2021-05-23
- Mis à jour le : 2021-05-23
- Catégorie : Extensions
- URL : https://www.wpmoderne.fr/extensions/yoast-wpml-metadonnees-dupliquees-langues/

## L’essentiel

- WPML duplique les champs non déclarés traduisibles
- wpml-config.xml doit lister les métadonnées Yoast
- La synchronisation efface les traductions manuelles

Pourquoi le titre SEO d'une page fraîchement traduite affiche-t-il encore la formulation anglaise, alors que le contenu, lui, a bien été traduit en français ? La question revient régulièrement dans les tickets de support d'agences qui combinent WPML et Yoast SEO sur un même projet. Le symptôme est toujours le même : le corps de l'article change de langue, mais `_yoast_wpseo_title` et `_yoast_wpseo_metadesc` restent figés sur la valeur de la langue source.

Le problème ne vient ni de Yoast ni de WPML pris isolément, mais de la façon dont les deux extensions communiquent — ou plutôt ne communiquent pas par défaut. WPML gère la traduction au niveau des champs personnalisés via un fichier de configuration explicite. Sans cette déclaration, une métadonnée est traitée selon une règle par défaut qui, pour beaucoup de champs SEO, revient à la copier telle quelle dans chaque traduction plutôt qu'à permettre sa traduction indépendante.

## Comprendre le mécanisme de copie de WPML

WPML fonctionne en miroir : chaque traduction d'un article est un post distinct dans `wp_posts`, relié à l'original via la table `icl_translations`. Lors de la création d'une traduction, WPML copie l'ensemble des métadonnées du post source vers le nouveau post, puis applique à chacune une règle définie dans `wpml-config.xml` : ignorer, copier une seule fois, copier à chaque synchronisation, ou rendre traduisible dans l'éditeur de traduction.

Sans configuration explicite, un champ personnalisé inconnu de WPML est en général copié à chaque re-synchronisation du post original. C'est exactement ce qui se produit avec les champs Yoast si le thème ou l'extension d'intégration ne les a pas déclarés : chaque mise à jour de l'article source réinjecte sa méta description dans toutes les traductions, écrasant au passage tout travail de traduction déjà effectué sur ce champ.

## Déclarer les champs Yoast dans wpml-config.xml

La correction consiste à indiquer à WPML que les champs Yoast sont traduisibles indépendamment, et non de simples copies. Cela se fait dans un fichier `wpml-config.xml` placé à la racine du thème ou d'une extension dédiée :

> L'essentiel à retenir : WPML duplique les champs non déclarés traduisibles ; wpml-config.xml doit lister les métadonnées Yoast ; La synchronisation efface les traductions manuelles

```
<wpml-config>
  <custom-fields>
    <custom-field action="translate">_yoast_wpseo_title</custom-field>
    <custom-field action="translate">_yoast_wpseo_metadesc</custom-field>
    <custom-field action="translate">_yoast_wpseo_focuskw</custom-field>
  </custom-fields>
</wpml-config>
```

L'action `translate` indique que la valeur doit être proposée à la traduction dans l'éditeur de traduction avancé (ATE) ou en traduction classique, mais qu'elle ne sera plus jamais recopiée automatiquement depuis l'original une fois traduite une première fois. C'est la différence fondamentale avec l'action `copy`, adaptée à des champs techniques comme un ID de galerie ou une configuration de mise en page qui doit rester identique dans toutes les langues.

### Le cas particulier du mot-clé cible

Le champ `_yoast_wpseo_focuskw` mérite une attention particulière : un mot-clé cible pertinent en français n'a aucune raison d'être le même en anglais ou en espagnol. Le déclarer en `translate` plutôt qu'en `copy` évite qu'un rédacteur découvre, en ouvrant l'analyse SEO d'une traduction, un mot-clé qui n'a strictement aucun sens dans la langue cible.

## Vérifier après coup les métadonnées déjà polluées

Sur un site existant, la déclaration dans `wpml-config.xml` ne corrige que les futures synchronisations : elle ne répare pas les métadonnées déjà écrasées. Un script ponctuel, exécuté via WP-CLI, permet de repérer les traductions dont le titre SEO est strictement identique à celui de l'original, signe probable d'une copie jamais corrigée :

- Lister les post_id des traductions avec `wp post list --post_type=post --lang=fr` (si l'extension expose ce paramètre) ou en interrogeant directement `icl_translations`.
- Comparer, pour chaque paire original/traduction, la valeur de `_yoast_wpseo_title`.
- Marquer pour révision manuelle les paires identiques plutôt que de les réécrire automatiquement, car un titre volontairement identique reste possible.

## Les pièges qui persistent malgré la configuration

Même une fois `wpml-config.xml` correctement rempli, deux pièges classiques subsistent sur les projets d'agence. Le premier concerne les extensions tierces qui modifient les métadonnées Yoast via des filtres comme `wpseo_title` : si cette modification s'exécute après la lecture par WPML, elle n'est jamais prise en compte dans la logique de traduction et le contenu affiché en front peut diverger de ce qui est stocké en base.

Le second piège touche aux thèmes qui appellent directement `get_post_meta( $post_id, '_yoast_wpseo_title', true )` sans jamais passer par les fonctions WPML de résolution de traduction comme `apply_filters( 'wpml_object_id', $post_id, 'post', true )`. Le titre récupéré est alors celui du post courant, ce qui fonctionne en apparence, mais casse dès qu'un cache de fragment ou une requête personnalisée réutilise un post_id de la langue source par erreur.

> Sur nos projets multilingues, la règle qu'on applique systématiquement : tout champ personnalisé visible en front doit être explicitement classé dans wpml-config.xml avant la première synchronisation de contenu, jamais après. Corriger après coup coûte largement plus cher que déclarer en amont.

## En résumé

La duplication des métadonnées Yoast entre langues n'est pas un bug de l'une ou l'autre extension, mais une conséquence directe d'une configuration WPML incomplète. Déclarer explicitement les champs `_yoast_wpseo_title`, `_yoast_wpseo_metadesc` et `_yoast_wpseo_focuskw` en `translate` dans `wpml-config.xml` règle le problème pour les futures traductions. Sur un site déjà en production, un audit ciblé des métadonnées identiques entre original et traduction reste indispensable avant de considérer le sujet clos.
