C’est suite à une demande d’Olivier de WebRankInfo que je me suis penché sur le cas des flux de WP.
Ceux qui suivent SeoMix auront remarqué dans un précédent article mon explication sur la manière de modifier le contenu des flux RSS de WordPress.
Sauf que ces flux possèdent aussi des balises métas invisibles pour les visiteurs, mais qui apparaissent pour d’éventuels moteurs de recherche et autres logiciels d’indexation. La question était alors de savoir comment les modifier.
Les balises XMl des flux WordPress
Olivier souhaitait supprimer les balises XML <Category> de tous les flux RSS de WordPress, sans pour autant modifier les fichiers du CMS situé dans le répertoire wp-includes. Ces balises apparaissent comme ceci dans le code source des « feed » :
...
Ces flux RSS possèdent donc un défaut majeur : ils mélangent catégories et mots clés, mais oublient les taxonomy. Pire encore, ils vont récupérer TOUTES les catégories et mots clés d’un article, ce qui les rend inutiles pour les moteurs de recherche ou pour les agrégateurs de contenus.
En cherchant un peu, j’ai compris que WordPress utilise le fichier feed-rss2.php pour générer son flux RSS par défaut. Ce fichier est un template, c’est à dire un modèle dans lequel WP va injecter ses contenus. Il fait alors appel à deux fonctions pour les balises XML <category> : the_category_rss(), qui fait elle-même appel à get_the_category_rss().
On peut donc influer sur les contenus XML des flux RSS en utilisant un filtre sur la fonction the_category_rss(). Après quelques tests et une ou deux prises de tête, voici les hacks que j’ai réussi à créer :
Supprimer les balises XML des flux RSS
Pour les supprimer purement et simplement, il suffit de copier/coller ce code dans le fichier functions.php de votre thème WordPress :
// Supprimer les balises XML Category des flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrssno');
function xmlrssno($type = null) {$the_list = '';}
Et voilà, le tour est joué : les flux RSS de WordPress ne contiennent plus aucune balises XML Category.
Modifier les balises XML des flux RSS
Il existe d’autres possibilités qui utilisent le même hack. On peut demander à ce que le flux RSS de WordPress utilise uniquement les catégories, les mots ou les taxonomy. On peut également lui demander de ne prendre qu’un mot clé, ou qu’une catégorie pour remplir la balise XML <category>.
Uniquement les mots clés :
// Ne garder que les balises XML Category des mots clés pour les flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrsstag');
function xmlrsstag($type = null) {
if ( empty($type) ) $type = get_default_feed();
$tags = get_the_tags();
$thelist = '';
$cat_names = array();
$filter = 'rss';
if ( 'atom' == $type ) $filter = 'raw';
if ( !empty($tags) ) foreach ( (array) $tags as $tag ) {
$cat_names[] = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter);}
$cat_names = array_unique($cat_names);
foreach ( $cat_names as $cat_name ) {
if ( 'rdf' == $type )
$thelist .= "\t\t\n";
elseif ( 'atom' == $type )
$thelist .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) );
else
$thelist .= "\t\t\n";}
return $thelist;}
Un seul mot clé :
// Ne garder qu'une balises XML Category de mots clés pour les flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrsstagun');
function xmlrsstagun($type = null) {
if ( empty($type) ) $type = get_default_feed();
$tags = get_the_tags();
$thelist = '';
$cat_names = array();
$filter = 'rss';
if ( 'atom' == $type ) $filter = 'raw';
if ( !empty($tags) ) foreach ( (array) $tags as $tag ) {
$cat_names[] = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter);}
$cat_names = array($cat_names[0]);$cat_names = array_unique($cat_names);
foreach ( $cat_names as $cat_name ) {
if ( 'rdf' == $type )
$thelist .= "\t\t\n";
elseif ( 'atom' == $type )
$thelist .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) );
else
$thelist .= "\t\t\n";}
return $thelist;}
Plusieurs mots clé :
Pensez à remplacer la valeur de $count par le nombre de mots clés que vous voulez utiliser dans le XML de votre flux RSS WordPress :
// Ne garder qu'un nombre défini de balises XML Category de mots clés pour les flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrsstagseveral');
function xmlrsstagseveral($type = null) {
if ( empty($type) ) $type = get_default_feed();
$count=7;
$tags = get_the_tags();
$thelist = '';
$cat_names = array();
$filter = 'rss';
$tags = array_slice($tags, 0, $count);
if ( 'atom' == $type ) $filter = 'raw';
if ( !empty($tags) ) foreach ( (array) $tags as $tag ) {
$cat_names[] = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter);}
$cat_names = array_unique($cat_names);
foreach ( $cat_names as $cat_name ) {
if ( 'rdf' == $type )
$thelist .= "\t\t\n";
elseif ( 'atom' == $type )
$thelist .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) );
else
$thelist .= "\t\t\n";}
return $thelist;}
Uniquement les catégories :
// Ne garder que les balises XML Category des catégories pour les flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrsscategory');
function xmlrsscategory($type = null) {
if ( empty($type) )$type = get_default_feed();
$categories = get_the_category();
$thelist = '';
$cat_names = array();
$filter = 'rss';
if ( 'atom' == $type )
$filter = 'raw';
if ( !empty($categories) ) foreach ( (array) $categories as $category ) {
$cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter);}
$cat_names = array_unique($cat_names);
foreach ( $cat_names as $cat_name ) {
if ( 'rdf' == $type )
$thelist .= "\t\t\n";
elseif ( 'atom' == $type )
$thelist .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) );
else
$thelist .= "\t\t\n";}
return $thelist;}
Une seule catégorie :
// Ne garder qu'une balises XML Category de catégorie pour les flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrsscategoryun');
function xmlrsscategoryun($type = null) {
if ( empty($type) )$type = get_default_feed();
$categories = get_the_category();
$thelist = '';
$cat_names = array();
$filter = 'rss';
if ( 'atom' == $type )
$filter = 'raw';
if ( !empty($categories) ) foreach ( (array) $categories as $category ) {
$cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter);}
$cat_names = array($cat_names[0]);$cat_names = array_unique($cat_names);
foreach ( $cat_names as $cat_name ) {
if ( 'rdf' == $type )
$thelist .= "\t\t\n";
elseif ( 'atom' == $type )
$thelist .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) );
else
$thelist .= "\t\t\n";}
return $thelist;}
Une taxonomie :
Pour rappel, une taxonomie sur WordPress correspond à une nouvelle hiérarchisation de vos contenus. Par défaut, vos articles sont classés par catégorie et mots clés. Mais vous pouvez très bien créer un nouveau type de catégorisation, que l’on appelle les taxonomies.
On peut donc utiliser ces informations pour la balise XML de vos flux RSS WordPress. Remplacez dans ce code « XXXXXX » par le nom de votre taxonomy, puis copier/coller le tout dans votre fichier functions.php.
// Utiliser une taxonomy pour la balise XML Category des flux RSS - Code par www.seomix.fr
add_filter('the_category_rss', 'xmlrsstaxo');
function xmlrsstaxo($type = null) {
if ( empty($type) ) $type = get_default_feed();
global $post;
$mytaxonomy = get_the_terms($post->ID, 'XXXXXX');
$thelist = '';
$cat_names = array();
$filter = 'rss';
if ( 'atom' == $type ) $filter = 'raw';
if ( !empty($mytaxonomy) ) foreach ( (array) $mytaxonomy as $tag ) {
$cat_names[] = sanitize_term_field('name', $tag->name, $tag->term_id, $mytaxonomy, $filter);}
$cat_names = array($cat_names[0]);$cat_names = array_unique($cat_names);
foreach ( $cat_names as $cat_name ) {
if ( 'rdf' == $type )
$thelist .= "\t\t\n";
elseif ( 'atom' == $type )
$thelist .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) );
else
$thelist .= "\t\t\n";}
return $thelist;}
Et voilà. Vous n’avez maintenant plus qu’à choisir parmi les codes précédents le hack WordPress qui correspond le mieux à vos besoins. Pour ma part, je vous conseille l’utilisation du hack avec une seule catégorie, ou celui avec la taxonomy. C’est ce qui sera le plus pertinent pour votre flux RSS vis-à-vis des moteurs de recherche et agrégateurs.
Comme on dit, c’est fou ce que l’on peut faire avec WordPress 3 ;)
Comment faire pour ajouter dans le flux d'actualité RSS de WordPress les différents Custom Post Types que vous avez créé ? Voici une solution simple, par SeoMix.
WordPress 5.5 intègre désormais une nouvelle fonctionnalité : la génération de fichiers sitemaps XML natifs. Mais c’est quoi ? Et pourquoi est-ce potentiellement dangereux pour votre référencement naturel ? Qu’est-ce qu’un fichier sitemap…
Petit hack de SeoMix pour récupérer l'ID d'une catégorie Wordpress, sans connaître le nom de celle-ci. Le hack permet aussi de récupérer le nom, le lien et l'adresse du flux…
26
Commentaires
Olivier DuffezLe 30 novembre 2010 à 10h58
Merci Daniel, ça marche bien en effet.
Djib'sLe 30 novembre 2010 à 11h42
Il y a une coquille dans ton code sur « uniquement les mots clés ». A la troisième ligne il ne faut pas mettre les //
deuxième coquille dans le dernier paragraphe du texte, c’est « agrégateurs » et non pas « agréagateurs »
Daniel RochLe 30 novembre 2010 à 11h54
@Olivier: de rien ;)
@Djib’s : merci d’avoir signalé les erreurs. C’est corrigé.
kalvinLe 30 novembre 2010 à 12h01
merci, excellent
AurélienLe 30 novembre 2010 à 12h18
Merci pour cet article.
Peux-tu développer l’intérêt SEO de supprimer les balises des fichiers XML ?
Daniel RochLe 30 novembre 2010 à 14h46
Honnêtement, je ne peux pas vraiment quantifier l’impact. Je pense qu’il existe, mais qu’il est infime.
Après, c’est juste une question de logique pour tout les sites qui iraient crawler les flux RSS de WordPress (moteurs de recherche et agrégateurs) : il est en effet stupide d’avoir plusieurs catégories pour un article, surtout qu’en cumulant catégories et mots clés, on arrive parfois à plusieurs dizaines de catégories dans le flux XML généré par WordPress.
Benoit PonthieuLe 01 décembre 2010 à 0h47
Excellent article que je vais tacher de mettre en application prochainement.
Merci ;)
PatkbanLe 01 décembre 2010 à 7h34
Bonjour,
J’ai un gros problème : quand je fais un « export » de mon site (fichier XML), le fichier est incomplet et surtout quand je l’importe il crée de nouvelles catégories (ex : canal+1, canal+2, canal+3, etc.)
Qu’est-ce que je peux faire pour que tout fonctionne correctement.
Merci
Daniel RochLe 01 décembre 2010 à 10h11
Il s’agit des fichiers XML de base de donnée, et non pas ceux liés aux fichiers RSS. Regarde sur le site de WordPress Fr : tu y trouveras les informations dont tu as besoin.
DJib'sLe 01 décembre 2010 à 15h46
Je voulais savoir s’il était possible de modifier le code qui permete d’afficher un seul mot clé, pour qu’il affiche le nombre de mot clés voulus. J’utilise aussi feedburner pour twitter, et les mots clé sont ajoutés comme hash tags, mais il m’en faudrait 2-3, un seul ce n’est pas assez.
Merci
Daniel RochLe 02 décembre 2010 à 12h05
Normalement oui. Je fais de tests et je te redis ça.
DJib'sLe 02 décembre 2010 à 17h42
Merci de ton aide :-)
Daniel RochLe 02 décembre 2010 à 21h10
C’est bon. J’ai ajouté le code dans l’article pour choisir un nombre déterminé de mots clés pour les balises XMLs. ;)
Djib'sLe 02 décembre 2010 à 22h08
Merci, mais lorsque je mets le code, je mon site affiche une page blanche, dès que je supprime le code, tout redevient normal.
Désolé d’être lourd, mais le code pour pour un seul mot clé ne marche pas aussi chez moi. Actuellement le seul qui marche pour les mots clés, c’est celui qui affiche tous les mots clés.
Daniel RochLe 03 décembre 2010 à 9h52
Peux-tu activer le thème par défaut de WordPress, et placer le script dans celui-ci (pour voir si le bug vient de mon code ou d’une incompatibilité avec ton thème).
Fais aussi l’essai en désactivant tous tes plugins.
DJib'sLe 03 décembre 2010 à 19h36
j’ai toujours l’erreur :
la ligne 506 correspond à :
tests effectués sur le theme par défaut en désactivant ou pas les plugins
Daniel RochLe 04 décembre 2010 à 11h34
Je pense avoir corrigé (une lettre en trop dans ces deux codes)
Djib'sLe 04 décembre 2010 à 21h56
Merci ça fonctionne maintenant
DJib'sLe 05 décembre 2010 à 19h09
C’est encore moi !
Il y a encore un soucis avec le code qui permet d’afficher le nombre de mots clés désirés.
Peut importe le nombre de mots que je configure, il n’y a qu’un mot qui apparait.
Daniel RochLe 06 décembre 2010 à 9h45
Fait un nouvel essai avec le code corrigé. Si ca ne marche toujours pas, donne-moi le lien vers ton flux rss.
DJib'sLe 06 décembre 2010 à 16h52
C’est bon tout fonctionne correctement maintenant.
Merci pour ta patience ;-)
ChamomorLe 10 janvier 2011 à 7h12
Bonjour Daniel,
Bravo pour ce hack bien intéressant.
Question: que faire des custom post type ?
Sont-elles intégrées au flux dans ton code ?
Daniel RochLe 10 janvier 2011 à 13h38
Je n’ai jamais fait l’essai. Théoriquement, je ne pense pas que le code fonctionne…
Jean-Pierre CointreLe 05 mars 2011 à 15h33
bonjour,
Merci pour cet article très intéressant.
Dans notre écosystème de blogueurs, je gère la liste des catégories et laisse libre les mots clefs (tag).
Je cherche à récupérer dans un autre environnement en utilisant les flux RSS les articles avec uniquement les catégories dans le champs Catégory et pas les tags.
Votre code fonctionne correctement pour les sites (par exemple rse.lemonde-apres.com/jpcointre/feed) sauf pour le site principal de notre environnement rse.lemonde-apres.com.
Avez-vous une adaptation pour cet environnement WordPress 3.0.4. avec theme Mandigo ?
Daniel RochLe 07 mars 2011 à 13h43
Mon code ne fonctionne que pour le XML contenu dans les flux rss de WordPress (sous la forme « CDATA »). Dans les deux flux de ton commentaire), mes hacks en sont pas pris en compte puisqu’ils affichent plusieurs catégories CDATA à chaque fois.
Jean-Pierre CointreLe 08 mars 2011 à 7h52
Merci Daniel,
Nous ne nous somme pas bien compris.
1) C’est bien un environnement WordPress (3.0.4)
2) Ton code fonctionne bien pour tous les blogs individuel de l’environnement.
3) Seul le blog principal me pose problème. J’ai contourné la difficulté en utilisant un blog fille comme nouvelle source.
Merci
26 Commentaires
Merci Daniel, ça marche bien en effet.
Il y a une coquille dans ton code sur « uniquement les mots clés ». A la troisième ligne il ne faut pas mettre les //
deuxième coquille dans le dernier paragraphe du texte, c’est « agrégateurs » et non pas « agréagateurs »
@Olivier: de rien ;)
@Djib’s : merci d’avoir signalé les erreurs. C’est corrigé.
merci, excellent
Merci pour cet article.
Peux-tu développer l’intérêt SEO de supprimer les balises des fichiers XML ?
Honnêtement, je ne peux pas vraiment quantifier l’impact. Je pense qu’il existe, mais qu’il est infime.
Après, c’est juste une question de logique pour tout les sites qui iraient crawler les flux RSS de WordPress (moteurs de recherche et agrégateurs) : il est en effet stupide d’avoir plusieurs catégories pour un article, surtout qu’en cumulant catégories et mots clés, on arrive parfois à plusieurs dizaines de catégories dans le flux XML généré par WordPress.
Excellent article que je vais tacher de mettre en application prochainement.
Merci ;)
Bonjour,
J’ai un gros problème : quand je fais un « export » de mon site (fichier XML), le fichier est incomplet et surtout quand je l’importe il crée de nouvelles catégories (ex : canal+1, canal+2, canal+3, etc.)
Qu’est-ce que je peux faire pour que tout fonctionne correctement.
Merci
Il s’agit des fichiers XML de base de donnée, et non pas ceux liés aux fichiers RSS. Regarde sur le site de WordPress Fr : tu y trouveras les informations dont tu as besoin.
Je voulais savoir s’il était possible de modifier le code qui permete d’afficher un seul mot clé, pour qu’il affiche le nombre de mot clés voulus. J’utilise aussi feedburner pour twitter, et les mots clé sont ajoutés comme hash tags, mais il m’en faudrait 2-3, un seul ce n’est pas assez.
Merci
Normalement oui. Je fais de tests et je te redis ça.
Merci de ton aide :-)
C’est bon. J’ai ajouté le code dans l’article pour choisir un nombre déterminé de mots clés pour les balises XMLs. ;)
Merci, mais lorsque je mets le code, je mon site affiche une page blanche, dès que je supprime le code, tout redevient normal.
Désolé d’être lourd, mais le code pour pour un seul mot clé ne marche pas aussi chez moi. Actuellement le seul qui marche pour les mots clés, c’est celui qui affiche tous les mots clés.
Peux-tu activer le thème par défaut de WordPress, et placer le script dans celui-ci (pour voir si le bug vient de mon code ou d’une incompatibilité avec ton thème).
Fais aussi l’essai en désactivant tous tes plugins.
j’ai toujours l’erreur :
la ligne 506 correspond à :
tests effectués sur le theme par défaut en désactivant ou pas les plugins
Je pense avoir corrigé (une lettre en trop dans ces deux codes)
Merci ça fonctionne maintenant
C’est encore moi !
Il y a encore un soucis avec le code qui permet d’afficher le nombre de mots clés désirés.
Peut importe le nombre de mots que je configure, il n’y a qu’un mot qui apparait.
Fait un nouvel essai avec le code corrigé. Si ca ne marche toujours pas, donne-moi le lien vers ton flux rss.
C’est bon tout fonctionne correctement maintenant.
Merci pour ta patience ;-)
Bonjour Daniel,
Bravo pour ce hack bien intéressant.
Question: que faire des custom post type ?
Sont-elles intégrées au flux dans ton code ?
Je n’ai jamais fait l’essai. Théoriquement, je ne pense pas que le code fonctionne…
bonjour,
Merci pour cet article très intéressant.
Dans notre écosystème de blogueurs, je gère la liste des catégories et laisse libre les mots clefs (tag).
Je cherche à récupérer dans un autre environnement en utilisant les flux RSS les articles avec uniquement les catégories dans le champs Catégory et pas les tags.
Votre code fonctionne correctement pour les sites (par exemple rse.lemonde-apres.com/jpcointre/feed) sauf pour le site principal de notre environnement rse.lemonde-apres.com.
Avez-vous une adaptation pour cet environnement WordPress 3.0.4. avec theme Mandigo ?
Mon code ne fonctionne que pour le XML contenu dans les flux rss de WordPress (sous la forme « CDATA »). Dans les deux flux de ton commentaire), mes hacks en sont pas pris en compte puisqu’ils affichent plusieurs catégories CDATA à chaque fois.
Merci Daniel,
Nous ne nous somme pas bien compris.
1) C’est bien un environnement WordPress (3.0.4)
2) Ton code fonctionne bien pour tous les blogs individuel de l’environnement.
3) Seul le blog principal me pose problème. J’ai contourné la difficulté en utilisant un blog fille comme nouvelle source.
Merci
Laisser un commentaire