Pregunta

Noto que StackOverflow tiene un recuento de vistas para cada pregunta y que estos números de vistas son bastante bajos y precisos.

Tengo algo similar en uno de mis sitios.Básicamente, registra un "visto" cada vez que la página se carga en el código backend.Desafortunadamente, también hace lo mismo con las visitas a los motores de búsqueda que dan números inflados e inexactos.

Supongo que una forma de no contar un robot sería contar las vistas con una llamada AJAX una vez que la página se haya cargado, pero estoy seguro de que hay otras formas mejores de ignorar los motores de búsqueda en sus contadores de visitas y al mismo tiempo dejarles entrar. rastrear su sitio.¿Conoce alguna?

¿Fue útil?

Solución

Una llamada AJAX bastará, pero normalmente los motores de búsqueda no cargarán imágenes, archivos javascript o 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 en la que desea registrar una solicitud. como parámetro en la solicitud de archivo.

Por ejemplo, en la página...

http://www.ejemplo.com/ejemplo.html

Podrías incluir en la sección principal.

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

Y haga que su servidor registre la solicitud y luego devuelva un archivo CSS vacío.El mismo enfoque se aplicaría a JavaScript o a un archivo de imagen, aunque en todos los casos querrás observar detenidamente qué almacenamiento en caché podría tener lugar.

Otra opción sería eliminar los buscadores en función de su agente de usuario.Hay una gran lista de posibles agentes de usuario en http://user-agents.org/ para empezar.Por supuesto, podrías ir al revés y contar solo las solicitudes de cosas que sabes que son navegadores web (cubriendo IE, Firefox, Safari, Opera y este novedoso Chrome te llevaría al 99% del camino).

Aún más fácil sería utilizar una herramienta de análisis de registros como estadísticas o un servicio como Google analitico, los cuales ya han resuelto este problema.

Otros consejos

Para resolver este problema, implementé un filtro simple que miraría el encabezado User-Agent en la solicitud HTTP y lo compararía con una lista de 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".

Realmente no necesitas usar AJAX, solo usa JavaScript para agregar un iFrame fuera de la pantalla.MANTENLO SIMPLE

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

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 se puede conectar a una plantilla de encabezado o pie de página sin necesidad de sustituir el nombre de la página en el lado del servidor.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 creen solicitudes de páginas que exploten vulnerabilidades basadas en cosas raras en las URL.Lo bueno de este vs.un habitual <img> etiqueta o <iframe> es que el usuario no verá una x roja si hay un problema con el script del contador de visitas.En algunos casos, también es importante conocer la URL que vio el navegador, antes de reescribirla, etc.eso sucede en el lado del servidor, y esto te lo da.Si lo desea en ambos sentidos, agregue otro parámetro del lado del servidor que también inserte esa versión del nombre de la página en la cadena de consulta.

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"

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

Las aplicaciones de contador de visitas (y estadísticas web) de terceros a menudo filtran los motores de búsqueda y los muestran en una ventana/pestaña/sección separada.

Tendrás que hacer lo que dijiste en tu pregunta con AJAX.O excluya las cadenas de User-Agent que sean motores de búsqueda conocidos.La única forma segura de detener los bots es con AJAX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top