Un thème sur mesure bien construit ne devrait jamais entrer en conflit avec l’extension SEO installée par le client — et pourtant, c’est précisément ce qui arrive quand le balisage schema.org est codé en dur dans les templates sans tenir compte de ce que l’extension génère déjà. Ce constat, je l’ai fait sur deux projets menés la même année, l’un avec Rank Math, l’autre avec SEOPress, tous deux construits sur le même thème de base.
Voici ce que cette expérience comparée m’a appris sur la façon dont chaque extension s’articule avec un thème qui veut rester propre côté données structurées, sans dupliquer de balisage ni entrer en conflit avec l’extension.
Deux philosophies de génération du balisage
Rank Math génère automatiquement un schéma assez complet dès l’activation, en s’appuyant sur le type de contenu et sur des réglages définis dans son interface : type d’article, organisation, avis, FAQ selon le contenu détecté. Le thème n’a presque rien à faire — sauf s’assurer qu’il ne réinjecte pas son propre balisage Article en parallèle dans header.php, ce qui provoquerait un doublon détectable à l’audit.
SEOPress, de son côté, propose un module de données structurées plus proche d’un formulaire à remplir manuellement par type de contenu, avec moins de génération automatique par défaut. Le thème garde alors un rôle plus actif : c’est souvent lui qui doit fournir certaines valeurs par défaut (image, auteur, date de mise à jour) quand l’administrateur du site n’a pas rempli les champs dédiés.

Le tableau comparatif retenu après les deux projets
| Critère | Rank Math | SEOPress |
|---|---|---|
| Génération automatique du balisage Article | Oui, par défaut | Partielle, à configurer |
| Filtre PHP pour surcharger le schéma | rank_math/json_ld | seopress_schemas_include |
| Risque de doublon avec un balisage codé en thème | Élevé si non vérifié | Plus faible, moins de génération auto |
| Réglages par type de contenu | Interface dédiée par type | Champs dans chaque fiche de contenu |
Connecter le thème à Rank Math sans dupliquer le balisage
Pour ajouter des propriétés spécifiques au métier du client (par exemple un balisage Product enrichi de caractéristiques propres au secteur), le filtre rank_math/json_ld permet d’injecter des données depuis le thème sans toucher au cœur du balisage déjà généré :
add_filter( 'rank_math/json_ld', function ( $donnees, $jsonld ) {
if ( is_singular( 'produit' ) ) {
$donnees['product']['material'] = get_post_meta( get_the_ID(), 'matiere', true );
}
return $donnees;
}, 10, 2 );
Connecter le thème à SEOPress pour combler les champs manquants
Avec SEOPress, la logique s’inverse : le thème fournit une valeur par défaut quand le champ n’a pas été renseigné manuellement par l’administrateur, via le filtre seopress_schemas_include.
add_filter( 'seopress_schemas_include', function ( $activer ) {
return is_singular( 'produit' ) ? true : $activer;
} );
Ce filtre active simplement le module de schéma sur le type de contenu concerné ; le remplissage des propriétés reste ensuite piloté depuis l’interface de l’extension, ce qui demande un temps de formation supplémentaire pour le client par rapport à Rank Math.
Le point commun : ne jamais dupliquer le contexte Organization
Sur les deux projets, l’erreur la plus fréquente relevée en audit venait du thème : un balisage Organization codé en dur dans header.php, hérité d’un ancien projet, qui entrait en conflit avec celui généré par l’extension installée. La correction a été identique dans les deux cas : supprimer purement et simplement le balisage codé en thème et laisser l’extension SEO gérer ce niveau, quelle qu’elle soit.
Un thème sur mesure ne devrait jamais porter de balisage
OrganizationouWebSiteen dur : ce niveau appartient à l’extension SEO installée, quelle qu’elle soit. Le thème se contente d’enrichir les schémas spécifiques à ses propres types de contenu.
Notre verdict
Pour un thème qui doit rester compatible avec plusieurs extensions SEO selon les clients, la règle est simple : ne jamais générer de balisage générique en dur, et prévoir un point d’extension via filtre pour chaque extension supportée. Rank Math demande moins d’intervention manuelle du client mais impose plus de rigueur au développeur pour éviter les doublons ; SEOPress demande l’inverse. Aucune des deux n’est universellement meilleure — le choix dépend de l’autonomie souhaitée par le client final.