Une page 404 intelligente

Wordpress gère automatiquement la page qui s'affiche lorsqu'on l'internaute donne l'URL d'une page qui n'existe pas.

En fait il suffit de placer un fichier 404.php a coté des autres fichiers du thème pour que le contenu de ce fichier soit affiché en cas d'erreur d'URL.

La plupart du temps, c'est un banal et morne message qui est présenté au visiteur:

Page not found.

Ce n'est pas très appréciable. La moindre des choses serait de lui proposer d'autres pages à voir, ou mieux encore, de rechercher l'article qui ressemble le plus à ce qu'il recherchait. Pour cela, une condition est que les liens soient significatifs, faits de mots-clés, on ne pourrait deviner ce que recherche un internaute quand il tape le numéro d'un article!
La plupart des webmasters utilisant Wordpress configurent les permaliens dans le panel d'administation, avec la commande %postname%.

Code de la page 404

La structure de la page d'erreur minimale, donc le contenu du fichier 404.php, est la suivante:

<?php get_header(); ?>
<div id="content">
    <h2>Error 404 - Not Found</h2>
</div>
<?php 
   get_sidebar();
   get_footer(); 
?>

C'est le fichier du thème par défaut de Wordpress, sous une forme épurée.

On pourrait très facilement ajouter la liste des derniers billets, de sorte que le visiteur qui arrive sur la page, soit plus incité à poursuivre la lecture qu'à quitter le site.

<div id="content">
<h2>Error 404 - Not Found</h2>
<h2>Derniers articles</h2>
<ul>
<?php wp_get_archives('type=postbypost&limit=10'); ?>
</ul>
</div>

On voit qu'il suffit d'ajouter quelques lignes...

Rechercher les pages similaires

A partir des mots contenu dans l'URL passée par l'internaute, il est possible aussi de faire une recherche dans les titres des billets, afin de trouver celui qui serait le plus proche de ce qui est demandé.

Noter que Wordpress lui-même fait une récupération des URL erronées, en reprenant les premiers mots et en recherchant un article qui commence par ces mots. L'algorithme que l'on propose fonctionnera en cas d'échec de celui de Wordpress.

On construit une requête avec l'algorithme suivant:

$com = "";
foreach($keywords as $word)
{
if(strlen($word < 5) && $count > 3) continue;

if($com != "") $com .= " AND ";
$com .= "(post_title LIKE '%$word%')";
} $com .= " AND post_type = 'post'"; $command="SELECT post_title, post_name FROM $table WHERE $com";

- On élimine les mots courts, sauf si l'URL n'en contient que deux.
- On crée ainsi une clause WHERE composée d'une série de AND qui compare les mots dans les titres des articles avec les mots dans l'URL.
- On élimine les entrées de type revision, attachment, grâce à la condition post_type=post.

La requête finale aura en clair la forme suivante:

SELECT post_title, post_name FROM $table WHERE (post_title LIKE '%mot1%') AND 
(post_title LIKE '%mot2%') ...etc... AND
post_type = 'post"
A partir des deux listes obtenues, celle des titres et celle des URLs, on construit une liste de liens formés de balise <a>.

Utiliser les plugins de "related"

On pourrait développer cet algorithme afin d'améliorer encore la pertinence. Mais plutôt que de refaire le monde, pourquoi ne pas utiliser un plugin de "related", les billets au sujet similaire?

A défaut de disposer des tags de l'article recherché, on crée une liste à partir de l'URL donnée.

$url=$_SERVER{'REQUEST_URI'};
$url = str_replace("%20", " ", $url);
$url = strtolower($url);
$keywords=split('[/.-_ ,]',$url);

Les mots-clés sont les éléments du tableau $keywords. On interface cette liste de tag avec les fonctions du plugin.

Plugin de "related":

Télécharger la page 404

Si vous voulez conserver une page d'erreur classique, vous pouvez essayer de la rendre agréable au visiteur...

Not found Japon

Page non trouvée dans le style japonais