¿Cuál es la mejor manera de excluir los bots del recuento de vistas?

11

Mi sitio web cuenta las visitas de visitantes en ciertas páginas. Me di cuenta de que Google y otros Bots están "haciendo clic" en mi sitio como locos y algunas de las páginas obtienen conteos de visitas poco realistas (en comparación con los producidos por humanos).

Solicito las mejores prácticas para excluir esos bots de mis recuentos de vistas. Obviamente, un simple "agente de usuario" contiene "bot" no lo hará.

No creo que haya una solución de prueba de bala ni la necesito.

Nota: estoy usando PHP + MySQL.

Eisberg
fuente
La respuesta correcta a su pregunta depende del tipo de software que utilice para rastrear sus estadísticas.
Goboozo
@Goboozo Estoy usando PHP + MySQL. Esto no es para seguir mis estadísticas. Se trata de consultas para entradas "relacionadas", "calientes" e "interesantes".
eisberg

Respuestas:

19

Me alegra que sepas que no habrá una forma a prueba de balas para lograr esto. Eso significa que su perspectiva es al menos realista.

Como JavaScript no es una opción, diría que te quedan:

  • Verifique en el agente de usuario la palabra "bot" en él. Eso atrapará a la mayoría de ellos.

  • Compile una lista de bots conocidos y filtéelos en función de algún tipo de identificador único, probablemente su agente de usuario.

  • Ponga un enlace oculto en el pie de página de su sitio web que enlace a una página que recopile agentes de usuario y / o direcciones IP. Los usuarios no verán esto, pero los bots sí. Entonces, cualquiera que visite esa página será un bot. Grabarlos y luego bloquearlos de sus estadísticas.

John Conde
fuente
Esto parece prometedor. Me gusta la idea de una trampa. Hago algo similar para los comentarios de los usuarios en mi sitio con un campo de entrada invisible (en lugar de un Captcha feo). :-)
eisberg
2
@eisberg, se llama honeypot. Soy un gran admirador de ellos.
John Conde
probablemente la mejor solución ...
vkGunasekaran
7

Hay tres formas bastante simples:

  1. Utilice Google Analytics, que procesará y manejará todos los datos por usted, y le presentará estadísticas detalladas de los visitantes y cómo llegaron a su sitio. Esta es, con mucho, la solución más fácil.
  2. Use Javascript para hacer el conteo. Cuando la página se haya cargado, genere una solicitud AJAX para su script de conteo. Los robots y las arañas no ejecutan Javascript.
  3. La detección de "bot" en la cadena del agente de usuario es bastante confiable. Alternativamente, podría apegarse a bots conocidos solo como Googlebot, Yahoo, MSNbot, etc. Verificar estos tres debería cubrir el 99% de su tráfico de bot. Esta página tiene algunas otras, pero parece bastante desactualizada.

ACTUALIZACIÓN: el robot de Google y algunos bots principales no ejecuten JavaScript en estos días. Entonces, usar la opción # 2 solo ya no es viable. Sin embargo, esto significa que usarlo junto con el n. ° 3 debería ser bastante confiable, ya que puede excluir fácilmente a la mayoría de los bots utilizando JS, luego, en el lado del servidor, excluya los bots principales como Googlebot que ejecutan JS.

Además, como se menciona en los comentarios, puede intentar usar la API de Google Analytics para mostrar las vistas de cada página.

