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.
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
<?
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"));
?>
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 postVó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!!!
Eduardo (@egarolera)hace Hace más de 9 años y 215 días
Grande Lino!
Especialmente para tí, se acerca la herramienta de los logs :) en breve espero tener más noticias!
Jordi (@jrosell)hace Hace más de 9 años y 169 días
tengo que testear pq tengo una duda. ¿tiene sentido usar el "generate_uuid" solo a nivel de session?
Manuel (@)hace Hace más de 9 años y 138 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.
Wrrioxa (@errioxa)hace Hace más de 9 años y 136 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 :)
jose (@)hace Hace más de 9 años y 5 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
Francisco (@)hace Hace más de 8 años y 297 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 ;)
CF (@)hace Hace más de 8 años y 27 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 Lorente (@)hace Hace más de 6 años y 364 días
Con varnish o CDN esto es inviable claro..
Lino Uruñuela (@)hace Hace más de 6 años y 364 días
@Javier Lorente supongo que sí, la verdad nunca me enfrenté a ese monstruo
Antonio (@)hace Hace más de 6 años y 188 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 Javietr (@)hace Hace más de 5 años y 39 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 marc (@)hace Hace más de 4 años y 288 días
Excelento post Lino! Has podido trackear los 301 y 302?
Lino (@errioxa)hace Hace más de 4 años y 287 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 marc (@)hace Hace más de 4 años y 282 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í?