Être notifié au passage du robot google sur son site

Google BotLe référencement est parmi les grands soucis qu’un webmaster ou blogueur peuvent avoir, A chaque fois qu’on rajoute du contenu, la question qui se pose est : Quand est ce que le robot de Google passera pour l’indexer ? Aujourd’hui j’ai eu l’idée de partager une petite astuce pour être alerté au passage de Google sur votre site!

En fait pour indexer un site, google possède plusieurs robots (spider/crawler), ce sont des programmes qui tournent en boucle en parcourant le web et enregistrent tous les contenus qu’ils trouvent sur leurs chemin! Il en existe plusieurs :

  • GoogleBot : c’est le robot qui indexe les pages de contenu
  • Googlebot-Image: celui qui indexe les images (images.google.com)
  • AdsBot-Google: le robot de Google Adsense
  • Mediapartners-Google: sert à indexer les sites et à proposer la publicité en conséquence dans le cadre d’une partenaria (exemple lycos)

Il est possible de détecter le passage de l’un de ces robots sur son site, l’idée est de faire un test sur la variable global $_SERVER[‘UserAgent’], qui contient le nom du navigateur qui a effectué la requête HTTP!

Voici un bout de code pour envoyer un mail à chaque passage de GoogleBot sur votre site :

[code lang=’php’]
if(!empty($_SERVER[‘HTTP_USER_AGENT’])
{
if(strpos($_SERVER[‘HTTP_USER_AGENT’], ‘googlebot’) !== false)
{
$webmastermail = ‘[email protected]’;
mail($webmastermail, ‘Alerte Googlebot’,”GoogleBot t’as rendu visite sur la page : ” . $_SERVER[‘REQUEST_URI’]);
}
}
[/code]

Et voilà, grâce à ce bout de code vous serai notifiés à chaque passage du robot Google sur votre site!

Parcontre ce n’est pas génial coté securité! Dans une requêtte HTTP l’entête HTTP_USER_AGENT est modifiable, du coup un utilisateur malveillant peut flooder votre boite mails avec un grand nombre de requêtes ayant UserAgent: Googlebot! La solution est de faire un lookup sur l’adresse IP envoyant la requête et résoudre le nom de domaine avec la fonction gethostbyaddr, si le nom de la machine ne correspond pas à *.googlebot.com pas d’envoi d’email ;)

[code lang=’php’]
if(!empty($_SERVER[‘HTTP_USER_AGENT’])
{
if(strpos($_SERVER[‘HTTP_USER_AGENT’], ‘googlebot’) !== false)
{
if(preg_match(‘#.*?\.googlebot\.com$#’,gethostbyaddr($_SERVER[‘REMOTE_ADDR’])))
{
$webmastermail = ‘[email protected]’;
mail($webmastermail, ‘Alerte Googlebot’,”GoogleBot t’as rendu visite sur la page : ” . $_SERVER[‘REQUEST_URI’]);
}
else
{
// on peux bannir l’adresse en la rajoutant au fichier .htaccess
/* if(is_writable(‘.htaccess’))
{
$h = fopen(‘.htaccess’,’a+’);
fwrite($h,”\nDeny from: “.$_SERVER[‘REMOTE_ADDR’]);
fclose($h);
}
*/
}
}
}
[/code]

A savoir que bannir l’utilisateur si le hostname ne correspond pas n’est pas une très bonne idée vu que google peut changer de domaine (*.googlebot.com), par contre ça vous évitera de recevoir un joli paquet d’emails, j’ai commenté cette partie du code pour éviter de bannir google si jamais *.googlebot.com change ;)

J’espère que cet astuce vous sera utile!

Bonne nuit!

9 thoughts on “Être notifié au passage du robot google sur son site

  1. Pas mal l’astuce de black listing, mais je pense si l’intrus
    est au courant de ce mécanisme il pourait forger des packets en spoofant la source afin de causer un deni de service.

  2. Merci pour le bout de code. Tu peux aussi facilement vérifier le passage du robot dans l’outil google webmaster !!

  3. Excellente astuce que j’utilise pour envoyer sélectivement la balise d’identification aux “user-agents” concernés (google, yahoo…).
    En effet, ces tags ne regardent personne et ça fait toujours une ou deux lignes en moins à envoyer;^_^)
    Juste 2 améliorations possibles :
    1) utiliser stripos à la place de strpos qui est “case-sensitive”
    2) rechercher uniquement le mot-clef “google” (ou “yahoo” ou autre) dans la chaîne de l’agent-user pour intercepter toutes les évolutions possibles du bot avec 1 seul test (comme “Mediapartners-Google”, par exemple, qui retournera FALSE avec un test sur “GoogleBot”)

    Cordialement, Thierry

  4. Ptite astuce pour éviter un message d’erreur au cas ou l’host envoie une IP incorrecte

    $RemoteIP = $_SERVER['REMOTE_ADDR'];
    $HostName = (@gethostbyaddr($RemoteIP) ? gethostbyaddr($RemoteIP) : false);
    if($HostName != false){
    //Le code s'éxecute
    }
    else{
    //Script en cas d'érreur
    }

Leave a Reply

Your email address will not be published. Required fields are marked *