Muchas veces estamos a punto de lanzar un sitio pero todavia no nos interesa que los robots de busqueda lo indexen, quiza porque aun no hemos terminado el trabajo SEO o quiza simplemente queremos saber cuantas veces al dia ingresa el bot a nuestra pagina.

Si contamos con soporte PHP en nuestro servidor, agregando las siguientes lineas podremos saber si el que acaba de entrar a la web es o no un bot.

$SEARCH_ENGINES_UA = array(
// Google Web
‘Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)’,
‘Googlebot/2.1 (+http://www.googlebot.com/bot.html)’,
‘Googlebot/2.1 (+http://www.google.com/bot.html)’,
// Yahoo! Web
‘Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)’,
// MSN web
‘msnbot/1.0 (+http://search.msn.com/msnbot.htm)’,
‘msnbot/0.9 (+http://search.msn.com/msnbot.htm)’,
‘msnbot/0.11 ( http://search.msn.com/msnbot.htm)’,
‘MSNBOT/0.1 (http://search.msn.com/msnbot.htm)’
);

if(in_array($_SERVER[‘HTTP_USER_AGENT’],$SEARCH_ENGINES_UA))
{
header(‘HTTP/1.1 302 Found’);
header(«Location: http://www.internetox.com/»);
exit();
}

Vamos a explicar el codigo:

$SEARCH_ENGINES_UA = array(
// Google Web
‘Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)’,
‘Googlebot/2.1 (+http://www.googlebot.com/bot.html)’,
‘Googlebot/2.1 (+http://www.google.com/bot.html)’,
// Yahoo! Web
‘Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)’,
// MSN web
‘msnbot/1.0 (+http://search.msn.com/msnbot.htm)’,
‘msnbot/0.9 (+http://search.msn.com/msnbot.htm)’,
‘msnbot/0.11 ( http://search.msn.com/msnbot.htm)’,
‘MSNBOT/0.1 (http://search.msn.com/msnbot.htm)’
);

Es el array en el que se encuentran detallados los User Agent conocidos de los distintos buscadores (en este caso solo Yahoo, Google y Live), ese User Agent es lo que usa el bot para identificarse frente al servidor.

if(in_array($_SERVER[‘HTTP_USER_AGENT’],$SEARCH_ENGINES_UA))
{
header(‘HTTP/1.1 302 Found’);
header(«Location: http://www.internetox.com/»);
exit();
}

Segunda parte, con la funcion in_array preguntamos si el «$_SERVER[‘HTTP_USER_AGENT’]» (osea el nombre con el que se esta identificando el «usuario») se encuentra en la lista de BOTS ($SEARCH_ENGINES_UA).

Si se encuentra entra en el IF y ejecuta, en este caso el siguiente codigo:

header(‘HTTP/1.1 302 Found’);
header(«Location: http://www.internetox.com/»);
exit();

Que no es ni mas ni menos que una redireccion a http://www.internetox.com (aqui debes poner la url que deseas), con una cabecera 302 (una redireccion temporal).

Dentro de este bloque, osea, dentro de las llaves ({}) puedes ingresar lo que quieras, por ejemplo puedes habilitar un contador para ver cuantas veces entran los distintos bots a tu sitio o enviarte un mail cada vez que lo hacen.

Espero que les sea de utilidad, muchas gracias.

3 thoughts on “Detectar bot con PHP

    1. Hola Angel! Con ese script puedes hacer lo que buscas. Te recomiendo que reemplaces el codigo por uno que te envie un mail… ejemplo:

      $SEARCH_ENGINES_UA = array(
      // Google Web
      ‘Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)’,
      ‘Googlebot/2.1 (+http://www.googlebot.com/bot.html)’,
      ‘Googlebot/2.1 (+http://www.google.com/bot.html)’,
      // Yahoo! Web
      ‘Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)’,
      // MSN web
      ‘msnbot/1.0 (+http://search.msn.com/msnbot.htm)’,
      ‘msnbot/0.9 (+http://search.msn.com/msnbot.htm)’,
      ‘msnbot/0.11 ( http://search.msn.com/msnbot.htm)’,
      ‘MSNBOT/0.1 (http://search.msn.com/msnbot.htm)’,
      );

      if(in_array($_SERVER[‘HTTP_USER_AGENT’],$SEARCH_ENGINES_UA))
      {
      $body_top = «»;
      $body_top .= «Atención, el siguiente robot de busqueda ha pasado por: «.$_SERVER[‘SERVER_NAME’];
      $body_top .= «»;
      $body_top .= «==============================================================»;
      $body_top .= «User Agent:» . $_SERVER[‘HTTP_USER_AGENT’];
      $body_top .= «»;
      $body_top .= «Request Uri:» . $_SERVER[‘REQUEST_URI’];
      $body_top .= «»;
      $body_top .= «Date: » . date(‘l jS \of F Y h:i:s A’);
      $body_top .= «==============================================================»;

      $subject = «Nueva visita de robot – » . $_SERVER[‘SERVER_NAME’];
      $to = array(«tumail@loquesea.com»);
      $cantidad = «1»;

      $cabeceras = ‘MIME-Version: 1.0’ . «\r\n»;
      $cabeceras .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»;
      $cabeceras .= «FROM: Manage \n»;
      //mando mail
      for ($x=0;$x<$cantidad;$x++) {
      @mail($to[$x],$subject,$body_top,$cabeceras);
      }
      }

      Saludos!

Comments are closed.