La plupart des thèmes WordPress comportent une page d’erreur 404 personnalisée. Si ce n’est pas le cas du thème que vous utilisez, je vous conseille d’en créer une sous la forme d’un template 404.php.
Vous pouvez l’agrémenter d’une image originale et pourquoi pas de la liste de vos meilleurs articles, mais pourquoi en rester là ? En effet si l’utilisateur cherche un contenu et ne le trouve pas, autant le guider vers ce qu’il cherche, mais comment procéder pour cela ?
Une solution consiste à analyser l’adresse saisie par l’utilisateur, à en extraire les mots clefs puis à les réinjecter dans le moteur de recherche de WordPress.
Regardons ce que j’ai mis dans mon fichier 404.php :
Récupérer l’adresse saisie après le nom de domaine
$search_terms = urldecode(substr($_SERVER['REQUEST_URI'], 1));
Saisissons pour notre exemple l’URL suivante : https://creerunblog.net/rubrique/jeux/j-aime-les-jeux-video.htm on a donc :
$search_terms = /rubrique/jeux/j-aime-les-jeux-video.htm
Eliminer les termes inutiles
Dans l’adresse saisie il y a peut-être des termes qui ne servent à rien du tout, comme une extension « jpg » ou encore un « www » qui ne donnent pas tellement d’indication sur le type de contenu recherché :
/* Elimination des termes inutile */
$order = array('www', '.html', '.php', '.jpg', '.gif', 'tag', 'category', '.htm', 'titre', 'categorie', 'rubrique' );
$replace = '';
$search_terms = str_replace($order, $replace, $search_terms);
Pareil pour les « . » « – » et autres ponctuations :
/* remplacement des ponctuations */
$order = array(' ', '/', '_', '-', '.');
$replace = '+';
$search_terms = str_replace($order, $replace, $search_terms);
Vous remarquez qu’on a au passage remplacé toutes les ponctuations par des + ce qui nous donne :
$search_terms = jeux+j+aime+les+jeux+video
Supprimer les termes trop courts et les doublons
Comme vous l’avez compris on va utiliser cette chaine simplifiée pour faire une recherche. Du coup les éléments composés d’un ou deux caractères seulement risquent de polluer pas mal notre recherche et il vaut mieux les éliminer.
Nous allons passer par un tableau intermédiaire et en profiter pour supprimer aussi les doublons :
/* suppression des termes courts et des doublons */
$search_array = array_unique(explode("+", $search_terms));
foreach($search_array as $key => $value){
if (strlen($value)<3) {
unset ($search_array[$key]);
}
}
$search_terms = implode("+",$search_array);
$args = array(
'numberposts' => 1,
's' => $search_terms
);
$404_query = new WP_Query($args);
if( $404_query->have_posts()) : while( $404_query->have_posts() ) : $404_query->the_post();
$404_permalink = the_permalink();
endwhile; endif;
wp_reset_postdata();
if ($404_permalink) {
wp_redirect( $404_permalink, 301);
}
Le fichier 404.php complet
Si on met tout bout à bout, voici ce que vous devez intégrer au tout début de votre fichier 404.php avant tous les éléments de la page 404 définie par votre thème :
$search_terms = urldecode(substr($_SERVER['REQUEST_URI'], 1));
/* Elimination des termes inutile */
$order = array('www', '.html', '.php', '.jpg', '.gif', 'tag', 'category', '.htm', 'titre', 'categorie', 'rubrique' );
$replace = '';
$search_terms = str_replace($order, $replace, $search_terms);
/* remplacement des ponctuations */
$order = array(' ', '/', '_', '-', '.');
$replace = '+';
$search_terms = str_replace($order, $replace, $search_terms);
/* suppression des termes courts et des doublons */
$search_array = array_unique(explode("+", $search_terms));
foreach($search_array as $key => $value){
if (strlen($value)<3) {
unset ($search_array[$key]);
}
}
$search_terms = implode("+",$search_array);
$args = array(
'numberposts' => 1,
's' => $search_terms
);
$404_query = new WP_Query($args);
if( $404_query->have_posts()) : while( $404_query->have_posts() ) : $404_query->the_post();
$404_permalink = the_permalink();
endwhile; endif;
wp_reset_postdata();
if ($404_permalink) {
wp_redirect( $404_permalink, 301);
}
Bien évidemment ceci n’est qu’une trame, et je vous invite à adapter ce code à vos besoin spécifiques.
Mise en garde
Un conséquence de l’implémentation de ce script est que la majorité de vos 404 n’apparaitront plus dans la Google Search Console. Ce mécanisme n’est pas « propre » dans le sens ou il va masquer ces 404 au lieu de les corriger et générer de la charge du coté de votre serveur en sollicitant pas mal la base de données.
On vous conseille donc d’installer un plug-in comme Redirections pour monitorer ce qui se passe afin d’appliquer de vraies redirections propres ou votre site risque de ralentir, en particulier si Google le crawle dans son ensemble et tombe sur des milliers de 404 en quelques minutes…
Il existe des plugins WordPress qui font déjà tout ça
On a porté à ma connaissance qu’il existait déjà des plug-ins qui faisaient tout ça comme des grands comme :
Je ne les ai pas testés car ma version maison du script ci-dessus est customisée selon mes besoins (et elle est nettement plus complexe que le code détaillé ci-dessus). Je suis curieux en revanche d’avoir vos retours sur ces autres plugins dans les commentaires.
Salut. C'est une bonne idée ce qui viens d'être proposé ici, je n'y avais jamais songé. Sinon il y a deux solutions alternatives:
1) Le plugin WordPress "smart 404"
2) Une solution que j'ai mis au point (je termine un outil que je donnerais au grand public) qui utilise un algorithme pour trouver une URL semblable. L'avantage c'est que c'est super performant pour les petites erreur dans l'URL (exemple: faute de frappe) et que ce n'est pas limité à WordPress. L'inconvénient c'est que ça donne des résultats moyens dans certains cas. Pour en savoir plus, voici un article qui détail ma technique: http://tonyarchambeau.com/blog/gestion-de-site-we…
En effet le plugin Smart 404 semble faire ce que je propose ici en mieux :'(
Sinon la solution que tu proposes est aussi intéressante, quoique plus compliquée, et me fait un peu penser à … l'API Yahoo Search : http://developer.yahoo.com/search/web/V1/webSearc…
Si j'ai du courage je bricolerai une nouvelle page 404 qui fera appel à cette API 🙂
Bonjour,
y a -t-il un moyen de gérer soi même les erreurs 404 avec un fichier htaccess plutôt que de laisser wordpress le faire avec les permaliens ?
Je recommande le plugin « smart 404 » couplé au plugin redirections pour tout traiter directement en back office.
Très chouette article ! La redirection est une super idée pour réorienter les lecteurs au lieu de simplement leur dire de revenir en arrière 🙂
De mon côté, j’utilise le plugin 404 to 301, dont je suis plutôt satisfaite. J’ai même placé mon formulaire de capture sur cette page, qui a un très bon taux de conversion 😉