# Yoast SEO et Elementor : quand le balisage schema.org se marche dessus

> Deux blocs JSON-LD pour une seule page, un widget Elementor Pro qui refait le travail de Yoast : diagnostic d'un conflit de balisage schema.org fréquent et discret.

- Auteur : WordPress Développement
- Publié le : 2020-02-09
- Mis à jour le : 2020-02-09
- Catégorie : Elementor
- URL : https://www.wpmoderne.fr/elementor/yoast-seo-elementor-schema-org-doublon/

## L’essentiel

- Deux scripts JSON-LD injectés sur une même page
- Le widget FAQ Pro duplique un type déjà géré par Yoast
- Un seul plugin doit rester maître du balisage

Deux balises `<script type="application/ld+json">` dans le code source d'une même page, chacune déclarant un type `FAQPage` différent : c'est le symptôme qui a mené à ce diagnostic, sur un site vitrine construit avec Elementor Pro et Yoast SEO installés côte à côte depuis la mise en ligne.

Le rendu visuel ne montre rien d'anormal : les questions/réponses s'affichent correctement dans l'accordéon du widget. Le problème est invisible pour le visiteur, mais bien réel pour les moteurs de recherche, qui reçoivent deux jeux de données structurées concurrents pour une même portion de contenu. Voici comment j'ai remonté la source du doublon et comment j'ai tranché.

## Symptôme : deux balisages pour un seul contenu

En inspectant le code source via « Afficher la source de la page », deux blocs `ld+json` apparaissaient : le premier généré par Yoast SEO à partir du contenu de la page (un `WebPage` englobant), le second injecté par le widget **FAQ** d'Elementor Pro, qui génère lui aussi un schéma `FAQPage` complet dès qu'il détecte au moins deux items dans la liste de questions.

Google Search Console ne remontait pas d'erreur bloquante, mais l'outil de test des données structurées (à l'époque encore accessible séparément du rapport d'amélioration) affichait un avertissement de type non standard sur l'un des deux blocs, celui dont les propriétés `mainEntity` se recoupaient partiellement.

## Diagnostic : deux plugins, une même ambition

Yoast SEO intègre depuis plusieurs versions un module de génération de schema.org basé sur un graphe (le `schema graph`), pensé pour couvrir l'ensemble d'un site de façon cohérente : organisation, page web, article, breadcrumb. Il n'a pas connaissance du contenu des widgets Elementor au moment de construire ce graphe, puisqu'il travaille sur le contenu final rendu, pas sur la structure interne du constructeur de pages.

> L'essentiel à retenir : Deux scripts JSON-LD injectés sur une même page ; Le widget FAQ Pro duplique un type déjà géré par Yoast ; Un seul plugin doit rester maître du balisage

De son côté, le widget FAQ d'Elementor Pro embarque sa propre logique de génération de balisage, activée par défaut, sans option pour la désactiver dans l'interface du widget lui-même. Chaque instance du widget sur la page ajoute son propre bloc JSON-LD, indépendamment de ce que fait Yoast.

### Où regarder en priorité

- Le code source de la page (recherche du texte `FAQPage`)
- Les réglages globaux d'Elementor Pro, section « Avancé » du widget FAQ
- Les réglages de schema.org dans Yoast SEO (menu Réglages, onglet Contenu de type schema)

## Correctif : désigner un seul responsable du balisage

La solution retenue a consisté à désactiver la génération de schéma côté widget Elementor plutôt que de toucher à la configuration globale de Yoast, qui gère cohéremment l'ensemble du site. Un court snippet, déposé dans un plugin maison du site (jamais dans le thème, pour survivre à une mise à jour de thème), retire le filtre correspondant :

```
add_filter( 'elementor_pro/frontend/faq/schema', '__return_false' );
```

Ce filtre n'existe pas nécessairement sous ce nom exact selon la version installée : à défaut, la méthode la plus fiable reste d'intercepter la sortie du widget côté rendu et de retirer la balise `script` ciblée avec une expression régulière restreinte au type `FAQPage`, en dernier recours si aucun hook dédié n'est disponible dans la version en place.

> Conseil maison : avant de désactiver quoi que ce soit, comparez toujours les deux blocs JSON-LD champ par champ. Il arrive que l'un des deux contienne des données plus complètes (texte alternatif, ancre) qu'il vaut mieux conserver plutôt que supprimer à l'aveugle.

## Prévention : vérifier à chaque widget à balisage automatique

Le widget FAQ n'est pas isolé : les widgets Elementor Pro « Avis clients » (Reviews) et certains widgets tiers de type recette ou événement génèrent également leur propre balisage schema.org. Sur tout site utilisant Yoast SEO ou Rank Math en parallèle d'Elementor Pro, la bonne pratique consiste à lister ces widgets dès la recette d'un nouveau projet, avant que le contenu ne soit produit en masse par un client qui ne verra jamais le problème sans un outil de contrôle.

Le test des données structurées de Google (accessible aujourd'hui depuis le rapport « Résultats enrichis » de Search Console) reste l'outil de vérification le plus simple : il signale les propriétés dupliquées et permet de confirmer qu'un seul balisage propre subsiste après correction.

## En résumé

Un doublon de schema.org entre Yoast SEO et un widget Elementor Pro ne casse rien visuellement, mais brouille le signal envoyé aux moteurs de recherche. Le réflexe à adopter est simple : un seul plugin doit rester maître du balisage structuré sur une page donnée, et ce choix doit être documenté dans les notes de recette du projet pour ne pas être redécouvert à chaque migration.
