Monitorizar GoogleBot con Google Analytics

Publicado el 13 de abril del 2015 por Lino Uruñuela

Hace tiempo ya comentamos que podemos saber cómo y cuándo acceden los robots de los buscadores a cada url de nuestro site por medio de los logs.

Es muy importante tener visibilidad sobre qué y cómo crawlean GoogleBot, BingBot nuestro site.

Cosas que nos pueden ser muy útiles y a veces salvarnos la vida

  • URLs más frecuentadas por cada Bot
  • Saber cuánto tiempo pierden los bots en URLs de paginaciones
  • Saber cuánto tiempo pierden los bots en URLs con canonical
  • Saber cuánto tiempo pierden los bots en URLs con noindex
  • Saber cuánto tiempo pierden los bots en URLs con parámetros
  • ¿Cuantos accesos a páginas con error 404 hace cada Bot?
  • ¿Desde que país está rastreando?
  • ¿Con que User Agent concretamente?
  • ¿A cuántas URLs únicas acceden los distintos Bots?
  • ¿Cuántas de las URLs que acceden los bots no tienen accesos por parte de usuarios desde hace mas de 1 año?

 

Cómo véis, estos datos nos pueden dar mucha luz sobre que podemos mejorar de nuestro site, y lo mejor, intentar averiguar por que los Bots actuan como actuan en nuestra web y si su rastreo está siendo eficiente.

Ya vimos en un post anterior, que es posible obtener todos estos datos con los logs del servidor, aplicando unas simples órdenes en linux. Pero también es verdad que si no sabes mucho de logs puede no ser fácil aislar bien los datos que quieres obtener (hecho en falta alguna herramienta de logs completamente orientada a SEO), sería de gran ayuda.

Vamos a facilitar un poco esta monotorización mostrando cómo trackear GoogleBot, BingBot (y los que quieras) con Google Analytics, concretamente con Universal Analytics  y su protocolo de medición.

Si algo bueno tiene este protocolo de Universal Analytics es que lo puedes usar cómo tú quieras, y monotorizar desde los usuarios de tu site, hasta el inventario de libros de tu casa, claro está, si sabes  cómo funciona y te has peleado unas cuantas horas conél.

En este caso vamos a usar el protocolo para obtener los accesos de GoogleBot y BingBot a nuestro site

Monotorizamos los siguientes datos

  • Nombre del Bot
  • URL a la que accede
  • Fecha completa a la que accede
  • País desde donde llega
  • Si da un estado http 200, o da error 404
  • User Agent que usa

 

Muchos creeréis que será complicado... NO! solo hay que seguir estos 7 pasos ;)

  1. Créate una nueva propiedad en Google Analytics
    Vamos a hacerlo en una distinta para no contaminar los datos de visitas, aunque como veremos no influye para nada... pero por si acaso
  2. Ve al administrador de Google Analytics y crea una nueva propiedad







  3. Rellenamos los campos







  4. Vamos a crear dos dimensiones personalizadas, para desde el administrador.






  5. Yo las he llamado así, podéis nombrarlas como queráis. La creamos a nivel de "Hit"






  6. Copia y pega el código al final de todo
    Ya tenemos Analytics configurado y preparado, ahora el código php que debes pegar al final de tu site, después del </html> y de cualquier otro comando que ejecute en php, que sea lo último así no interfiere en nada. 

    En Naranja lo único que debes personalizar, tu identificador de Analytics, y si es página de error código 404 y si es correcta 200

    UA-XXXXX-XX ->
    tu identificador de Google Analytics

    $titulo_Pagina -> title de la página

    "200" -> si la página no es la de error, si es la de erro un "404"



    <?php

    class BotTracker {

    static function track($s, $params){

    if(preg_match("/googlebot|bingbot/i", $s['HTTP_USER_AGENT'], $matches)){

    $bot = $matches[0];

    $data = array(
    'v' => 1,
    'tid' => 'UA-XXXXX-XX',
    'cid' => self::generate_uuid(),
    't' => 'pageview',
    'dh' => $s['HTTP_HOST'],
    'dl' => $s['REQUEST_URI'],
    'dr' => $s['HTTP_REFERER'],
    'dp' => $s['REQUEST_URI'],
    'dt' => $params['page_title'],
    'cs' => $bot,
    'cm' => 'direct',
    'cn' => '',
    'ck' => $s['HTTP_USER_AGENT'],
    'cc' => '',
    'uip' => $s['REMOTE_ADDR'],
    'cd1' => $s['HTTP_USER_AGENT'],
    'cd2' => $params['http_code'],
    );

    $url = 'http://www.google-analytics.com/collect';
    $content = http_build_query($data);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, $s['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded'));
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_ENCODING , "gzip");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
    $result = curl_exec($ch);
    $info= curl_getinfo($ch);
    curl_close($ch);
    }

    }


    static private function generate_uuid() {

    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
    mt_rand( 0, 0xffff ),
    mt_rand( 0, 0x0fff ) | 0x4000,
    mt_rand( 0, 0x3fff ) | 0x8000,
    mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
    }

    }
    BotTracker::track($_SERVER, array("page_title"=>$titulo_Pagina, "http_code"=> "200"));
    ?>

    *Este código solo recoge datos de GoogleBot y BingBot por no liar a los lectores con una expresión regular para obtenerlos de todos los bots como pueden ser aHrefs, Screaming Frog, Sistrix, etc. Actualizaré en breve el post añadiendo esta regex.


  7. Comprobar en Informes de tiempo real que está funcionando correctamente
    Puedes probarlo usando un Use-Agent que emule a GoogleBot o a BingBot.

     

     

 

 

