La gestion du contenu dupliqué représente un enjeu majeur en référencement naturel. Sur un système de gestion de contenu comme WordPress, les pages de taxonomie (catégories, étiquettes) sont particulièrement exposées à ce risque. Lorsque différentes pages de taxonomie affichent des listes d’articles similaires ou identiques, les extraits de ces articles sont répétés, créant des pages dont le contenu est perçu comme très proche par les moteurs de recherche. Cette situation peut diluer l’autorité des pages et affecter négativement leur positionnement.
Pour contourner cette problématique, une solution technique avancée consiste à utiliser le content spinning sur les extraits d’articles. Cette approche permet de générer une version unique du descriptif court pour chaque page de taxonomie où l’article apparaît. En s’assurant que chaque variation est sémantiquement cohérente mais textuellement distincte, on préserve l’unicité de chaque page. La méthode repose sur l’injection d’une logique de spinning via un filtre appliqué à la fonction the_excerpt() de WordPress, une manipulation qui garantit une différenciation efficace et contrôlée du contenu.
Le défi du contenu dupliqué sur les pages de taxonomie
Les taxonomies de WordPress, principalement les catégories et les étiquettes (tags), sont des outils puissants pour organiser et structurer le contenu d’un site web. Elles permettent aux utilisateurs de naviguer intuitivement entre des sujets connexes. Cependant, leur fonctionnement natif peut générer des problèmes de duplication de contenu. Une page de catégorie peut, par exemple, lister exactement les mêmes articles qu’une page d’étiquette si les contenus ont été classifiés de manière croisée.
Dans ce scénario, les deux pages affichent non seulement les mêmes titres d’articles, mais aussi les mêmes extraits (excerpts). Pour un moteur de recherche, ces deux URL présentent alors un contenu quasi identique, ce qui déclenche des signaux de duplicate content. Le moteur peut avoir des difficultés à déterminer quelle page est la plus pertinente pour une requête donnée, ce qui peut entraîner une cannibalisation des mots-clés et une baisse de la performance globale du site dans les résultats de recherche.
La cause fondamentale de ce problème réside dans le fait que WordPress appelle la même fonction the_excerpt() pour afficher l’extrait d’un article, quelle que soit la page de taxonomie sur laquelle il se trouve. L’extrait reste statique et identique à travers tout le site. Sans une intervention technique, il n’existe pas de mécanisme natif pour adapter ou varier ce contenu en fonction du contexte de la page qui l’affiche.
Le content spinning comme solution technique
Le content spinning est une technique d’écriture qui consiste à préparer un texte avec plusieurs variations de mots, de phrases ou de tournures syntaxiques. L’objectif est de pouvoir générer automatiquement de multiples versions uniques d’un même contenu de base. La syntaxe la plus courante pour le spinning se présente sous la forme {alternative 1|alternative 2|alternative 3}, où un moteur de script choisira aléatoirement l’une des options à chaque génération.
Appliquée aux extraits WordPress, cette méthode permet de rédiger un excerpt « spinnable » pour chaque article. Au lieu d’un texte fixe, l’extrait contient des alternatives sémantiques. Par exemple, un extrait pourrait être rédigé ainsi : {Ce guide|Ce tutoriel|Ce dossier} {explique|détaille|présente} comment {configurer|installer|déployer} une solution {performante|efficace|robuste}. Un script peut alors piocher dans ces options pour assembler une phrase unique à chaque fois que l’extrait est requis.
Pour générer facilement des master spins, vous pouvez utiliser soit mon outil gratuit effiSpin (anthique mais toujours fonctionnel !), soit passer à la version moderne avec mon ChatGPT personnalisé permettant de créer des master spins gratuits en français.
L’enjeu est de s’assurer que le processus de génération est déterministe pour une URL donnée. Autrement dit, une page de catégorie spécifique doit toujours afficher la même version « spinnée » de l’extrait à chaque chargement pour ne pas être perçue comme du cloaking par les moteurs de recherche. La solution consiste à utiliser un identifiant unique lié à la page de taxonomie comme « graine » (seed) pour l’algorithme de sélection aléatoire, garantissant ainsi la cohérence du contenu généré pour cette page précise.
Implémentation d’un filtre pour des extraits uniques
L’implémentation de cette solution dans WordPress se fait par l’ajout d’un code personnalisé dans le fichier functions.php du thème. Le principe repose sur la création d’un filtre sur le hook the_excerpt. Ce filtre intercepte le contenu de l’extrait avant son affichage pour lui appliquer la logique de spinning. Le code ci-dessous illustre cette approche, combinant une fonction de spinning et son application via un filtre.
Le cœur de la technique réside dans la fonction spin($txt). Elle analyse le texte à la recherche de la syntaxe {...} à l’aide d’une expression régulière. L’astuce déterminante est l’utilisation de la fonction srand($id). Cette fonction initialise le générateur de nombres aléatoires avec un identifiant unique propre à la page consultée. Ainsi, pour une même page de taxonomie, le processus de « mélange » (shuffle) des alternatives donnera toujours le même résultat. L’extrait généré sera donc unique par page de taxonomie, mais stable sur cette même page.
<?php /* * Fonction de spinning de texte (syntaxe : {test|essai}) * avec hack pour spin unique/catégorie ou tag */ function spin($txt){ $pattern = '#\{([^{}]*)\}#msi'; $test = preg_match_all($pattern, $txt, $out); if (!$test) return $txt; // On rend le shuffle unique if(is_category()) { // On est sur une page catégorie $category = get_the_category(); $mycat = $category[0]->cat_name; $id = get_cat_id($mycat); } elseif(is_tag()) { // On est sur une page de tag $id = get_query_var('tag_id'); } else { // Autres pages => on génère un ID unique depuis l'URL $id = preg_replace("/[^0-9]/", "", md5($_SERVER['REQUEST_URI'])); }; srand($id); $atrouver = array(); $aremplacer = array(); foreach($out[0] as $id => $match) { $choisir = explode("|", $out[1][$id]); $atrouver[] = trim($match); shuffle($choisir); $aremplacer[] = ($choisir[0]); } $reponse = str_replace($atrouver, $aremplacer, $txt); return spin($reponse); } // Ajout du filtre sur appel de "the_excerpt" function spinnable_excerpt_content( $content ) { return spin($content); } add_filter( 'the_excerpt', 'spinnable_excerpt_content' ); ?> La logique d’identification de la page est cruciale pour la stabilité du spin. Le script utilise les fonctions conditionnelles de WordPress pour déterminer le type de page et récupérer l’identifiant approprié.
| Type de page | Méthode de récupération de l’ID | Description |
| Page de catégorie | get_cat_id() | Récupère l’identifiant numérique de la catégorie en cours. |
| Page d’étiquette (tag) | get_query_var('tag_id') | Récupère l’identifiant de l’étiquette depuis la requête globale. |
| Autres pages | md5($_SERVER['REQUEST_URI']) | Génère un hash MD5 de l’URL, qui est ensuite filtré pour ne garder que les chiffres, créant un ID unique. |
Vers une optimisation sémantique avancée des taxonomies
L’application du content spinning aux extraits des taxonomies WordPress est une SEO technique qui répond efficacement au problème de contenu dupliqué. En garantissant qu’un extrait d’article est présenté de manière unique sur chaque page de catégorie ou d’étiquette, cette méthode renforce la valeur individuelle de ces pages aux yeux des moteurs de recherche. Les bénéfices directs sont multiples :
- Élimination du duplicate content entre les pages de taxonomie.
- Amélioration du maillage interne en présentant des variations de contenu qui peuvent capter des intentions de recherche légèrement différentes.
- Renforcement de la pertinence thématique de chaque page de taxonomie.
Cette approche, bien que technique, s’inscrit dans une stratégie de contenu plus large visant à maximiser la performance SEO d’un site. Elle démontre comment une maîtrise des mécanismes internes de WordPress, tels que les filtres et les hooks, permet de déployer des optimisations sur mesure. En fin de compte, la différenciation du contenu sur les pages de taxonomie contribue à construire une architecture de site plus robuste et sémantiquement plus riche, un facteur déterminant pour un bon positionnement durable.
Voir tous les articles de la catégorie WordPress





À noter que l’on peut également utiliser la même fonction carrément sur the_content au niveau du filtre 😉
Ainsi il est possible, pour les thèmes qui n’utilisent pas the_excerpt, de spinner également tout ce qui est au-dessus de la balise more.
Simple et efficace, merci pour le tip qu’il faudrait que j’adapte à mon propre wp.
Merci pour l’astuce, je vais tester ! Ca peut être l’occasion de réactiver certainnes pages.
une petite coquille :
et donc j’ai pris connaissance par Jérémy Allard
Ah oui merci : c’est corrigé 🙂
L’un des gros avantages de WordPress c’est justement qu’on peut y ajouter nos propres « plugins » pour peu qu’on sache un peu développer, la preuve en images, ou plutôt en lignes, avec ce petit script, à garder en favori, merci bien.
Elle est pas mal cette petite astuce de Kévin. Elle a le mérite de réveiller les pages categories et Tag – pour peu qu’il y ait quelques articles dedans et elles deviennent potentiellement de bonnes portes d’entrées
Excellente idée les amis, c’est clair que c’est un vrai plus d’avoir des excerpt différents du contenu des articles, surtout lorsque ces excerpt sont particulièrement longs.
Merci beaucoup pour ce code, je vais tester ça ce week end 🙂
cela me fait drôle de revoir cette syntaxe, bien pratique dans ce cas précis 😉
Bonjour,
C’est en effet un problème récurrent pour les blogs WordPress qui publient souvent dans la même catégorie.
Vous venez de donner la solution. Merci beaucoup pour le script !
Bon week-end,
Bonne idée, faut juste penser à également mettre la fonction dans le functions.php de wpTouch 😉
Thierry
Effectivement, je n’y avais pas pensé (en fait je ne savais pas)
Bonne remarque !
Possible avec Prestashop ? 🙂
Ahhhh en voilà une bonne idée 🙂
Bon ceci dit, faudrait déjà que mes clients saisissent des descriptions uniques avant de penser à faire du spinning… Mais effectivement ça peut être intéressant !
Bonjour,
Une très bonne astuce ! Je vais testé ça rapidement. Comme le dit Valentin la même chose sous PrestaShop sera vraiment bien, c’est à étudié.
Bonjour Merci pour votre spiner. Avez vous prévu une mise a jour prochainement ??? pour juillet ou Aout ? Merci et bon courage. Vive effispin 🙂
Bonjour Gérard
Oui, une mise à jour (colossale !) est en cours de finition… J’ai d’ailleurs peut-être eu les yeux plus gros que le ventre 🙂 mais le résultat devrait plaire !
Bonjour,
Très pratique ! Merci bien pour ce script qui peu-être très utile.
Bonsoir,
Je l’ai mis dans function.php mais j’ai toujours les mm extrait pour les tag et les catégories.
Faut il faire autre chose? merci de m’aider.
Bonjour
Vous avez bien utilisé la syntaxe appropriée au niveau de l’excerpt ?…
(voir ici : https://effi10.com/tutoriel-redaction-content-spinning-masterspin/ )
Oui cédric il me semble avoir bien tout suivi… :S
Bonjour Zoé,
Avez-vous bien rédigé le début de votre article de manière à ce qu’il soit spinnable comme indiqué en commentaire du code ? {texte base| texte a remplacer}
Bonjour, merci bien pour ce script très pratique, il va très certainement me servir 🙂
Je dois avoir un soucis dans mon code, lorsque je fais cette manip ça me met une erreur php 🙁
Merci du conseil, je vais le tester. c’est effectivement un truc qui me bloquait depuis quelques mois!
Je me pose une question, doit on effectuer un changement important lorsqu’on veut faire du multi spin?
Tu devais faire une mise à jour? si oui il y aura quoi de nouveau?
Bonsoir
La v2.0 est toujours sur le feu, on va dire « en pause hivernale » (hum…) mais je terminerai. Ces temps ci j’ai peu de temps à y consacrer malheureusement !
Le multispin fonctionne très bien, je n’ai pas encore encodé la sauvegarde/restauration de projets (totalement différente de la v1.x d’effiSpin au passage…)
Y’aura donc au programme le multispin (avec fonctionnalités matricielles), l’intégration plus fine de base de données, l’alimentation de blogs WordPress via XML RPC, etc.
Beaucoup de choses fonctionnent mais ne sont pas encore débuguées…
Merci pour se hack je vais essayé tous de suite.
Cela marche aussi pour un multisite?
En principe ça doit fonctionner pour du multisite !
bonjour,
j’ai mis le code dans le fichier function, il mélange bien les contenus ce qui me donne des textes différents sur les tags et les catégories mais sur l’article complet, il me donnes les deux textes en même temps…quelqu’un a une idée d’où ça peut venir ?
personne pour un petit coup de main …Cédric ?
Bonjour
Ahhh c’est étrange !!! Tu n’aurais pas deux fois la fonction pour afficher l’excerpt dans ton code ?…
Parce que techniquement je vois pas comment ça peut être possible autrement 🙂
Tu peux coller ton code dans une balise < code > ici même !
Salut Cédric,
j’ai essayé de te poster le code du fichier function mais ça passe pas ou alors ça part direct en spam peut être.
est ce que tu veux que je te l’envoie sur ton formulaire de contact ?
hello,
Ta réponse ma mis sur la voie et j’ai trouvé la solution,
j’ai rajouté un filtre sur the_content également.
Je pense que ça doit être propre à certain thème.
en tous cas merci.
ah oui je rajoute le code ça peut servir pour quelqu’un d’autre
add_filter( 'the_content', 'spinnable_excerpt_content' );Oui effectivement, on peut appliquer le filtre à tout ce que l’on veut de filtrable 😉
Cette astuce demande finalement beaucoup de travail, (spinner chaque excerpt) pour un risque finalement relativement minime non ?
Je ne suis pas spécialiste wordpress donc j’imagine sans doute pas l’utilité du script mais j’admire l’optimisation et la recherche du détails.
Merci beaucoup pour cette astuces. Je vais l’intégrer tous de suite.
Bonjour, j’ ai le même soucie que Zoé. J’ai intégré le script dans mon fichier functions.php. Puis j’ai copier coller pour voir dans un aticle »{texte base| texte a remplacer} » puis enregistré et c’est écrit « {texte base| texte a remplacer} « ..j’ ai du oublier quelque chose… une troisième video ou capture d’écran d’intégration et d’utilisation serait bienvenue pour la touriste que je suis^^. Ha, j’oubliai, merci beaucoup pour ce script et le logiciel…enfin quelque chose de nouveau (pour moi) dans le monde seo.
avec certain theme,il faut filtrer le contenu également et pas seulement l’extrait, voir mon post plus haut.
Oui, je l’est bien vue (si tu parle de add_filter( ‘the_content’, ‘spinnable_excerpt_content’ ); )mais je ne sais pas où l’ajouter ..
Salut salut,
Je viens de voir cette possibilité et j’ai direct inclus ça sur notre site (voir url pseudo) mais j’ai un soucis, quand je recharge je n’est pas de changement de texte et celui-ci n’a été effectif que pour la home.
Du coup je me retrouve bien avec la home + une catégorie spinné mais la sous cat reste toujours comme la cat, normal docteur ?
Ben c’est le but du plugin : « figer » chaque spun selon l’URL 😉
Ah par contre la sous-catégorie, c’est effectivement pas normal… Lié peut-être à l’URL ? Je ne sais pas 🙁
désolé je te réponds un peu tardivement, en fait il faut l’ajouter dans tous les fichiers de ton thème où il y a the_content. (par exemple loop.php, function.php) après faut tester parce que ça dépend du thème que tu utilises.
un double classement quotidien des sites francophones basé sur les visites et les votes reçus par les sites.
Weborama.fr permet ainsi aux internautes de découvrir les meilleurs sites du moment.
bonjour,
j’ai mis le code dans le fichier function, il mélange bien les contenus ce qui me donne des textes différents sur les tags et les catégories mais sur l’article complet, il me donnes les deux textes en même temps…quelqu’un a une idée d’où ça peut venir ?
comme indiqué plus haut dans mon post précédent, il faut bien filtrer TOUS les contenus.
Ce que tu indiques, montre qu’il y a un filtre qui n’a pas été appliqué correctement.
Perso j’ai toujours pas confiance au Spinning d’ailleurs les gens ont déjà du mal à mettre des textes uniques alors lol le spinning mais merci je vais quand même tester pour voir .
C’est un réel défaut de WordPress. J’espère que dans les prochaines version, cette optimisation des extraits sera rajoutée nativement. Tant dans un objectif d’ergonomie utilisateur que de référencement d’ailleurs !
Bonjour et merci Cédric
Justement les tags devenaient un sujet épineux pour quelques un de mes sites …
Je rajoute ce blog dans mes bookmarks 😉
Olivier
Merci pour ce script, je vais bidouiller mon function.php et je voir ce que ça donne.
Encore un article stp, ça fait 5 mois 🙁
Excellent, je ne savais pas du tout comment faire!
Superbe, merci pour le partage, il est vraiment trop fort ce @515banque !! mais comment fait-il pour penser à ça ?? Comme beaucoup de tools, une fois que tu l’as ça te parait évident mais franchement j’y aurait pas pensé tout seul.
Ca règle un des principaux problèmes de wordpress concernant le DC et ça permet beaucoup plus de liberté pour utiliser les pages tag et catégorie qui peuvent potentiellement être « bankable » (et ainsi transformer une lacune en véritable potentiel).
Cédric, il faut suivre le fil des comment et les diverses interventions de chacun pour arriver à un résultat qui fonctionne. Ce sujet est super intéressant, mais as tu utilisé déjà ce plugin, qui pourrait permettre de faciliter la tache de tout le monde ? Je ne l’ai pas encore testé mais en faisant quelques recherches, ce lien m’est apparu : https://wordpress.org/plugins/advanced-excerpt/
Bonjour Olivier
En principe le seul fait de copier/coller le code dans le functions.php doit suffire, si le thème est correctement développé (si le filtre sur « the_excerpt » ne fonctionne pas c’est que le thème utilise « the_content » partout, par exemple)
On peut étendre cette fonction à « the_content » en ajoutant un filtre comme suit :
add_filter( 'the_content', 'spinnable_excerpt_content' );
Sympa comme technique
Je viens de tomber la dessus alors que je cherchais totalement autre chose et ça va envoyer du bois mixé à une API sémantique que j’utilise déjà
Merci bcp vraiment !!!