Adventtipp 2 – Wie und ab wann werde ich als Bot klassifiziert?

sitecore-advent2

Etwas, was unsere Kunden an Sitecore am meisten schätzen, sind die mächtigen Marketingtools die Sitecore von Haus aus mitliefert. Diesen Tools liegt die Experience Database zugrunde, kurz xDB, welche wichtige Attribute (Number of visits, Visit duration, Last interaction und viele weitere) eines Webseitenbesuches festhält. Eine hohe Datenqualität in der xDB ist zwingend, was aber sehr schwierig zu erreichen ist, wenn Webcrawler, Entwickler und Tester dauernd auf die Webapplikation zugreifen und somit falsche Statistiken in der Datenbank erzeugen. Aber Sitecore wäre nicht Sitecore, wenn dagegen nicht schon ein Rezept entwickelt wurde, das relevante und nicht relevante Besucher identifiziert.

Bot oder Nicht-Bot?

Wie sieht dieses Rezept aus?
Natürlich können wir gezielt Besucher von der Erfassung in der xDB ausschliessen, mit einer manuell geführten Liste. Die weitaus spannendere Variante ist aber die automatische Erkennung von Bots mittels einer Pipeline, JavaScript und ein bisschen C#. Aber keine Angst, diese Variante ist schnell konfiguriert, ja eigentlich schon implementiert.

Manuelles Filtern via Config

In der Datei

App_Config/Include/Sitecore.Analytics.ExcludeRobots.config

werden UserAgents und IP-Adressen erfasst, welche gefiltert werden müssen und nie in die xDB aufgenommen werden:
Es sind standardmässig schon etwa 500 UserAgents definiert. Da sich diese Liste dauernd ändert, kann man regelmässig http://iplists.com auf Updates prüfen und die Konfigurationsdatei dementsprechend anpassen. Diese Liste zu unterhalten ist sehr aufwändig. Wenn man noch Entwickler- und Tester IP-Adressen aufnehmen will, wird die Wartung dieser Datei praktisch unmöglich. Arbeitet ein Team aber mit verschiedenen Umgebungen (Development, Testing, Staging, Prod, …) ist die Pflege dieser Datei hingegen nicht wichtig.

Robot Detection Compontent

Ständig eine Datei pflegen? Ein Skript dafür schreiben? Nein! Die Robot-Detection Komponente nimmt uns diese Arbeit ab. Besucht ein User die Webseite, wird die

VisitorIdentification.js

geladen, welche auf die OnMouseMove und OnTouchStart Events hört. Ein Bot bewegt in der Regel keine Maus und berührt keine Bildschirme. Werden Maus- oder Fingergesten ausgeführt, haben wir es deshalb wahrscheinlich mit einem Menschen zu tun. Wir müssen aber noch einen Schritt weitergehen: Nachdem ein Event getriggert wurde, wird eine

VisitorIdentificationCSS.aspx

Seite angefordert. Im Gegensatz zu einem Menschen wird der Bot diese Datei typischerweise nicht herunterladen. Wird sie das doch, so wird Code ausgeführt der den User als Menschen klassifiziert.

Klassifizierungen
Nach erfolgreicher Identifizierung wird dem User eine Nummer zugeteilt, die deren Status beschreibt.


  0    Mensch
900+   Bot
925    Default Bot
930    Bösartiger Bot

Timeout
30 Sekunden nach den Tests wird ein weiterer Request an den Server gestellt. Da Bots diese 30 Sekunden in der Regel nicht abwarten und den Request direkt ausführen, kann man einen Bot auch auf diese Weise noch identifizieren. Zu diesem Zeitpunkt ist die Klassifizierung aber schon durchgeführt, deshalb muss gegebenenfalls ein schon als 0 klassifizierter User neu klassifiziert werden. Das Timeout von 30 Sekunden kann auch verkürzt werden:

App_Config/Include/Sitecore.Analytics.Tracking.config


Die 1 steht für die Anzahl Minuten, die das Timeout dauert.

Cookies
Im

SC_ANALYTICS_GLOBAL_COOKIE

wird nach Durchführung der Prüfung das IsClassificationGuessed Flag auf true gesetzt. Ab jetzt muss die Klassifizierung nicht mehr durchgeführt werden.

Robot Detection Component aktivieren
Die Robot Detection ist standardmässig aktiviert, in jedem Layout musst du aber noch
einbinden. In einem MVC Projekt wäre es ein anderer String:

Bot-Detection ausschalten
In der selben Datei wo man das Timeout bearbeitet, kann man die Bot-Erkennung auch grundsätzlich ausschalten:

App_Config/Include/Sitecore.Analytics.Tracking.config


Nicht vergessen, das eingebundene Skript aus dem Layout herauszulöschen!

Zusammenfassung

Die manuelle und automatische Erkennung von Bots erlauben uns eine viel genauere Analyse des Webseitenverkehrs. Die Pflege der manuell geführten Exclude-Datei ist dabei ziemlich mühsam. Trotzdem kann sie sinnvoll sein, die schon eingetragenen Bots müssen nicht mehr aufwändig geprüft werden. Netterweise sind da schon ein paar hundert UserAgents vorhanden.
Die automatische Erkennung von Bots muss nur noch im Layout integriert werden, und schon läuft die Maschine. Ein Feature, das sich auf jeden Fall lohnt!

5 Gedanken zu “Adventtipp 2 – Wie und ab wann werde ich als Bot klassifiziert?

  1. @Sebastian: danke für diesen Beitrag – mir war bisher nicht bekannt, dass es die Möglichkeit gibt Bots von regulären Usern hinsichtlich dem Sitecore Experience Analytics überhaupt zu unterscheiden.

    Eine Rückfrage jedoch: ist die von Dir beschriebene automatische Erkennung mittels JavaScript (keine Mausbewegung, keine Touch-Events) bereits standardmässig in Sitecore integriert um die Bots entsprechend zu erkennen und zu kategorisieren? Oder ist das eine Erweiterungen von uns? :)

    • Das ist eine Lösung von Sitecore, keine Erweiterung von uns. Standardmässig ist es also drin. Es kann aber sein, dass es nicht in allen Projekten korrekt integriert ist (siehe oben, Punkt „Aktivierung“), das ist jedoch schnell geprüft 😉

  2. Danke für den interessanten Überblick! Konkret habe ich auch gleich eine Frage dazu 😉 Ich habe festgestellt, dass in unserer Umgebung recht viele Visitors als Robot klassifiziert werden, meist mit Code 925. Normal fällt das wahrscheinlich nicht wirklich auf.
    Ich habe mir aber mal die Mühe gemacht, für einen beliebigen Tag den Analytics-Cookie im IIS-Log zu tracken und zu extrahieren. Danach habe ich für alle Werte überprüft, ob es dazu Interactions in der MongoDB gibt. Ca. 30-50 Prozent scheinen nicht getrackt zu werden. Nun stelle ich mir die Frage, ob das normal ist oder ein Bug, der nur nicht wirklich auffällt. Habt ihr bei Namics Erfahrungen diesbezüglich?

  3. Die Differenz zwischen IIS Log und MongoDB wird es genau durch diese Bot Detection immer geben. Die (sehr gute!) Frage ist nur, von was für eine grosse Differenz wir von „normal“ sprechen können.

    Leider fehlen uns hierbei noch die Erfahrungswerte, da wir noch keine solche Erhebung gemacht haben (bzw. statistisch ausgewertet haben zwischen IIS und MongoDB Interactions). Nehme ich mir aber gerade auf meine Task-Liste auf!

    Nichts desto trotz gibt es im Internet sehr viele Bots, die unsere Webseiten tagtäglich crawlen und scannen. Umso grösser die Webseiten, umso mehr Cralwer zieht man im Normalfall auch an. 30%-50% scheint mir verhältnismässig hoch zu sein. 20%-30% sagt mein Bauchgefühl, dass es jedoch schon sehr schnell mal sein kann. In Kundensituationen hatten wir auch schon mal, dass einfache Komponenten wie LoadBalancers und Healthcheck Systeme (also interne Systeme) ebenfalls einen grossen Anteil an Requests auf die Webserver ausführen, welche ggf. die Differenz erklären könnten.

    Eine Detailauswertung auf UserAgents ist sehr zeitintensiv, vielleicht erkennt man da jedoch direkt eine Häufigkeit von auffälligen Agents. In meinen Tests hat aber die Detection bis jetzt sehr gut funktioniert. Er meinte mich zumindest immer als Mensch erkannt zu haben :-)

  4. Danke für die Rückmeldung! Ich habe bezüglich des GAPs gerade ein Ticket an den Sitecore-Support geöffnet. Wir haben eine Partnerseite, welche alleine im November ca. 10000 Requests an uns weitergeleitet hat. Im IIS-Log kann ich das auch ohne weiteres nachvollziehen, in der MongoDB sehe ich nur ca. 50% als Interactions. Da stellte sich für mich nicht mehr die Frage, ob die Detection etwas „zu streng“ aggiert 😉

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>