arbre

Les robots

Lorsque vous soumettez votre site à un site de recherche, ce dernier va, après un temps variable, envoyer un de ses robots vous rendre visite. Si vous n' avez pas accès à des statistiques ou que vous ne possédez aucun logiciel de traitement de logs, il vous sera difficile de savoir si vous avez eu sa visite.

Le principe

Lorsqu' un robot passe sur votre site, il laisse une trace visible dans les logs. Cette trace est également visible depuis la page ASP qui est demandée par le robot. La variable serveur HTTP_USER_AGENT vous renseigne à ce sujet.
Avec un peu d' habitude, il n' est pas toujours facile de trouver la correspondance entre la signature et le site auquel appartient le robot. Après de nombreuses recherche, j' ai réussi à réunir une collection de signatures qui permet de reconnaître les principaux robots.
En rassemblant les informations de la variable HTTP_USER_AGENT et la liste des signature, il devient possible de créer une petite routine qui enregistre le passage de ce visiteur un peu spécial.
En examinant les signatures à ma disposition, j' ai constaté que la version du robot figurait régulièrement dans la signature. Comme les versions évoluent rapidement, il devient compliqué de tenir à jour une bibliothèque de signatures. C' est pourquoi, j' ai choisi de reconnaître les robots passants sur les pages en utilisant qu 'une seule partie de leur signature : celle qui me semblait être le moins sujet au changement.

L' enregistrement

Le fichier enregitre_robot.asp, qui est à inclure dans vos pages, se charge de mémoriser les visites.
<!--#include virtual="robot/enregitre_robot.asp" -->
Le code de ce dernier est :
      
<% 
  if Session("Enregistre")<>"oui" then
    Session("Enregistre")="oui"
    Set Conn = Server.CreateObject("ADODB.Connection")
 		Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/WEBSERVER/henri-ruch.ch/database/robot.mdb")
    ligne = request.ServerVariables("HTTP_USER_AGENT")
    Set query = Conn.Execute("SELECT Index_Robots.* FROM Index_Robots where instr('"& ligne & "',Reconnaissance)>0")
    If not query.EOF Then
      id =cstr(query("N°"))
      Conn.Execute("UPDATE Index_Robots SET visites=visites+1,Date_visite=now() WHERE N° ="& id)
      Set query = Nothing
    end if
    Conn.close
    set Conn=nothing
  end if
%>

 La variable session "enregistre" a comme fonction d' empêcher que le robot soit enregistré plusieurs fois  dans la même session. Cette méthode n' est pas parfaite, car souvent les robots se connectent pages par page et ouvrent autant de sessions que de pages.

Si le robot n'a pas encore été enregistré, le programme va chercher sa signature dans la base de données. Comme expliqué plus haut, j' ai choisi de ne garder qu 'une partie de la signature du robot dans la base. La recherche doit donc être adaptée à ce choix. Il n' est pas possible de rechercher une égalité de signatures entre le visiteur et la base de données. Il faut rechercher dans la base la reconnaissance qui peut correspondre à la signature, en comparant le contenu des différentes chaînes:

SELECT Index_Robots.* FROM Index_Robots where instr('google',Reconnaissance)>0

Une fois la correspondance trouvée, il faut incrémenter les visites du robot.

L' affichage

Le fichier statistiques_robot.asp sert à afficher les visites.

<html>
<head>
<title>Visite des robots</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<h1>Visites par robots</h1>
<% 
  Set conn = Server.CreateObject("ADODB.Connection")
 		Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=/WEBSERVER/henri-ruch.ch/database/robot.mdb")
  Set message = Server.CreateObject("ADODB.Recordset")
  message.Open "SELECT sum(Visites) as NbVisites FROM Index_Robots", conn, 3, 3
  response.write("Nombre de visites par des robots : "+cstr(message.fields("NbVisites")))
  message.close
  set message=nothing
%>
<table cellpadding="0" cellspacing="0" border="0">
  <tr>
    <th align="left" valign="top">Robots</th>
    <th valign="top" align="center">Nombre</th>
    <th valign="top" align="center">Date/heure</th>
  </tr>
<%
  Set message = Server.CreateObject("ADODB.Recordset")
  message.Open "SELECT * FROM Index_Robots where visites>0 order by Visites desc ", conn, 3, 3
  do while not message.eof
%>
  <tr> 
    <td align="left" valign="top">&nbsp;<%=message.fields("Nom")%>&nbsp;</td>
    <td valign="top" align="left">&nbsp;<%=message.fields("Visites")%>&nbsp;</td>
    <td align="left" valign="top">&nbsp;<%=message.fields("Date_visite")%>&nbsp;</td>
  </tr>
<%
    message.movenext
  loop 
  message.close
  set message=nothing
  conn.close
  set conn=nothing
%>
</table>
</body>
</html>

Final

La brique proposée peut fortement être améliorée. Deux voies me virement à l' esprit :

  • mémoriser la date de visite du robot et ne l' enregistrer que si ce n' est pas le même jour.
  • les voleurs d' adresse E-mail laissent les mêmes traces que les robots. Essayez de les reconnaître et de leurs cacher vos adresses E-mail.

Voir l'exemple

Source avec la base de données(ZIP)

Populassite.com : moteur de recherche faisant augmenter votre trafic !
Toutes les heures, le serveur contrôle que votre site est en ligne. En cas de problème, un mail vous est envoyé.
Vous avez l'habitude d'oublier les dates importantes? Oubli vous prévient gratuitement par email !

Page modifiée le 09/01/2007 CCBot/1.0 (+http://www.commoncrawl.org/bot.html)5004 visiteur(s) aujourd'hui
Comment créer son site

Visites des robots