Detectar bot con PHP

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.

Si te gustó esta entrada, no olvides suscribirte a nuestro Feed! También puedes seguirnos en Twitter.

3 Responses to Detectar bot con PHP

  1. angel says:

    kiero saber si en realidad estan pasando por mi web

  2. David Perez says:

    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!

Leave a Reply

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

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>