Projet Webmaster PHP
Portail PHP




Script : Gérer les liens brisés d'un annuaire

 
  
 

Installer un script d'annuaire sur un site web est une chose facile à faire, ajouter un formulaire de soumission est également aisé. Pour autant le système est il viable dans le temps, tant au niveau du référencement des pages, que de la qualité de l'annuaire, la réponse est évidement non.

Qui dit viabilité dans le temps dit évolution et en termes d'annuaire web, il faut prendre en compte le fait que les sites web évoluent. Mieux vaut alors gérer son annuaire avec des outils plutôt qu'à la main. C'est ce que propose le script qui suit, il va permettre de conserver un annuaire avec des liens brisés en faible quantité.

Un site web évolue

Un site web n'est pas figé dans le temps, il peut changer de nom de domaine, l'hébergeur fusionne ses sociétés, le site ferme pour de multiples raisons et l'information n'est pas remontée au webmaster qui gère un annuaire.
Rien de grave, l'internaute passe par l'annuaire, clique sur l'url d'un site référéncé dans l'annuaire et tombe sur une erreur 404 (page indisponible), sur une erreur 403 (site fermé) ou une page qui est rédirigée vers la nouvelle adresse. Dans le cas du moteur de recherche qui parcourt les pages pour indexation, si celui-ci tombe sur un site en erreur, la page qui faisait le lien est mal vue, si il tombe sur une page de redirection, selon le type de redirection permanente (entête 301) ou temporaire (entête 302), le moteur jugera différement la qualité du site cible. Pour un annuaire de qualité, une gestion des liens brisés est donc importante.

Gérer les liens brisés

Le principe de fonctionnement est simple, il s'agit d'aller lire l'entête http retournée par le site de l'annuaire et de lire le code retourné, si c'est un code 200, tout va bien, si c'est un code 404 ou 403, il y a quelque chose à faire...

Etant donné que le webmaster a des outils à sa disposition, il va profiter d'une visite d'un internaute sur l'annuaire pour analyser les entêtes. En fonction de l'entête récupérée, le script peut envoyer à une adresse mail les références du site visitée, son url, son identifiant, l'entête HTTP retournée.

Comme le webmaster est en plus organisé, l'adresse mail peut en plus être paramétree pour filtrer les mails de vérifications recus et faire le tri entre les mails d'erreur à lire et les mails de bon fonctionnement à archiver uniquement.

Voici donc le script PHP utilisé sur notre annuaire thématique:

function my_headers($url, $idx)
{
$url_info=parse_url($url);
$port = isset($url_info['port']) ? $url_info['port'] : 80;
@$fp=fsockopen($url_info['host'], $port, $errno, $errstr, 30);

if($fp)
{
$head = "HEAD ".@$url_info['path']."?".@$url_info['query']." HTTP/1.0\r\nHost: ".@$url_info['host']."\r\n\r\n";
fputs($fp, $head);
while(!feof($fp))
{
if($header=trim(fgets($fp, 1024)))
{
$headers[] = $header;
}
}
$tab=(explode(" ",$headers[0]));
$code = $tab[1];
$titre_mail="Vérification ".$code; // preparation du mail avec le code retour
}
else
{
$code = "invalide"; // cas ou il n'y pas d'entete retournee !
$titre_mail="Invalidation";
}

$email="votre@webmail";
$t = "Bonjour,\n\n";
$t .= "Le site ".$url." numéro ".$idx." a renvoye le code ".$code;
@mail($email,$titre_mail." de liens sur mon site",$t,"From: votre@webmail");
}