2008-09-05 10 views
7

Noté que StackOverflow tiene un conteo de visitas para cada pregunta y que estos números de vista son bastante bajos y precisos.¿Contando el número de visitas de una página ignorando los motores de búsqueda?

Tengo algo similar en uno de mis sitios. Básicamente, registra un "hit" cada vez que la página se carga en el código de back-end. Lamentablemente, también hace esto para los resultados de los motores de búsqueda que proporcionan números inflados y poco precisos.

Supongo que una forma de no contar un robot sería hacer la vista contando con una llamada AJAX una vez que la página se cargó, pero estoy seguro de que hay otras formas mejores de ignorar los motores de búsqueda en tus contadores de visitas mientras aún dejándolos entrar para rastrear su sitio. ¿Conoce alguna?

Respuesta

4

Una llamada AJAX lo hará, pero generalmente los motores de búsqueda no cargarán imágenes, javascript o archivos CSS, por lo que puede ser más fácil incluir uno de esos archivos en la página y pasar la URL de la página que desea registrar una solicitud como un parámetro en la solicitud del archivo.

Por ejemplo, en la página ...

http://www.example.com/example.html

que te pueden incluir en la sección de cabecera

<link href="empty.css?log=example.html" rel="stylesheet" type="text/css" /> 

Y tienen su lado servidor de registro de la solicitud, a continuación, devolver un css vacío archivo. El mismo enfoque se aplicaría a JavaScript o al archivo de imagen, aunque en todos los casos querrá observar cuidadosamente qué almacenamiento en caché podría llevarse a cabo.

Otra opción sería eliminar los motores de búsqueda en función de su user agent. Hay una gran lista de posibles agentes de usuario en http://user-agents.org/ para comenzar. Por supuesto, puedes ir por el otro lado, y solo contar las solicitudes de cosas que sabes que son navegadores web (que cubren IE, Firefox, Safari, Opera y esta nueva cosa de Chrome te daría el 99% del camino).

Aún más fácil sería utilizar una herramienta de análisis de registros como awstats o un servicio como Google analytics, que ya han resuelto este problema.

+0

Hemos cambiado nuestro método de la subasta a un puesto ajax - aunque los usuarios sin javascript no afectarán de una pregunta cantidad de vistas, nos webs ¡tampoco quiero tener una lista negra de bot! –

+2

Los motores de búsqueda acceden a los archivos css: http://www.free-seo-news.com/newsletter246.htm ... también cuando revisa algunos sitios en la caché de google, están diseñados, esto confirma que escanean y guardan archivos css. – davidhq

+1

Estoy bastante seguro de que los motores de búsqueda ejecutan Javascript ahora – Nate

0

La razón por la que Stack Overflow tiene recuentos de vistas precisos es que solo cuenta una vez cada vista/usuario.

La aplicación de contador de visitas de terceros (y la estadística web) a menudo filtra los motores de búsqueda y los muestra en una ventana/pestaña/sección separada.

0

Va a tener que hacer lo que dijo en su pregunta con AJAX. O excluya cadenas de User-Agent conocidas como motores de búsqueda. La única forma segura de detener bots es con AJAX.

1

Realmente no necesita usar AJAX, simplemente use JavaScript para agregar un iFrame fuera de la pantalla. Debe ser sencillo

<script type="javascript"> 
document.write('<iframe src="myLogScript.php" style="visibility:hidden" width="1" height="1" frameborder="0">'); 
</script> 
2

Para resolver este problema he implementado un filtro sencillo que se vería en la cabecera User-Agent en la petición HTTP y compararlo con una lista de los robots conocidos.

Obtuve la lista de robots de www.robotstxt.org. Se puede descargar en un formato de texto simple que se puede analizar fácilmente para generar automáticamente la "lista negra".

1

Una extensión de la respuesta de Matt Sheppard podría ser algo como lo siguiente:

<script type="text/javascript"> 
    var thePg=window.location.pathname; 
    var theSite=window.location.hostname; 
    var theImage=new Image; 
    theImage.src="/test/hitcounter.php?pg=" + thePg + "?site=" + theSite; 
    </script> 

que puede ser enchufado en un encabezado o pie de página de plantilla sin necesidad de sustituir el servidor del lado del nombre de la página. Tenga en cuenta que si incluye la cadena de consulta (window.location.search), una versión robusta de esto debería codificar la cadena para evitar que los malhechores elaboren solicitudes de página que aprovechen vulnerabilidades basadas en cosas raras en las URL. Lo bueno de esto frente a una etiqueta normal <img> o es que el usuario no verá una x roja si hay un problema con la secuencia de comandos hitcounter. En algunos casos, también es importante saber la URL que fue vista por el navegador, antes de las reescrituras, etc. que ocurren en el servidor, y esto le da eso. Si lo desea de ambas formas, agregue otro parámetro del lado del servidor que inserte esa versión del nombre de la página en la cadena de consulta también.

Un ejemplo de los archivos de registro de una prueba de esta página:

10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/testpage.html HTTP/1.1" 200 306 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16" 
10.1.1.17 - - [13/Sep/2008:22:21:00 -0400] "GET /test/hitcounter.php?pg=/test/testpage.html?site=www.home.***.com HTTP/1.1" 301 - "http://www.home.***.com/test/testpage.html" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16" 
Cuestiones relacionadas