Erreurs 404 : faites la chasse aux pages perdues

Je suis tombé récemment sur plusieurs articles recensant les pages 404 les plus originales, créatives ou informatives. Bien que l’intention soit louable, j’ai tendance à penser que la meilleure page 404, c’est celle qu’on ne voit jamais ! Mais pour éradiquer les pages perdues, il faut d’abord les identifier. Voici une manière simple de procéder avec PHP.

Votre 404 sur mesure

La première étape consiste à signifier à votre serveur qu’il doit rediriger le visiteur vers un script personnalisé lorsqu’une erreur 404 survient. Sur un serveur mutualisé, il faudra généralement éditer les options de votre hébergement. Si vous avez la possibilité d’éditer les fichiers .htaccess (suivez ce lien si vous ne savez pas comment créer un fichier .htaccess), il vous suffit d’insérer la ligne suivant dans le .htaccess situé à la racine du site :

ErrorDocument 404 /404.php

Vous remplacerez /404.php par le nom de votre script, mais veillez à ce qu’il puisse être interprété par PHP.

Que mettre dans mon script ?

Le script aura deux fonctions : annoncer au visiteur qu’il s’est planté (je vous renvoie pour ce faire aux exemples de pages 404 remarquables en lien plus haut), et surtout, avertir l’administrateur du site qu’une erreur vient de se produire. J’ai une préférence pour les alertes par e-mail qui attirent l’attention rapidement, mais vous pouvez préférer un fichier log en mode texte ou une insertion dans une base de données, ou encore un cumul des deux. Je me concentrerai sur l’e-mail pour cette introduction.

Pour identifier l’erreur et sa cause, on veut connaître l’adresse de la page qui était demandée, et si possible l’adresse de provenance du visiteur. Si en plus, on peut avoir l’ip du visiteur et l’heure de la requête sur le serveur, on pourra corréler les données avec les logs de consultation pour les cas les plus difficiles. On se servira pour ce faire du tableau de variables global $_SERVER qui contient toutes ces infos. Voici les trois variables qui nous rendront le plus de services :

  • $_SERVER['REQUEST_URI'] : l’url de la page demandée, et qui a causé une erreur 404.
  • $_SERVER['HTTP_REFERER'] : l’url de la page de provenance (referer) du visiteur, quand elle est connue. Dans le cas où le visiteur a saisi à la main une adresse erronée , cette variable sera vide.
  • $_SERVER['REMOTE_ADDR'] : l’adresse IP du visiteur

Envoyer le tout par e-mail

Il ne reste plus qu’à envoyer le message à l’adresse e-mail de votre choix dès que le visiteur consulte la page 404.php. Le script pourra ressembler à ça :

<?php
$email_admin = "admin@lepotlatch.org";

$monsite = "lepotlatch.org" ; // utile si vous administrez plusieurs sites

$message_titre = "[Erreur 404 " . $monsite . "] " . $_SERVER['REQUEST_URI'] ;

$message_corps = "Erreur 404 sur le site " . $monsite . ".\r\n" .
"Une page demandée n'a pas été trouvée. \r\n" .
"Url de la page : " . $_SERVER['REQUEST_URI'] . "\r\n" .
"Url de provenance : " . $_SERVER['HTTP_REFERER'] . "\r\n" .
"IP du visiteur : " . $_SERVER['REMOTE_ADDR'] . "\r\n" .
"Navigateur : " . $_SERVER['HTTP_USER_AGENT'] . "\r\n" .
"Heure de la requête : " . date('d/m/Y G:i:s') . "\r\n" .
"Contenu brut du tableau global $_SERVER : " . print_r($_SERVER,true) ;

// Envoi du message
mail($email_admin, $message_titre, $message_corps) ;

// Ci-dessous, affichez votre page 404 sur mesure pour le visiteur.
?>

Eliminer les erreurs

Une fois le script mis en place, vous recevrez (le moins souvent possible, je l’espère) des avertissements sur des URL qui n’existent pas sur votre site. En général, il y a trois scénarios, et trois manières de les traiter :

  • Cas 1 : le lien est obsolète ou mal orthographié sur une page de provenance unique. Si la page d’origine fait partie de votre site, il vous suffit de corriger le lien manuellement. Si elle est hébergée sur un site partenaire, le plus simple est de contacter le webmestre du site pour lui demander de mettre à jour ses liens.
  • Cas 2 : le lien est obsolète ou mal orthographié sur un grand nombre de pages de provenance. Si les liens sont sur votre site, mais qu’il n’est pas possible d’automatiser le remplacement de tous les liens erronés, ou s’il est situé sur des sites externes nombreux ou inaccessibles, il faut trouver une autre solution. Ma préférence : la redirection permanente. Elle peut se faire au niveau du .htaccess ou en recréant un fichier PHP à l’url précédemment recherchée.
  • Exemple avec .htaccess
    Redirect permanent /ancienne_url.html http://www.monsite.org/nouvelle_url

    Exemple de script ancienne_url.php
    <?php
    header("Status: 301 Moved Permanently", false, 301);
    header("Location: http://www.monsite.org/nouvelle_url");
    exit();
    ?>
  • Cas 3 : le lien pointe vers une page définitivement supprimée. Dans ce cas l’erreur 404 est normale et parfois même souhaitable. Pour faire disparaître les pages en question des moteurs de recherche qui continueraient de les indexer, une mention dans robots.txt (suivez ce lien pour savoir comment utiliser le fichier robots.txt) peut être utile.
  • Exemple de fichier robots.txt
    User-Agent: *
    Disallow: /repertoire/ancienne_page.html

    Conclusion

    Cette méthode permet d’avoir en permanence un oeil sur les impasses de votre site. Elle ne pourra pas empêcher le drame avant qu’il survienne, mais si vous exercez un suivi scrupuleux, vous devriez minimiser le nombre d’erreurs 404 qui passent entre les filets. Il y a probablement des raffinements possibles, notamment quand le nombre d’alertes devient trop nombreux parce que des robots indexeurs des moteurs de recherche « inventent » des URL fictives à foison : un filtrage par navigateur (HTTP_USER_AGENT) fera généralement l’affaire.

