Domanda

Ho notato che StackOverflow ha un conteggio delle visualizzazioni per ogni domanda e che questi numeri di visualizzazioni sono piuttosto bassi e accurati.

Ho una cosa simile su uno dei miei siti.Fondamentalmente registra un "hit" ogni volta che la pagina viene caricata nel codice backend.Sfortunatamente lo fa anche per i risultati dei motori di ricerca che forniscono numeri gonfiati e imprecisi.

Immagino che un modo per non contare un robot sarebbe quello di contare le visualizzazioni con una chiamata AJAX una volta caricata la pagina, ma sono sicuro che ci sono altri modi migliori per ignorare i motori di ricerca nei contatori delle visite pur consentendo loro di entrare scansiona il tuo sito.Conosci qualche?

È stato utile?

Soluzione

Una chiamata AJAX lo farà, ma solitamente i motori di ricerca non caricano immagini, file Javascript o CSS, quindi potrebbe essere più semplice includere uno di questi file nella pagina e passare l'URL della pagina su cui desideri registrare una richiesta come parametro nella richiesta di file.

Ad esempio, nella pagina...

http://www.esempio.com/esempio.html

Potresti includere nella sezione head

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

E chiedi al tuo lato server di registrare la richiesta, quindi restituire un file CSS vuoto.Lo stesso approccio si applicherebbe a JavaScript o al file immagine, anche se in tutti i casi ti consigliamo di esaminare attentamente quale potrebbe essere la memorizzazione nella cache.

Un'altra opzione sarebbe quella di eliminare i motori di ricerca basati sul loro agente utente.C'è un lungo elenco di possibili agenti utente su http://user-agents.org/ per iniziare.Naturalmente, potresti andare dall'altra parte e contare solo le richieste provenienti da cose che sai essere browser web (coprendo IE, Firefox, Safari, Opera e questa nuova cosa di Chrome ti porterebbe al 99% del percorso).

Ancora più semplice sarebbe utilizzare uno strumento di analisi dei log come awstats o un servizio come Statistiche di Google, entrambi hanno già risolto questo problema.

Altri suggerimenti

Per risolvere questo problema ho implementato un semplice filtro che esaminasse l'intestazione User-Agent nella richiesta HTTP e la confrontasse con un elenco di robot conosciuti.

Ho preso l'elenco dei robot da www.robotstxt.org.È scaricabile in un semplice formato di testo che può essere facilmente analizzato per generare automaticamente la "lista nera".

Non hai davvero bisogno di usare AJAX, basta usare JavaScript per aggiungere un iFrame fuori dallo schermo.MANTENERE LA SEMPLICE

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

Un'estensione alla risposta di Matt Sheppard potrebbe essere qualcosa di simile alla seguente:

  <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>

che può essere inserito in un modello di intestazione o piè di pagina senza dover sostituire il nome della pagina sul lato server.Tieni presente che se includi la stringa di query (window.location.search), una versione robusta di questa dovrebbe codificare la stringa per impedire ai malfattori di creare richieste di pagine che sfruttano le vulnerabilità basate su cose strane negli URL.La cosa bella di questo vs.un normale <img> tag o <iframe> è che l'utente non vedrà una x rossa se c'è un problema con lo script hitcounter.In alcuni casi, è anche importante conoscere l'URL visualizzato dal browser prima della riscrittura, ecc.ciò accade sul lato server e questo te lo dà.Se lo desideri in entrambi i modi, aggiungi un altro parametro lato server che inserisca anche quella versione del nome della pagina nella stringa di query.

Un esempio dei file di registro da un test di questa pagina:

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"

Il motivo per cui Stack Overflow dispone di conteggi di visualizzazioni accurati è che conta ciascuna visualizzazione/utente una sola volta.

Le applicazioni di contatore di visite (e statistiche web) di terze parti spesso filtrano i motori di ricerca e li visualizzano in una finestra/scheda/sezione separata.

Dovrai fare quello che hai detto nella tua domanda con AJAX.Oppure escludere le stringhe User-Agent che sono motori di ricerca noti.L'unico modo sicuro per fermare i bot è con AJAX.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top