Frage

Mir ist aufgefallen, dass StackOverflow für jede Frage eine Anzahl von Aufrufen hat und dass diese Aufrufzahlen ziemlich niedrig und genau sind.

Ich habe etwas Ähnliches auf einer meiner Seiten.Grundsätzlich wird jedes Mal ein „Treffer“ protokolliert, wenn die Seite im Backend-Code geladen wird.Leider passiert dies auch bei Suchmaschinentreffern, die aufgeblähte und ungenaue Zahlen liefern.

Ich schätze, eine Möglichkeit, einen Roboter nicht zu zählen, wäre, die Aufrufzählung mit einem AJAX-Aufruf durchzuführen, sobald die Seite geladen ist, aber ich bin mir sicher, dass es andere, bessere Möglichkeiten gibt, Suchmaschinen in Ihren Trefferzählern zu ignorieren und sie trotzdem hereinzulassen Crawlen Sie Ihre Website.Kennst du irgendwelche?

War es hilfreich?

Lösung

Ein AJAX-Aufruf erledigt dies, aber normalerweise laden Suchmaschinen keine Bilder, Javascript- oder CSS-Dateien, daher ist es möglicherweise einfacher, eine dieser Dateien in die Seite einzubinden und die URL der Seite zu übergeben, für die Sie eine Anfrage protokollieren möchten als Parameter in der Dateianforderung.

Zum Beispiel auf der Seite...

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

Sie könnten es in den Kopfbereich einfügen

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

Und lassen Sie Ihre Serverseite die Anfrage protokollieren und dann eine leere CSS-Datei zurückgeben.Der gleiche Ansatz würde für JavaScript oder eine Bilddatei gelten, allerdings sollten Sie in jedem Fall genau prüfen, welche Zwischenspeicherung stattfinden könnte.

Eine andere Möglichkeit wäre, die Suchmaschinen aufgrund ihrer zu eliminieren User-Agent.Es gibt eine große Liste möglicher Benutzeragenten unter http://user-agents.org/ um Ihnen den Einstieg zu erleichtern.Natürlich könnten Sie auch in die andere Richtung gehen und nur Anfragen von Dingen zählen, von denen Sie wissen, dass sie Webbrowser sind (die Abdeckung von IE, Firefox, Safari, Opera und diesem neuen Chrome-Ding würde Ihnen 99 % des Ziels bringen).

Noch einfacher wäre die Verwendung eines Protokollanalysetools wie awstats oder eine Dienstleistung wie Google Analytics, Beide haben dieses Problem bereits gelöst.

Andere Tipps

Um dieses Problem zu lösen, habe ich einen einfachen Filter implementiert, der den User-Agent-Header in der HTTP-Anfrage untersucht und ihn mit einer Liste bekannter Robots vergleicht.

Ich habe die Roboterliste von www.robotstxt.org.Es kann in einem einfachen Textformat heruntergeladen werden, das leicht analysiert werden kann, um automatisch die „Blacklist“ zu erstellen.

Sie müssen AJAX nicht wirklich verwenden. Verwenden Sie einfach JavaScript, um einen iFrame außerhalb des Bildschirms hinzuzufügen.HALTE ES EINFACH

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

Eine Erweiterung der Antwort von Matt Sheppard könnte etwa so aussehen:

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

die in eine Seitenkopf- oder Fußzeilenvorlage eingefügt werden kann, ohne dass der Seitenname serverseitig ersetzt werden muss.Beachten Sie, dass, wenn Sie die Abfragezeichenfolge (window.location.search) einschließen, eine robuste Version davon die Zeichenfolge kodieren sollte, um zu verhindern, dass Übeltäter Seitenanfragen erstellen, die Schwachstellen basierend auf seltsamen Dingen in URLs ausnutzen.Das Schöne daran vs.ein Stammkunde <img> Tag oder <iframe> ist, dass der Benutzer kein rotes x sieht, wenn ein Problem mit dem Hitcounter-Skript vorliegt.In manchen Fällen ist es auch wichtig, die URL zu kennen, die der Browser vor Umschreibungen usw. gesehen hat.Das passiert serverseitig, und das gibt Ihnen das.Wenn Sie beides wünschen, fügen Sie serverseitig einen weiteren Parameter hinzu, der diese Version des Seitennamens ebenfalls in die Abfragezeichenfolge einfügt.

Ein Beispiel der Protokolldateien aus einem Test dieser Seite:

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"

Der Grund dafür, dass Stack Overflow genaue Aufrufzahlen hat, liegt darin, dass jeder Aufruf/Benutzer nur einmal gezählt wird.

Drittanbieter-Anwendungen zum Zählen von Zugriffen (und Webstatistiken) filtern häufig Suchmaschinen heraus und zeigen sie in einem separaten Fenster/Tab/Abschnitt an.

Entweder müssen Sie das, was Sie in Ihrer Frage gesagt haben, mit AJAX tun.Oder schließen Sie User-Agent-Strings aus, die Suchmaschinen bekannt sind.Der einzig sichere Weg, Bots zu stoppen, ist AJAX.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top