Y ya podemos ver los informes como si cada bot que trackeemos fuese una fuente de tráfico distinta

 

 

 

 

Otra vista útil son las URLs que nos dan error 404, como veis se puede segmentar todo (por urls, por carpetas, etc), crear tus propios dashboards, alertas, etc.

OjO debemos cambiar el "200" por el 404 en este código en la url que trate nuestro servidor los errores 404, en mi caso defino el fichero que trata los 404 desde apache y CREO que también se podría hacer con las redirecciones, pero no he comprobado esto.. lo haré ;)

 

 

 

 

En próximos posts, esta información, cruzada con la de los usuarios nos pueden hacer ver por qué ciertas secciones no obtienen visibilidad en las serps de Google, o que urls podemos dejar de linkar porque consumen mucho tiempo de crawleo y muy pocas visitas de usuarios, a las que llamo "urls poco eficientes" y creo que son una de las mayores pistas de cómo matar al Oso Panda ;)

Cualquier mejora, cualquier sugerencia, o cualquier duda ya sabéis... comentarlo y compartirlo!!!

   

Si te ha gustado este post

Vótame en la web de Seonthebeach, para ver poder ver una ponencia completa y más detallada en el @seonthebeach

   

PD: Gracias a Fran Horrillo (excelente Product Manager de Motofan.com) por resumir mi caos de código en una simple clase de PHP!!!


 


Ver 14 comentarios  Comentar

Eduardohace Hace más de 4 años y 323 días

Grande Lino!
Especialmente para tí, se acerca la herramienta de los logs :) en breve espero tener más noticias!

Jordihace Hace más de 4 años y 277 días

tengo que testear pq tengo una duda. ¿tiene sentido usar el "generate_uuid" solo a nivel de session?

Manuelhace Hace más de 4 años y 246 días

Hola, tengo una duda.
En mi caso, cuando pongo el promedio de tiempo del bot en la página, sale 0:00:00. ¿Esto es debido a que están menos de un segundo en la página o es otra métrica? Porque he probado con duración media de la sesión y otras métricas relacionadas con el tiempo, pero sigue siendo 0.
Gracias de antemano.

Wrrioxahace Hace más de 4 años y 244 días

@jordi, la verdad que da un poco igual... no almacenará nunca la cookie

@Manuel
Es normal, piensa que el GoogleBot no es un usuario ni nada, simplemente hace una petición a una url. Vete a saber si realmente obtiene ahí la info, o si solo mira el status... lo relevante es cuánto pasa y por dónde :)

josehace Hace más de 4 años y 113 días