Bookmark and Share
Outil de référencement professionnel - essai gratuit Cette entrée a été publiée dans Webdesign, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.

12 réponses à Erreurs 404 : faites la chasse aux pages perdues

  1. Merci pour le lien et bravo pour l’article. Très intéressant.

  2. Bob dit :

    Très bien comme article.
    Je proposerais aussi, pour ceux qui sont vraiment pas doués en développement ou que ça n’iintéresse pas, d’utiliser Google webmaster tools (http://www.google.com/webmasters... ), qui liste les erreurs 404, même si aucun utilisateur n’arrive sur un lien mort (par exemple parce que le lien n’est jamais cliqué) mais que le robot crawl.

  3. allogarage dit :

    Bonjour,

    Merci pour votre bout de code que je viens d’ajouter sur la page d’erreur de mon site.

    Juste une petite remarque : dans le code indiqué, il y a un espace de trop dans $_SERVER['REQUEST _URI']

    A bientot et bonne continuation!

  4. franklin dit :

    Juste un petit souci sur l’hébergeur 1and1.
    Le fichier .htaccess est quelques peu différents, par exemple, la partie intéressante sur le mien est :
    <code>
    RewriteBase /
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) /erreur.php
    </code>

    Cependant, je n’arrive pas à le faire marcher correctement, à savoir que les mails sont envoyés dans tous les cas, seulement dès que j’ai je renvoi sur une page totalement inexistante, toute la partie de dialogue avec ma base sql est impossible, tandis que sur une page du type index.php?page=page_inexistante, tout fonctionne correctement.
    Si quelqu’un a la réponse…
    PS : j’ai besoin du dialogue avec ma base sql car j’enregistre les informations dedans, au cas ou le mail ne fonctionnerais pas pour une raison ou pour une autre.
    Merci d’avance et bonne continuation.

  5. nouri_10 dit :

    resoudre ce probleme afin d’ouvrir dette page et acceder au coolchat

  6. Très sympa ce bout de code. Merci de l’avoir mis en ligne.

  7. Sandra dit :

    Bonjour,

    J’utilise ce code 404 dans mon site et c’est génial ! Merci !

    Par contre est-ce qu’il serait possible d’avoir un peu d’aide pour « iltrage par navigateur (HTTP_USER_AGENT) »… Je ne sais pas trop ou chercher ni comment faire…

    Encore merci du script !

    Sandra

  8. Hal404 dit :

    Je lance le site http://page404.fr qui propose un annuaire pour mettre l’url de sa page 404 et recevoir les votes des internautes…je ne sais pas ce que ça va donner mais j’avais trouvé certaines pages d’erreur tellement sympa et travaillées que j’ai pensé qu’il pouvait être amusant de les répertorier.

  9. Pierre dit :

    Tres bon article. Je dirai egalement qu’il peut etre interessant de stocker les pages mortes dans une base de donnees plus que par mail. Cela permet de faire du post traitement des donnes + pour un gros sites ca peut faire bcp de mails ;)

  10. ID GrafiK dit :

    Bonjour
    Je viens de faire ma page 404 http://www.id-grafik.com/404.php

  11. Damien Ravé dit :

    @ID Grafik : joli, espérons que personne ne la verra jamais ;)

  12. Un grand Merci pour ce script: c’est mon premier pas en PHP:
    j’ai choisi de l’inclure dans ma page erreur404, ça n’est pas risqué, puisqu’aucun lien ne doit pointer dessus !

    il me reste 2 questions ‘du néophyte’, pour l’améliorer:
    – est-il possible de crypter l’adresse e-mail à l’intérieur du script php, via un script de aspirine.org, par exemple ?
    – est-ilpossible d’afficher aussi l’URL de la cible qui n’a pas été trouvée;
    en effet, dans une page très riche en liens, ça simplifierai le débogage !

    Merci déjà pour ça.
    Christophe

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>