Le WordPress d'aujourd'hui, décodé pour les développeurs

SEO & GEO

Elementor et l’attribut canonical : quand le page builder réécrit le head

Une balise canonical erronée apparaît sans explication sur des pages Elementor. Voici où se cache la génération concurrente de cette balise et comment la reprendre en main.

Par WordPress Développement • 9 octobre 2022 • 5 min de lecture • Aucun commentaire
Elementor et l'attribut canonical : quand le page builder réécrit le head

Deux balises <link rel="canonical"> cohabitent parfois dans le <head> d’une page construite avec Elementor, et une seule des deux pointe vers la bonne URL. Ce genre d’anomalie, invisible dans l’éditeur visuel, ne se révèle qu’en ouvrant le code source rendu — et elle suffit à faire disparaître une page des résultats de recherche au profit d’une autre version jugée « canonique » par erreur.

Le problème touche particulièrement les sites qui combinent Elementor avec Yoast SEO ou Rank Math, deux extensions qui génèrent elles-mêmes leur propre balise canonical selon des règles fines (page statique, page de blog, archive personnalisée). Quand Elementor entre dans la boucle avec ses propres templates de thème et ses popups, la mécanique se complique.

Symptôme : deux canonicals, une seule gagnante

Le symptôme le plus courant se voit en affichant le code source d’une page produit ou d’une landing page Elementor : la recherche du mot « canonical » remonte deux occurrences dans le <head>, l’une injectée par l’extension SEO, l’autre par un composant du thème ou d’un plugin tiers (constructeur de thème, plugin de traduction, cache statique qui a figé une ancienne version). Le navigateur affiche les deux, mais Google n’en retient qu’une, souvent la première rencontrée dans le flux HTML — pas nécessairement la bonne.

Autre variante : la canonical est correcte dans l’éditeur Elementor en mode aperçu, mais change une fois la page publiée et servie par un cache de page, parce que le cache a stocké une version générée avant l’activation de l’extension SEO, ou après un changement de permalien non purgé.

Diagnostic : remonter à la source de génération

L'essentiel à retenir : Deux sources générent la canonical ; Le thème peut aussi s'en mêler ; Un seul filtre suffit à trancher

Pour trancher, il faut d’abord désactiver tout cache de page (WP Super Cache, W3 Total Cache, ou le cache serveur type LiteSpeed) et recharger la page en navigation privée. Si une seule canonical apparaît, le problème vient bien du cache : il suffit de vider la file et de reconfigurer l’exclusion des pages Elementor du cache statique agressif.

Si les deux balises persistent, l’origine est presque toujours l’un de ces trois points :

  • Un thème enfant ou un thème premium qui injecte sa propre canonical via wp_head, en plus de celle de l’extension SEO.
  • Un plugin de constructeur de thème (Elementor Pro Theme Builder) qui génère une canonical pour ses templates d’archive personnalisés.
  • Une extension de traduction (WPML, Polylang) mal configurée qui pointe la canonical vers la langue par défaut au lieu de l’URL courante.

L’inspection se fait avec grep sur les fichiers de thème actifs :

grep -rn "rel=.canonical" wp-content/themes/mon-theme/
grep -rn "rel=.canonical" wp-content/plugins/mon-plugin-theme-builder/

Cette recherche révèle en général un add_action( 'wp_head', 'ma_fonction_canonical' ) oublié dans le functions.php du thème, hérité d’une ancienne configuration antérieure à l’installation de l’extension SEO.

Correctif : une seule source de vérité

Le correctif consiste à retirer purement et simplement la génération concurrente, plutôt que de tenter de la synchroniser avec celle de l’extension SEO. Dans functions.php :

remove_action( 'wp_head', 'ma_fonction_canonical' );

Si la fonction fautive vient d’un plugin tiers qu’on ne peut pas modifier, un filtre côté extension SEO permet de forcer la valeur attendue sans toucher au plugin en question. Avec Yoast SEO, par exemple :

add_filter( 'wpseo_canonical', function( $canonical ) {
    return home_url( $_SERVER['REQUEST_URI'] );
});

Cette approche fonctionne, mais elle est à réserver aux cas où retirer le hook concurrent est impossible : elle masque le symptôme plutôt que de le traiter à la racine, et elle doit être révisée à chaque montée de version majeure de l’extension.

Prévention : un audit avant chaque changement de constructeur

Avant d’ajouter un nouveau plugin qui touche au <head> — thème premium, constructeur de page, extension de traduction — un test rapide s’impose : générer une page de test, inspecter la source, et rechercher le nombre d’occurrences de rel="canonical". Un seul suffit ; deux est toujours un bug, même si l’une des deux valeurs semble correcte par hasard.

Sur nos projets Elementor, la règle est simple : l’extension SEO est la seule autorité sur les balises <head>. Tout autre plugin qui y touche doit être neutralisé, pas contourné.

Un outil comme Screaming Frog, lancé en mode liste sur les URL les plus stratégiques, permet de vérifier en masse qu’aucune canonical ne diverge de l’URL réellement servie, avant même que Google Search Console ne remonte l’anomalie dans son rapport de couverture.

En résumé

Une canonical dupliquée sur un site Elementor vient presque toujours d’un hook wp_head concurrent, hérité d’un thème, d’un constructeur de templates ou d’une extension de traduction mal réglée. Le cache de page amplifie le problème en figeant une version obsolète. La correction durable consiste à retirer la génération concurrente plutôt qu’à la maquiller, et à faire de l’extension SEO la seule source de vérité pour cette balise.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi