Vous est-il déjà arrivé de chercher désespérément un fichier sur un serveur, en étant absolument certain de son existence ? C’est exactement ce qui m’est arrivé récemment avec un fichier robots.txt. Après avoir retourné le FTP dans tous les sens, j’ai fini par comprendre : le fichier n’existait tout simplement pas physiquement. WordPress le générait à la volée grâce au hook « robots_txt« . Une belle leçon d’humilité qui m’a ouvert les yeux sur un mécanisme natif méconnu que je souhaitais partager.
Le hook ‘robots_txt’ : un fichier virtuel bien réel
WordPress génère automatiquement un fichier robots.txt virtuel si aucun fichier physique n’existe à la racine du site. Ce mécanisme, actif depuis WordPress 2.6, utilise le hook robots_txt qui permet de modifier ou de remplacer complètement le contenu par défaut. Dans mon cas client, le thème utilisait ce hook pour personnaliser les directives robots, d’où l’absence totale de fichier physique.
/**
* Personnalisation du robots.txt via le hook natif
*/
add_filter( 'robots_txt', 'ls_custom_robots_txt', 10, 2 );
function ls_custom_robots_txt( $output, $public ) {
// Si le site n'est pas public, on laisse WordPress gérer
if ( '0' === $public ) {
return $output;
}
// Ajout de directives personnalisées
$output .= "User-agent: *\n";
$output .= "Disallow: /wp-admin/\n";
$output .= "Allow: /wp-admin/admin-ajax.php\n";
$output .= "Disallow: /wp-includes/\n";
$output .= "\n";
$output .= "Sitemap: " . home_url( '/sitemap_index.xml' ) . "\n";
return $output;
}
L’extension WP Robots Txt : la simplicité avant tout
Plutôt que de coder systématiquement, l’extension WP Robots Txt propose une approche pragmatique : une simple zone de texte dans Réglages > Lecture pour éditer le contenu du robots.txt. Élégant et efficace, l’extension exploite le même hook ‘robots_txt‘ mais offre une interface accessible aux non-développeurs.
L’extension n’était (à cette date) pas traduite en français. J’ai donc proposé et fait valider les traductions, histoire de remercier les auteurs pour ce petit outil bien pensé. Rien de tel qu’une contribution pour se sentir utile à la communauté !
Jouer avec les priorités : qui parle en dernier ?
En examinant le code de WP Robots Txt, j’ai constaté que l’extension utilise la priorité par défaut 10 pour son filtre. C’est là que ça devient intéressant : vous pouvez toujours ajouter vos propres modifications avant ou après l’extension.
- Priorité < 10 : votre code s’exécute avant l’extension
- Priorité > 10 : votre code s’exécute après (et peut donc écraser les modifications de l’extension)
- Priorité = PHP_INT_MAX : vous êtes certain d’être le dernier à parler
Cette flexibilité permet de combiner extension et code personnalisé sans conflit.
/**
* Exemple 1 : Intervention AVANT l'extension (priorité 5)
*/
add_filter( 'robots_txt', 'ls_robots_before_plugin', 5, 2 );
function ls_robots_before_plugin( $output, $public ) {
// Ajout d'un commentaire en début de fichier
$output = "# Configuration robots.txt personnalisée\n\n" . $output;
return $output;
}
/**
* Exemple 2 : Intervention APRÈS l'extension (priorité 20)
*/
add_filter( 'robots_txt', 'ls_robots_after_plugin', 20, 2 );
function ls_robots_after_plugin( $output, $public ) {
// Ajout d'une directive en fin de fichier
$output .= "\n# Crawl-delay pour les bots gourmands\n";
$output .= "User-agent: *\n";
$output .= "Crawl-delay: 10\n";
return $output;
}
/**
* Exemple 3 : Être ABSOLUMENT le dernier (PHP_INT_MAX)
*/
add_filter( 'robots_txt', 'ls_robots_final', PHP_INT_MAX, 2 );
function ls_robots_final( $output, $public ) {
// Remplacement complet du contenu, quoi qu'il arrive
$output = "User-agent: *\n";
$output .= "Disallow:\n";
$output .= "\nSitemap: " . home_url( '/sitemap.xml' );
return $output;
}
Finalité
Cette petite aventure avec un fichier robots.txt, m’a rappelé qu’après des années d’utilisation de WordPress, il reste encore des hooks natifs à (re)découvrir. Ces mécanismes, parfois discrets, offrent une puissance et une flexibilité remarquables pour peu qu’on prenne le temps de les explorer.
Au-delà de l’aspect technique, ça a aussi été l’occasion de faire une contribution concrète à la communauté WordPress en traduisant l’extension. Preuve qu’on peut toujours apprendre et partager en même temps.
Et vous, quel hook méconnu avez-vous découvert récemment ? Il est peut-être temps de fouiller dans la documentation officielle pour trouver votre prochaine pépite !
