Robots.txt de WordPress

par sur 8 décembre 2010

dans WordPress

Robots.txt de WordPress

Il y a 5 jours j’ai mis mon site en ligne. Pour pouvoir finaliser le paramétrage tranquillement, j’avais bloqué la visibilité de site sur les moteur de recherche, notamment Google. Cette option est disponible sous l’onglet Réglages - > Vie privée de WordPress. À ma grande surprise, quand je me suis connecté aux outils de web-master de Google le fichier robots.txt de mon site a déjà bloqué son indexation…

Pas de panique, si le robot Google a passé sur votre site avant que vous avez eu le temps de modifier l’option de visibilité, une fois cette option est changée, tôt ou tard Google va repasser pour indexer votre site. Mais bon, je comprends tout à fait, que de voir votre site bloqué pendant quelque temps par votre propre fichier robots demande les nerfs en acier…

Je fais quelques recherches sur Internet qui m’ont fait voir que il y a pas mal de gens qui pensent que le fichier robots.txt d’un site sous WordPress est un fichier réel qui doit être placé à la racine de votre site… En fait, WordPress génère ce fichier à la demande en utilisant la fonction do_robots().

Cela veut dire, que vous ne pouvez pas le trouver sur votre site puisqu’il est virtuel. Cela complique les choses quand on a besoin de le modifier pour affiner les réglages d’indexation. Bien sûr, on peut le créer à la main et placer à la racine de votre site, mais cette solution n’est pas la meilleure.

Voici un code PHP qui permet de modifier votre fichier virtuel robots.txt sans devoir modifier les fichiers de noyau de WordPress (ce que je vous déconseille fortement) ou utiliser des plugins superflus. Tout simplement copiez – collez ce code dans dans le fichier fonction.php de votre thème.

<?php
//filtrer le contenu de robots.txt
function custom_robots($output) {
	$public = get_option( 'blog_public' );
	if ( '0' != $public ) 
		return str_replace('Disallow:','Allow: /',$output);
}
add_filter('robots_txt','custom_robots',0);

Ce code – c’est un filtre PHP qui modifie le contenu du fichier robots.txt généré par WordPress. Le principe est simple – variable $output à la rentrée de la fonction contienne le texte de ce fichier. Ce que la fonction retourne – c’est le nouveau contenu du fichier robots.txt. Dans cet exemple – le Disallow: est remplacé par Allow: / en fonction de l’option de la visibilité de votre site que vous avez choisie.

Comme la priorité pour ce filtre est 0, il sera appliqué en premier. Ce que n’empêche pas aux plugins de faire leurs propres modifications par la suite. Par exemple, Google (XML) Sitemaps Generator for WordPress ajoute une ligne à la fin de votre fichier robots.txt. Cette ligne contienne l’adresse de votre plan de site fourni pour Google pour assurer la meilleure indexation de vos pages et articles.

Comme vous le voyez, en utilisant un filtre comme celui-ci vous avez le contrôle total sur le fichier robots virtuel qui est généré par WordPress. À vous de modifier la fonction PHP pour correspondre à vos besoins. N’hésitez pas à poser vos questions dans les commentaires.

À bientôt.

{ 11 commentaires… lire les plus bas ou ajouter un }

éolienne mai 1, 2011 à 15 h 52 min

Je cherchais justement à ajouter des Disallow pour les dossiers wp-content, wp-admin et wp-includes sans pour autant empêcher le plugin sitemap xml google d’écrire à la fin sa ligne de code.

Merci! Code clair et cela évite d’ajouter (encore) un autre plugin :)

Répondre

Antoine mai 3, 2011 à 14 h 44 min

Hello,
Très intéressant ton code, merci !
Quelles sont les modifs à faire ds ton fichier pour ne pas indexer /wp-admin/ et /wp-includes/ par exemple ?
Merci

Répondre

Serge mai 6, 2011 à 5 h 56 min

Hey,
@Antoine tu peux essayer ce code :

//filtrer le contenu de robots.txt
function custom_robots($output) {
	$output .= '
User-Agent: *
Disallow: /wp-admin/
/wp-includes/';
return $output;
}
add_filter('robots_txt','custom_robots',0);

Répondre

Siras mai 23, 2011 à 8 h 03 min

Merci Serge pour ton code.

Par contre, si on fait “$output .= …”
ça laisse dans le robots.txt le User-Agent et le Disallow existant.

J’ai donc remplacé le .= par = et ça marche. J’espère que j’aurai pas de problème à cause de ça :s

Répondre

Serge mai 23, 2011 à 13 h 03 min

Tu a raison. Merci pour la correction. Non, cela va pas poser le souci.

Répondre

Siras mai 23, 2011 à 13 h 10 min

alors si ça pose pas soucis je laisse comme ça ;)

merci

Répondre

Eric Savina décembre 1, 2011 à 8 h 28 min

Bonjour,

Je voudrais integrer dans mon robots.txt les lignes suivantes:

User-agent: Mediapartners-Google
Disallow:

Si j’utilise votre code php en y inserant ces deux lignes, j’ai un message d’erreur. Je me doute bien qu’il doit me manquer un caractere quelconque quelque part mais je n’ai pas les connaissances necessaires pour trouver la solution par moi-meme. Une idee?

//filtrer le contenu de robots.txt
function custom_robots($output) {
$output .= ‘
User-Agent: *
Disallow: /wp-admin/
/wp-includes/’;
User-agent: Mediapartners-Google
Disallow:
return $output;
}
add_filter(‘robots_txt’,'custom_robots’,0);
//End filtrer le contenu de robots.txt

Répondre

Serge décembre 3, 2011 à 11 h 51 min

Salut, le problème dans ton code est que tu a casse la chaine des caracteres qui doit representer le contenu du fichier :

$chaine = ‘text ici’;

ta chaine est comme ceci

$chaine = ‘text’;
ici

la partie ici du coup est interpreté comme du php – d’ou l’erreur.

Essay ce code à la place :

/* filtrer le contenu de robots.txt */
function custom_robots($output) {
	$output .= '
User-Agent: *
Disallow: /wp-admin/
/wp-includes/
User-agent: Mediapartners-Google
Disallow:';
	return $output;
}
add_filter('robots_txt','custom_robots',0);
/* End filtrer le contenu de robots.txt */

Répondre

Serge décembre 3, 2011 à 11 h 53 min

mais je ne garantie pas que le contenu du ton robot txt est ok pour ce que tu essay de faire (à verifier avec webmaster tools) ;)

à plus

Répondre

Cedric février 27, 2012 à 16 h 26 min

Merci pour ces infos, c’est vraiment très pratique.

Répondre

Serge février 27, 2012 à 22 h 51 min

de rien

Répondre

Laissez un commentaire

{ 2 trackbacks }

Article précédent :

Article suivant: