Programando un contador de impresiones que excluya a los bots

El tráfico generado por robots, crawlers, spiders y demás que navegan por la red es casi tan grande como el de los humanos. Si queremos programar un contador fiable debemos excluir todas esas visitas.

El tráfico generado por robots, crawlers, spiders y demás que navegan por la red es casi tan grande como el de los humanos. Si queremos programar un contador fiable debemos excluir todas esas visitas.

If our logs are any indication, few bots actually bring enough human traffic to make up for their crawls, so there’s alot of free-loading bots out there.

Bots vs Browsers

Programar un contador de impresiones no es nada del otro mundo, básicamente es un código que se ejecuta una vez se carga la página y que realiza una inserción en la base de datos.

Yo lo he puesto en mis plantillas al final del todo y precedido de un Response.flush para que en caso de que algo falle el usuario reciba la página solicitada sin demoras, además sólo hago una inserción en la base de datos y el recuento de las totalizaciones se realiza por las noches en un proceso batch… de esta manera aun siendo un código que se ejecuta en todas y cada una de las páginas es mucho más ligero que si primero tuviera que buscar el número de impresiones del día (select) y luego actualizarlo (update).

Lo complicado empieza cuando te das cuenta de que más de un 50% de tus impresiones proceden de robots, spiders, crawlers… y que necesitas filtrar todas esas entradas para que el dato se asemeje lo máximo posible a lo que te devolvería un Google Analytics.

¿Cómo hacemos para filtrar toda esta moralla? Pues yo no sé cómo lo harán los sistemas estadístico pero yo lo hago por IPs o analizando el UserAgent del navegador que visita la página.

En iplist.com (IP Addresses of Search Engine Spiders) puedes encontrar un buen listado de IPs de bots para excluir, son unas 3.500 direcciones aunque después de importarme todas ellas cuando intente cruzarlas con mis datos no hubo muchas coincidencias…

Así que opté por re-invetar la rueda (one more time) y crearme mi propia lista con un poco de ayuda de Bots vs Browsers. Básicamente lo que hago es en el proceso batch buscar dentro del UserAgent palabras como bot, crawl, spider, mediapartners, slurp… y almacenar todas esas IP para excluir sus impresiones (ya tengo almacenadas unas 400 y subiendo… que aun siendo menos de las 3.500 de iplists.com me funcionan mucho mejor). Por el momento el sistema funciona bastante bien y el número de impresiones que recibo se acerca muchísimo al que me dan mis estadísticas.

Llevaba tiempo necesitando un contador de este tipo, lo he estado retrasando porque sé que el API de Analytics está al caer pero yo no podía esperar más… cuando lancen el API ya veré la manera de integrar también esos datos para corroborar los mios.