Lino disculpa la molestia, he implementado el código como explicas pero no veo resultados.

Modifique el codigo de seguimiento, y deje el status code en 200. Lo que no cambie es $titulo_Pagina ya que no se bien si debo poner solo el nombre de mi web o que.

El código lo implemente en el footer de la plantilla después de la etiqueta de cierre

Franciscohace Hace más de 4 años y 40 días

Muy bueno el post Lino, ya lo estoy probando...

...me gusta especialmente la categoria del sector que le pones a la nueva propiedad ;)

CFhace Hace más de 3 años y 135 días

Hola Lino! Excelente post! Muy interesante todo lo relacionado al analisis de logs. Podrías por favor decirme como sería la regex para trackear todos los bots? Saludos desde Argentina.

Javier Lorentehace Hace más de 2 años y 107 días

Con varnish o CDN esto es inviable claro..

Lino Uruñuelahace Hace más de 2 años y 107 días

@Javier Lorente supongo que sí, la verdad nunca me enfrenté a ese monstruo

Antoniohace Hace más de 1 años y 296 días

Hola Lino,
Sabes si añadiendo como robot Googlebot ya incluye tanto al robot de desktop como de mobile? O se tendria que añadir Googlebot-Mobile a rastrear?
Muchas gracias!!!

Fran Javietrhace 147 días

Hola Lino
como podemos añadir a este código la identificación de la ip del bot, como sabes hay falsos bots y una forma de saber si son lo que son es con la ip
gracias

Joan marchace 31 días

Excelento post Lino! Has podido trackear los 301 y 302?

Lino hace 30 días

@Joan marc sí!, pero has de configurar el server para que cualquier URL que de 301 sea tratada por una única url del site (como la url de error personalizada) que se encarga de redirigir, en esa url añades el código.

No es un método válido para muchos sites, que no pueden o no deben realizar toda la lógica de redirecciones desde un archivo..

Joan marchace 25 días

Muchísimas gracias @Lino!!
Para acabar, sabes si con Varnish tendríamos problemas? Entiendo que al no hacerse siempre consultas al servidor por estar en cache nos podría dar problemas, es así?

Deja un comentario

* Twitter
(*si pones el usuario te aviaremos cuando te mencionen en los comentarios de este post)

Recibir correo si hay nuevos comentarios

He leído y acepto la política de privacidad

Mecagoenlos.com te informa que los datos de carácter personal que nos proporciones rellenando el presente formulario serán tratados por Lino Uruñuela. como responsable de esta web.

La finalidad de la recogida y tratamiento de los datos personales que te solicitamos es para gestionar los comentarios que realizas en este blog.

Legitimación: Al marcar la casilla de aceptación, estás dando tu legítimo consentimiento para que tus datos sean tratados conforme a las finalidades de este formulario descritas en la política de privacidad.

Como usuario e interesado te informamos que los datos que nos facilitas estarán ubicados en los servidores de Linode.com (proveedor de hosting de Mecagoenlos.com) cumpliendo la ley de protección de datos. Ver política de privacidad de Linode.com.

Podrás ejercer tus derechos de acceso, rectificación, limitación y suprimir los datos en info@mecagoenlos.com, así como el derecho a presentar una reclamación ante una autoridad de control. Más información aquí.


 


Eduardohace Hace más de 5 años y 118 días

Grande Lino!
Especialmente para tí, se acerca la herramienta de los logs :) en breve espero tener más noticias!

Jordihace Hace más de 5 años y 72 días

tengo que testear pq tengo una duda. ¿tiene sentido usar el "generate_uuid" solo a nivel de session?

Manuelhace Hace más de 5 años y 41 días

Hola, tengo una duda.
En mi caso, cuando pongo el promedio de tiempo del bot en la página, sale 0:00:00. ¿Esto es debido a que están menos de un segundo en la página o es otra métrica? Porque he probado con duración media de la sesión y otras métricas relacionadas con el tiempo, pero sigue siendo 0.
Gracias de antemano.

Wrrioxahace Hace más de 5 años y 39 días

@jordi, la verdad que da un poco igual... no almacenará nunca la cookie