Cabra descontento
fuente
1 y 2 no están relacionados con mi pregunta. Tal vez debería haber preguntado "¿Cómo obtengo un contador de vistas como stackechange que ignora los bots?" así que mi falso :-) Sin embargo, muy buena lista en 3. Gracias, comprobaré esto.
eisberg
Lo sentimos, no me di cuenta de que estaba mostrando el recuento de visitas en la página. En ese caso, 2 y 3 son viables.
DisgruntledGoat
Gracias por el esfuerzo. Al menos para mí, javascript nunca es la respuesta, así que estoy atascado con 3, pero hay tantos indicadores :-(
eisberg
En realidad, algunos bots ejecutan JavaScript. Configuré una solicitud de Ajax para rastrear el tamaño de la vista en relación con el tamaño de la pantalla. Googlebot informa dos tamaños de pantalla diferentes.
toxalot
Sé que la pregunta es antigua y ya tiene una solución, pero ¿por qué no usar la API de Google Analitycs si es solo para mostrar un contador de vistas humanas? stackoverflow.com/questions/19484009/…
KeizerBridge
3

Si usa Javascript para contar las vistas, la mayoría de los bots no lo ejecutarán, por lo que no se incluirán en sus recuentos de vistas. Esta respuesta puede estar cerca de lo que desea /programming/1973448/how-can-i-count-a-page-views

Paulmorriss
fuente
No, no estoy usando Javascript. Es un sitio web normal de PHP + MySQL. Pero gracias por la respuesta de todos modos :-)
eisberg 05 de
No descarte esta respuesta tan rápido. Incluso con un sitio que usa PHP + MySQL, nada le impide emitir un poco de JavaScript para generar su contador de vistas. En lugar de generar el contador directamente, genere algo como '<script> document.write (<counter-code>) </script>' donde <counter-code> es lo que necesita para crear su contador.
Itai
@Itai Lo siento, pero no usaré javascript para contar a mis visitantes. Pero gracias de todas maneras.
eisberg
Si no desea usar JavaScript, simplemente póngalo en su pregunta claramente. Como dijo Itai, nada nos impide pensar en la solución de JavaScript para un sitio PHP.
Tien Do
En realidad, algunos bots ejecutan JavaScript. Configuré una solicitud de Ajax para rastrear el tamaño de la vista en relación con el tamaño de la pantalla. Googlebot informa dos tamaños de pantalla diferentes.
toxalot
3

Mi enfoque implica dos pases:

  1. Filtre solo los navegadores web y las consolas haciendo coincidir el inicio de la cadena del agente de usuario con Mozilla|Opera|PSP|Bunjalloo|wii. Gracias a la suplantación del agente de usuario, esta comprobación detectará casi todos los navegadores
  2. Excluir bots mediante cadenas de detención comunes bot|crawl|slurp|spider

Entonces, si se pasa el primer paso, asumimos que es un navegador y que hay un visitante real detrás de él. Como descubrí, algunos bots fingen ser Mozillacompatibles y comienzan su cadena de agente de usuario con él. Es por eso que el segundo pase puede ser útil y eliminarlos.

function isBrowser () {

    return preg_match( '/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i', $_SERVER['HTTP_USER_AGENT'] ) && !preg_match( '/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'] );
}
Anton Gudov
fuente
2

Solo uso la exclusión de análisis de agente de usuario simple. Se deshace del 99% de los bots que entran en mis páginas.

SELECT * FROM `live_visitors` where (
lower(agent) != '%bot%' and
lower(agent) != '%slurp%' and
lower(agent) != '%spider%' and
lower(agent) != '%crawl%' and
lower(agent) != '%archiver%' and
lower(agent) != '%facebook%')
jagarock
fuente
1
Esto no ayudaría (al menos en mi caso) porque casi todos los bot que puedo identificar por su comportamiento (navegación demasiado rápida, navegación cronológica de todos los enlaces, ...) utilizan un User-Agent válido. Pero buena idea para otros proyectos.
eisberg
2

Puede usar una imagen como contador, en este caso no contará los bots y el nombre de la página se pasa como una consulta con el nombre de la imagen

Estoy usando esto en img.php que actualiza la vista de página en la base de datos:

<?php
$xnt = $_GET["ID"]; if (isset($xnt) && is_numeric($xnt)) {
$DBServer = "localhost"; $DBUser = "xxx"; $DBPass = "xxx"; $DBaze = "xxx";
$conn = mysqli_connect($DBServer, $DBUser, $DBPass, $DBaze); 
mysqli_query($conn, "UPDATE stats SET stats_vz=stats_vz+1 WHERE stats_id=".$xnt);
mysqli_close($conn);}
$im = @imagecreatetruecolor(1, 1); imagesavealpha($im, true); imagealphablending($im, false); $white = imagecolorallocatealpha($im, 255, 255, 255, 127); imagefill($im, 0, 0, $white);
header("Content-type: image/png"); imagepng($im); imagedestroy($im);
Ashraf
fuente