Voir un article

PHP : comment détecter les robots (php crawler detect)

Il est souvent utile de faire des traitements particuliers pour les robots qui indexent votre site (et qui peuvent représenter 50% et plus de votre trafic).

En php il existe nativement browscap (cf sur google "php browscap" ) qui est tres efficace mais qui nécessite une mise à jour de sa base de signatures.

Plus simplement pour repérer 99% des visites de robots, on peut utiliser une petite expression régulière en php pour vérifier si la signature de votre visiteur contient les mots Bot (pour GoogleBot, MsnBot, Dotnetbot, TwicelerBot, Exabot, VoilaBot etc...) , Spider (pour Baidu Spider le géant chinois, Speedy Spider etc ...) et Yahoo (qui n'utilise pas le mot bot ou robot dans sa signature le cochon).


Voici donc les 2 lignes de PHP qui vont bien :

$crawler = 0;
if ( preg_match('/(bot|spider|yahoo)/i', $_SERVER[ "HTTP_USER_AGENT" ] )) $crawler = 1 ;



C'est tout ! , après ces 2 lignes vous pouvez à tout moment utiliser la variable $crawler pour faire des traitements particuliers pour les robots (pour forcer l'utilisation d'un cache sur un CMS , ou lui mettre une petite attente avec la fonction sleep histoire de le ralentir et éviter de pénaliser les vrais visiteurs , ou même pour lui cacher certaines parties du site ) :

// si c'est un crawler , je le ralenti d'1 sec
if ( $crawler ) sleep(1);



Et voici après quelques heures de traçage, les "crawlers" repérés sur mon site , à gauche le nombre de fois et à droite la signature reconnue comme un crawler avec ce test :

  12066 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
   1385 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)
    430 (compatible; DotBot/1.1; http://www.dotnetdotcom.org/, crawler@dotnetdotcom.org)
    375 msnbot/2.0b (+http://search.msn.com/msnbot.htm)
    322 (Twiceler-0.9 http://www.cuil.com/twiceler/robot.html)
    238 Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; SPV M700; OpVer 19.123.2.733) OrangeBot-Mobile 2008.0 (mobilesearch.support@orange-ftgroup.com)
    122 ShopWiki/1.0 ( +http://www.shopwiki.com/wiki/Help:Bot)
    102 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)
     42 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)
     36 TurnitinBot/2.1 (http://www.turnitin.com/robot/crawlerinfo.html)
     18 (compatible; spbot/2.0.2; +http://www.seoprofiler.com/bot/ )
      6 (compatible; bnf.fr_bot; +http://www.bnf.fr/fr/outils/a.dl_web_capture_robot.html)
      4 msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)
      2 T-Mobile Dash Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 320x240;) MSNBOT-MOBILE/1.1 (+http://search.msn.com/msnbot.htm)
      2 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Spinn3r (Spinn3r 3.1); http://spinn3r.com/robot) Gecko/20021130
      2 (compatible; MJ12bot/v1.3.2; http://www.majestic12.co.uk/bot.php?+)
      2 Googlebot-Image/1.0
      2 Gigabot/3.0 (http://www.gigablast.com/spider.html)
      1 msnbot/1.1 (+http://search.msn.com/msnbot.htm)
      1 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
      1 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)



18 853 clics - Créé le 28/04/2010 par Tito - Modifié le 28/03/2013



Réagissez, commentez, discutez ...

6 réactions.

  • par tito (Zaclynaute) - 28/03/2013 09:29

    @fabien : oui c'est juste, et pour aller plus loin la fonction php ereg est obsolète , il faut utiliser preg_match de nos jours, et avec l'option i pour ignore case , on solutionne par la même le problème des majuscule et minuscule.
    j'ai mise à jour l'article en conséquence. merci

  • par fabien (non connecté) - 27/03/2013 17:07

    Il y a plus simple en comparant les valeurs minuscules avec strtolower !!

  • par tito (Zaclynaute) - 28/02/2013 07:36

    @highlander: salut nico, oui dans l'index.php , des le départ (sorry de répondre slmt javais pas vu passé ton msg l'an denrier !!! )

    @sylvain : oui bien sur ils peuvent, mais dans la grosse majorité des cas cette signature n'est pas masquée pour ce quie est des bot qui font de l'indexation (moteurs de recherche). PAR CONTRE pour les bots à spam, effectivement il faut sortir une autre artillerie ! on a le pb aussi sur ce site !: quand le php récupère des "posts" sur ton formulaire, tu peux faire des tests via preg_match et virer déjà tous ceux qui ont des liens (http) + 2 particules d'anglais classiques : " to " , " the " et 3 ou 4 mots clefs : "beat" , "bag", "boots". on a bloqué 99% du spam par posts sur ce site juste avec ça.
    Apres si ça suffit pas il faut mettre en place des captcha, mais c'est pénible pour les vrais utilisateurs ...

   [...] pour voir les réactions précédentes cliquer ici »




Partager ?

diaspora  G+  facebook  twitter  Digg  Yahoo  Delicious  Technorati  myspace


Voir d'autres articles en rapport avec celui-ci ?



Stats des clics sur cet article : cliquez ici »



Vous voulez contribuer et publier un article dans cette rubrique ?

Merci de vous identifier ou de vous créer un compte si ce n'est pas déjà fait.