Also, wen nervt Referrer Spam nicht? Ständig neue Domains in Google-Analytics (und auch anderen Analyse-Tools, wie z.B. eTracker, piwik, usw.) die angeblich Traffic auf die Website liefern. Bei großen, trafficstarken Websites mögen die hunderte bis tausende gefakten „Visitors“ im Monat das Bild nicht allzu sehr verfälschen, bei kleineren Websites ergibt sich hierzu aber leider oft eine derartige Schieflage, die kaum noch einen richtigen Blick auf die tatsächlichen Daten ermöglicht.
Wie kann man aber nun verhindern, dass dieser Referrer-Spam in den Analytics-Reports auftaucht?
Nun, hierzu muss man erst einmal verstehen, wie dieser Referrer-Spam überhaupt generiert wird. Dies geschieht nämlich auf zweierlei Art,
- durch tatsächliche „Bot“-Besuche und
- durch reines Aufrufen/Ausführen des Tracking-Codes
Referrer Spam durch tatsächliche Bot-Besuche
Hierzu muss man wissen, dass der „Referrer“ eine Information ist, die der Browser selbst gespeichert hat, und dann nur noch von der Analytics-Software ausgelesen wird. D.h. der Seitenaufruf muss gar nicht unbedingt von dieser URL her erfolgen, und natürlich kann man so etwas dann eben auch fälschen. Und genau das machen diese Bots. Hierbei handelt es sich nämlich schlicht um Programme, die so programmiert sind, dass sie Webseiten im Web aufrufen, und den entsprechenden Analytics-Code ausführen und den gewünschten „Referrer“ hinterlassen. Das ist natürlich nur sehr vereinfacht beschrieben, aber das hier soll ja auch keine Anleitung werden, wie man Referrer-Spam produziert ;).
Wie kann man aber nun diesem Treiben Einhalt gebieten?
Also die einfachste Methode ist hier, allen „Besuchern“, die einen Referrer von einer bekannten Spam-Domain melden, schlichtweg den Zugriff auf die Website zu versagen.
Dies kann man zum einen, bei apache-Servern (und noch laufen die allermeisten Webserver mit apache), in der .htaccess-Datei tun (wie das genau geht, siehe unten). Für Websites, die auf Servern liegen, auf die man keinen Zugriff auf die zentralen Konfigurationsdateien des apache-Servers hat, ist dies leider auch die einzige Möglichkeit.
Hat man jedoch die Möglichkeit die apache-Konfigurationsdateien zu bearbeiten, so ist diese Methode zu empfehlen. Was man in diesem Fall machen kann und wie man hier auch recht einfach automatisieren kann, neu bekannt werdende Domains hinzuzufügen ist weiter unten genau beschrieben. Für nginx-betriebene Webserver gilt vom Prinzip her genau dasselbe, da aber nginx das Konstrukt der .htaccess-Datei nicht kennt, geht es hier tatsächlich nur über die zentralen Konfigurationsdateien des nginx-Servers. Hier geht’s zur nginx-Anleitung.
Referrer Spam durch reines Aufrufen/Ausführen des Tracking-Codes
Hier funktionieren diese Programme derart, dass sie die Tracking-IDs einfach erraten und, ohne jeden Besuch der eigentlichen Website, die entsprechenden Tracking-Informationen direkt an die Server der Tracking-Software senden. Hiergegen hilft die obige Methode natürlich nicht, da ja hier die eigene Website überhaupt nicht aufgerufen wird. Gegen diese Art des Referrer-Spams kann man dann nur direkt im Analytics Tool vorgehen, in dem man diesen Spam-„Traffic“ herausfiltert. Google Analytics hat hierzu inzwischen sogar eine eigene Option integriert, allerdings nimmt Google neue Referrer-Spam Domains und Bots nur sehr, sehr zurückhaltend in seine Blacklist auf, so dass leider nach wie vor ein großer Anteil von Referrer-Spam „durchgeht“.
Wie filtert man nun diesen Referrer-Spam aus?
Zuerst einmal kann man sich hier zunutze machen, dass diese „Bots“ die eigentliche Domain gar nicht kennen und dementsprechend der Analytics-Software auch nicht mitteilen können, welche URL sie denn gerade behaupten aufgerufen zu haben. Also erstellt man zuerst einmal einen Filter, der verhindert, dass „Seitenaufrufe“, bei denen nicht die eigene Domain in der aufgerufen URL steht, registriert werden. Zur Anleitung
Leider filtert das aber auch noch nicht alle aus, so dass man nicht umhin kommt, auch noch Filter zu erstellen, die den ganzen „Traffic“ von Referrer-Spam-Domains ebenfalls herausfiltert. Da – zumindest bei Google-Analytics – die Zeichenlänge einer Filterdirektive auf 256 Zeichen begrenzt ist, es aber inzwischen sehr viele bekannte Spam-Domains gibt bedeutet dies, dass man hier inzwischen ca. 25 Filter anlegen (und pflegen) muss. Um dies etwas zu erleichtern gibt es hier jeweils einen aktuellen Satz von Filterregeln, sowie eine Liste von Filterregeln, die nur die pro Tag neu hinzugekommenen enthalten.
Anleitung .htaccess
Um den Referrer Spam in der .htaccess-Datei auszusperren trägst Du den Inhalt dieser Datei: htaccess.txt folgendermaßen in Deine .htaccess-Datei ein:
- Lade per FTP-Programm Deine .htaccess-Datei auf Deinen lokalen PC – solltest Du keine .htaccess-Datei in Deinem FTP-Programm sehen, so musst Du ggf. „verborgene Dateien anzeigen“ aktivieren – hast Du keine .htaccess-Datei (sehr unwahrscheinlich) dann lade die obige Datei per FTP-Programm ins Hauptverzeichnis auf Deinem Server und benenne die Datei anschließend in .htaccess (mit führendem Punkt und ohne Erweiterung!) um.
- Erstelle eine Sicherungskopie der gerade heruntergeladenen .htaccess-Datei
- Finde in Deiner .htaccess-Datei die Zeile
RewriteEngine On
und kopiere aus der htaccess.txt alle Zeilen genau darunter
Solltest Du keine Zeile RewriteEngine On in Deiner .htaccess finden (wiederum sehr unwahrscheinlich), so füge die Zeile
RewriteEngine On
als allererstes ganz oben in Deine .htaccess-Datei ein und kopiere den gesamten Inhalt der Datei htaccess.txt darunter.
- Lade die neue, veränderte .htaccess-Datei wieder zurück auf Deinen Server
- Teste ausgiebig, ob alles weiterhin so funktioniert wie gewünscht – Falls nicht, kannst Du jederzeit die gesicherte Kopie wieder zurück auf den Server hochladen.
Wenn Du nun die Regeln updaten willst, so lade einfach eine neue Kopie von htaccess.txt herunter und ersetze den Bereich zwischen
RewriteEngine On
und
RewriteRule .* - [F].
Anleitung automatischer Update der zentralen apache-Konfigurationsdateien
Voraussetzungen:
- Du hast root-Zugang zu Deinem Server
- Du hast git auf Deinem Server installiert.
- Du weißt wie Du einen cron-Job für root einrichtest
Vorgehen:
- Logge Dich per ssh (z.B. mit PuTTY) auf Deinem Server ein und verschaffe Dir – falls notwendig – mittels
sudo
root-Rechte.
- Wechsel in das Verzeichnis /root/ – oder ein anderes Verzeichnis, das nicht in Verzeichnisbaum eines Webauftritts liegt, und führe folgende Befehle aus:
git clone https://github.com/piwik/referrer-spam-blacklist git clone https://github.com/mher30/referrer-spam
- rufe im Verzeichnis referrer-spam den Befehl
./cron.sh
einmalig aus
- kopiere nun nur noch die apache-spamblock.conf in das Konfigurationsverzeichnis des apache-Webservers (meist /etc/apache2) und
- binde die apache-spamblock.conf in Deine Virtual-Server-Konfigurationen ein (Beispiel-Code):
<VirtualHost *:80> ServerName www.beispiel-domain.de ServerAlias beispiel-domain.de ServerAdmin admin@beispiel-domain.de Include apache-spamblock.conf ... </VirtualHost>
- um das Ganze zu automatisieren lege einen Cron-Job an (z.B. im Verzeichnis /etc/cron.daily), der dann
- in das obige referrer-spam Verzeichnis wechselt
- dort dann die Datei cron.sh aufruft
- anschließend die neue apache-spamblock.conf in das apache-Konfigurationsverzeichnis kopiert
- Überprüft ob die apache-Konfiguration immer noch korrekt ist – es kann ja durchaus mal passieren, dass sich irgendwo ein Fehler einschleicht 😉
- und im Erfolgsfalle die neue Konfiguration läd.
Wenn Du nicht weißt, wie Du diese Schritte programmierst, dann bitte jemanden, der sich mit shell-Script-Programmierung auskennt, dies für Dich einzurichten. Hier gibt es so viele unsäglich verschiedene Installations- und Konfigurationsvarianten, dass man dies nicht generisch programmieren kann. – OK, zumindest ich nicht 😉
- Anschließend: Testen, testen, testen!!
- Fertig
Anleitung nginx Konfiguration
Lege die nginx-Konfigurationsdatei in das globale nginx-Konfigurationsverzeichnis (wahrscheinlich /etc/nginx/global) und binde sie in die Serverkonfiguration ein:
... server { listen 443; server_name dein-server-name-hier.de; include /etc/nginx/global/*; ...
Anleitung Google-Analytics Filter
Grundsätzlich gilt bei Google-Analytics: Filter schließen den Traffic schon vor der Erfassung aus, d.h. einmal ausgefilterter Traffic ist für Analytics für immer verloren. Deshalb gilt: Für Filter immer eine neue Datenansicht verwenden und die Standard-Datenansicht („Alle Websitedaten“) immer ohne Filter belassen!
So erstellst Du eine neue Datenansicht:
Wähle im Google Analytics Hauptmenü die Option „Verwalten“:
Anschließend wähle in der rechten Spalte „DATENANSICHT“ die Option: „Neue Datenansicht erstellen“ aus:
Als nächstes musst Du nun der neuen Datenansicht einen Namen geben. Hier gibst Du entsprechend unserer geplanten Filterung: „Referrer Spam Filtered“ ein (die Vorauswahl, dass Du eine Website filtern willst lässt Du bestehen) und wählst noch die richtige Zeitzone (hier im Beispiel: „Deutschland“) aus:
Als nächstes nimmst Du noch eine Änderung an den „Einstellungen der Datenansicht“ vor:
und zwar aktivierst Du, dass Google selbst schon Treffer von bekannten Bots und Spidern herausfiltert.
Wie bereits oben erwähnt, ist ist Google bisher leider recht zurückhaltend damit neue Bots und Spider in seine „Blacklist“ aufzunehmen, so dass Du nicht drumherum kommst und selbst auch noch ein paar Filter definieren musst, also wähle „Filter“ aus:
und erstelle auch gleich Deinen ersten Filter:
Als erstes filterst Du all diese „Ghost-Visits“ heraus, bei denen der Bot nicht meldet, dass er Deine Domain besucht – was er ja auch meist gar nicht kann, da der Bot ja einfach nur „blind“ Deinen „Tracking-Code“ aufruft, ohne auch nur zu wissen, auf welcher Domain er eingebunden ist. Also nennst Du den Filter am besten auch dementsprechend: „Ghost Visits Filter“ – wählst „Benutzerdefiniert“ aus und stellst folgendes ein:
Einschließen: Du willst nur solche Treffer tracken, bei denen der vom Browser gemeldete „Hostname“ Deine Domain enthält:
(der \ vor dem . sollte nicht fehlen, da Google diesen Eintrag als Regulären Ausdruck interpretiert und der Punkt . bei regulären Ausdrücken für jedes beliebige Zeichen steht – also Punkte . hier immer als \. schreiben – dies bedeutet dann für Google: ein Punkt und nichts als ein Punkt sollte hier stehen!)
Wenn Deine Seite in den letzten 7 Tagen von Ghost-Visits geplagt wurde, kannst Du jetzt schon sehen, ob Dein Filter in der Zukunft auch greifen wird, in dem Du „Filter überprüfen“ anklickst:
Und dann erhältst Du ein Ergebnis ähnlich wie dieses (nur wahrscheinlich mit mehr Zeilen):
Wenn Du auch auf Deinem Server die Bots mittels der oben beschriebenen Konfigurationsdateien ausgesperrt hast, solltest Du hiermit bereits rund 95% aller Referrer-Spam Treffer eleminiert haben. Die einzigen, die jetzt noch durchkommen, sind die Bots, die die beiden Methoden kombinieren, indem sie zwar Ghost-Visits produzieren, aber trotzdem den richtigen Hostnamen mitschicken. Derer kannst Du nur dadurch Herr werden, in dem Du sie auch noch bei Google Analytics explizit herausfilterst. Stand heute benötigst Du hierzu 25 weitere Filterregeln. Eine Datei mit den aktuellen Filterregeln kannst Du ebenfalls hier downloaden.
Für jede Zeile in dieser Datei musst Du einen Filter anlegen:
Diesmal willst Du aber Treffer ausschließen, und zwar alle bei denen die „Kampagnenquelle“ eine der im Filter genannten Domains entspricht:
Dies musst Du nun für alle Zeilen in der Datei filters.txt wiederholen… leider gibt es hierfür keinen Shortcut, und wenn Du mehrere Domains hast, musst Du dies leider für alle wiederholen, eine Export/Import Funktion für Filter existiert leider nicht. 🙁
Jetzt brauchst Du nur noch regelmäßig auf https://www.mher.de/referrer-spam nachschauen, ob es neue Spambot-Domains gibt, und falls ja, Deine Konfigurationsdateien entsprechend updaten…
und…
Viel Erfolg!