Intro
Il vous est sûrement déjà arrivé, lors de vos trépidantes aventures sur le Net, de tomber nez à nez avec la fameuse et tant redoutée “Erreur 404″. Mais au fond, que signifie 404 ? Pourquoi donc s’embêter à personnaliser la sienne ? Autant de questions que nous allons nous poser dans la suite de ce billet.
Que signifie une erreur 404 ?
Pour commencer, une petite vision d’ensemble de ce qui se passe lorsque vous vous promenez gaiement sur internet s’impose. À chaque fois que vous visitez une page internet, votre ordinateur (ou “client” pour les intimes) envoie une requête par le protocole HTTP. Le serveur lui renvoie alors, dans un premier temps, ce qu’on appelle le “HTTP Header”, qui contient notamment une information vitale : l’état (status en anglais) de la requête, sous forme d’un nombre à 3 chiffres. Cet état est renvoyé conformément à une nomenclature établie en 1992 par le W3C.
Si tout se passe bien, l’état indiqué est 200. A l’inverse, si vous demandez une page qui n’existe pas (ou n’existe plus), vous obtiendrez le fameux 404. De façon générale, les états 2xx traduisent un succès, 3xx une redirection, 4xx et 5xx une erreur.
Voici une petite liste des états fréquents :
- 403 (Forbidden) : Vous ne disposez pas des droits d’accès nécessaires
- 500 (Internal Error) : Une erreur interne au serveur s’est produite
- 501 (Not implemented) : Le module demandé n’est pas installé sur le serveur.
Pourquoi personnaliser sa page d’erreur 404 ?
Il faut le reconnaître, rares sont les sites qui ont pris la peine de changer le message d’erreur par défaut, fourni par leur serveur. Ces messages sont extrêmement pauvres en information et n’aide pas vraiment l’internaute à retrouver son chemin. Il ne faut alors pas s’étonner que ces visiteurs quittent le site (d’après plusieurs tests d’utilisabilité).
Personnaliser ce message permet ainsi d’offrir plus d’informations afin de conserver le visiteur sur son site.
Comment réaliser sa propre page d’erreur 404 ?
Installer sa propre page d’erreur 404 est relativement simple, il vous suffit d’avoir :
- un client FTP capable d’afficher les fichiers cachés
- un éditeur texte, ou mieux, un éditeur HTML, si votre client FTP ne permet pas d’éditer des fichiers en ligne
Les utilisateurs de Mac OS X peuvent faire confiance aux excellents clients FTP Transmit et Cyberduck (gratuit), et à l’éditeur SkEdit (payant) ou Smultron (gratuit).
Les utilisateurs de Windows peuvent utiliser les clients FTP Filezilla et SmartFTP ainsi que l’éditeur Nvu.
Les instructions suivantes concernent uniquement les serveurs Apache (70% des cas)
- Commencez par créer la page d’erreur et nommez-la de façon explicite (404.php par exemple)
- Placez-la à la racine de votre site
- Vérifiez que votre client FTP affiche bien les fichiers cachés
- Si le fichier .htaccess n’existe pas à la racine de votre site créez le.
Le fichier .htaccess est un petit fichier très pratique qui permet de faire plein de choses utiles sur votre serveur, pour en savoir plus : Le fichier .htaccess
- Ensuite ajouter la ligne suivante :
ErrorDocument 404 /votrefichier.php
Par exemple :
#Pages d'erreurs
ErrorDocument 404 /404.php
Vous disposez alors d’une page d’erreur 404 personnalisée. Félicitations! Pour la tester, c’est tout simple. Entrez une chaîne de caractères au hasard après l’adresse de votre site (Ex : www.votredomaine.com/qlsdhmjqshldq)
Les astuces pour bien configurer sa page d’erreur 404
De manière générale, il faut :
- Rester calme : l’internaute est déjà suffisamment perturbé de ne pas trouver ce qu’il voulait. Faites preuve de courtoisie et exprimez vous dans un langage simple et compréhensible (évitez les termes techniques). De plus essayez d’éviter des termes comme “erreur”, qui pourraient l’effrayer.
- S’excuser : l’internaute ne doit pas se sentir responsable. Utilisez des tournures au conditionnel comme “Il se pourrait” ou encore “Il est possible que”.
- Informer : commencez par un constat général : “La page demandée n’a pu être trouvée”.
- Mettre en confiance: rassurez l’internaute en lui proposant rapidement des solutions pour retomber sur ces pieds. L’internaute sera plus à même de continuer son séjour sur votre site s’il sent que vous êtes maître à bord.
- Détendre l’atmosphère : une petite dose d’humour est toujours la bienvenue et aidera à faire oublier la mésaventure.
Votre page d’erreur ne doit pas se transformer en un cul de sac, vous pouvez proposer les solutions suivantes :
- un lien vers la page d’accueil
- un lien vers le plan du site (si vous en possédez un)
- un formulaire de recherche interne au site
- un lien vers un formulaire de contact
- éventuellement une courte liste de liens vers les différentes sections de votre site
Gardez à l’esprit que la page d’erreur 404 reste une page à part :
- évitez de la surcharger en liens, vous augmentez le risque d’avoir des liens périmés
- évitez les grosses illustrations, elle doit s’afficher rapidement
- il est important que l’internaute se sente sur le même site, il est donc fortement conseillé de garder la même mise en page
D’un point de vue technique il reste une petite astuce, à savoir :
- Internet Explorer dispose de sa propre page d’erreur 404 qu’il affiche justement lorsque l’état 404 lui est renvoyé par le serveur et qu’il ne dispose pas de page d’erreur personnalisée. Afin d’être sûre d’afficher la votre, vous devez vous assurer que votre fichier fait plus de 512 bytes, le cas échéant Internet Explorer remplacera sans scrupule votre page (vous pouvez toujours rajouter des caractères).
Il est fortement conseillé d’utiliser un système de gestion pour vos pages d’erreur 404, vous permettant de déceler rapidement les liens morts pointants vers votre site :
- une base de donnée MySQL (permet notamment de déceler les 404 les plus courantes afin de faire face aux problèmes)
- un mail automatique à l’administrateur du site le renseignant sur la provenance ainsi que sur la page désirée
Rendre sa page d’erreur 404 intelligente
Il est possible, grâce à PHP, de doper votre page d’erreur 404. Son comportement pourrait en effet s’adapter aux causes de son apparition. Les scénarios les plus probables sont :
- un signet périmé ou une adresse erronée, entrée à la main
- un lien périmé (externe ou interne)
- un lien périmé provenant d’un moteur de recherche (Google, MSN Search)
Toujours lorsque vous naviguez gaiement sur internet, et que vous vous promenez de page en page, certaines données sont transmises entre ces pages. C’est le cas de l’adresse référante, qui est l’adresse de la page qui pointait vers la nouvelle page. Le premier cas devient donc très simple à identifier, il suffit de tester la présence d’une adresse référante. Dans le cas où elle n’est pas renseignée, c’est-à-dire si l’adresse de la page a été entrée directement par l’utilisateur, on pourra personnaliser son message, expliquant par exemple qu’une faute de frappe a pu se glisser dans l’adresse ou encore que le signet devrait être mis à jour.
En PHP, pour tester la présence d’une adresse référante on procède de la manière suivante :
if (isset($_SERVER['HTTP_REFERER'])) { ....... }
else { ....... }
Dans le cas d’une adresse référante présente, on pourra identifier 3 cas :
- depuis son site
- depuis un moteur de recherche
- depuis un site lambda
Depuis son site
$referer = $_SERVER['HTTP_REFERER'];
if (ereg('votrenomdedomaine.com', $referer)) { ....... }
Depuis un moteur de recherche
else if (ereg('google.', $referer) || ereg('altavista.', $referer) || ereg('yahoo.', $referer)) { ....... }
Depuis un site lambda
else { ....... }
Enfin, afin d’automatiser la notification par email à l’administrateur du site, une dernière fonction bien utile :
function email_admin()
{
$destinaire = "votreadresse@email.com";
$objet = "Erreur 404 : ".$_SERVER['REQUEST_URI'];
$body ="\nErreur 404\n";
$body .="--------------------------------------\n\n";
$body .="Erreur via : ".$_SERVER['REQUEST_URI'];
$body .="\n\nDepuis : ".$_SERVER['HTTP_REFERER'];
$body .="\n";
$body .="\n\nUtilisateur : ".$_SERVER['REMOTE_ADDR']." (".$_SERVER['HTTP_ACCEPT_LANGUAGE'].")\n\n";
$body .="Navigateur : ".$_SERVER['HTTP_USER_AGENT'];
$body .="Depuis : ".$_SERVER['HTTP_HOST'];
$body .="Addresse IP : ".$_SERVER['SERVER_ADDR'];;
$header = "From: 404@votredomaine.com";
mail($destinaire, $objet, $body, $header);
}
J’ai regroupé toutes ces fonctions dans une classe appelée RDXerror (à venir), qui permet de créer facilement et rapidement des pages d’erreur 404, conformément aux indications de ce billet.
Ressources supplémentaires
- The Perfect 404 par Ian Lloyd
- 404 Research Lab
- 404 error pages - Advice, Guidance and Examples of 404 error pages.
- 404lounge.net
Remerciements
Je remercie Fred et François pour leur relecture de ce dossier.