@Manuel
Es normal, piensa que el GoogleBot no es un usuario ni nada, simplemente hace una petición a una url. Vete a saber si realmente obtiene ahí la info, o si solo mira el status... lo relevante es cuánto pasa y por dónde :)

josehace Hace más de 4 años y 273 días

Lino disculpa la molestia, he implementado el código como explicas pero no veo resultados.

Modifique el codigo de seguimiento, y deje el status code en 200. Lo que no cambie es $titulo_Pagina ya que no se bien si debo poner solo el nombre de mi web o que.

El código lo implemente en el footer de la plantilla después de la etiqueta de cierre

Franciscohace Hace más de 4 años y 200 días

Muy bueno el post Lino, ya lo estoy probando...

...me gusta especialmente la categoria del sector que le pones a la nueva propiedad ;)

CFhace Hace más de 3 años y 295 días

Hola Lino! Excelente post! Muy interesante todo lo relacionado al analisis de logs. Podrías por favor decirme como sería la regex para trackear todos los bots? Saludos desde Argentina.

Javier Lorentehace Hace más de 2 años y 267 días

Con varnish o CDN esto es inviable claro..

Lino Uruñuelahace Hace más de 2 años y 267 días

@Javier Lorente supongo que sí, la verdad nunca me enfrenté a ese monstruo

Antoniohace Hace más de 2 años y 91 días

Hola Lino,
Sabes si añadiendo como robot Googlebot ya incluye tanto al robot de desktop como de mobile? O se tendria que añadir Googlebot-Mobile a rastrear?
Muchas gracias!!!

Fran Javietrhace 307 días

Hola Lino
como podemos añadir a este código la identificación de la ip del bot, como sabes hay falsos bots y una forma de saber si son lo que son es con la ip
gracias

Joan marchace 191 días

Excelento post Lino! Has podido trackear los 301 y 302?

Lino hace 190 días

@Joan marc sí!, pero has de configurar el server para que cualquier URL que de 301 sea tratada por una única url del site (como la url de error personalizada) que se encarga de redirigir, en esa url añades el código.

No es un método válido para muchos sites, que no pueden o no deben realizar toda la lógica de redirecciones desde un archivo..

Joan marchace 185 días

Muchísimas gracias @Lino!!
Para acabar, sabes si con Varnish tendríamos problemas? Entiendo que al no hacerse siempre consultas al servidor por estar en cache nos podría dar problemas, es así?



Lea otros artículos de Google Analytics

Últimos posts

Últimos comentarios


Brett

Hi! I just wanted to assk if you ever have any trouble with hackers? My last blog (wordpress) was hackerd and I ended up losing a few month
Post: El valor de los logs para el SEO

Alfonzo

If you would like to get much from this article then you have to apply such strategies to your won web site. Would You Feel free to vis
Post: El valor de los logs para el SEO

Miriam

Buenas Lino, No sé si me podrás echar una mano, estoy intentando comprobar porque Google no puede acceder a mi robots.txt, incluso he
Post: Errores críticos originados por el robots.txt

Natasha

Hello mates, nice paragraph and good arguments commented at this place, I am truly enjoiying by these. Would You Feeel free to surf to
Post: El valor de los logs para el SEO

Luis

Hola amigo, me gustaría saber si mi web www.tuguiapara.com puede recibir backlinks, gracias.
Post: Links desde la misma Ip

Lino

Hola @anna , creo que Fede Post: Qué es ofuscar enlaces y cómo mejora el enlazado interno

anna

donde se pone el php i jv para wordpress?
Post: Qué es ofuscar enlaces y cómo mejora el enlazado interno

Anna


Post: Qué es ofuscar enlaces y cómo mejora el enlazado interno

Lino

@India eso es debido a que si no solicitas la dimensión de página siempre hace los cálculos por propiedad, que solo tiene en cuenta el pr
Post: Datos incoherentes y cálculo de la posición media en Search Console

India

Buen día, muy buenas explicaciones! Justo estoy viendo las métricas de una consulta exacta. Cuando miro las páginas y sumo el total de cl
Post: Datos incoherentes y cálculo de la posición media en Search Console