Single post

Wie funktioniert das click tracking bei Google Search?

Google Search lernt nicht nur etwas über seine Benutzer_innen, indem es die Suchbegriffe einer Suchanfrage in Kombination mit der IP-Adresse, der Lokalisation des Herkunftsnetzwerks, der HTTP-Header (Browser, Betriebssystem, Sprachen etc.), der Suchhistorie auswertet – von den Verknüpfungen mit weiteren Inhalten durch ID-Cookies oder den zeitgleichen Login in andere Google Services ganz abgesehen. Eine weitere, qualitativ noch einmal hervorzuhebende Art und Weise, Benutzerdaten zu sammeln, liegt darin, dass Google Search registriert, welche der angezeigten Suchresultate der User tatsächlich anklickt. Damit wird direkt ein Userfeedback erfasst, welches auf die Relevanz der Suchresultate schließen lässt: Welche der angezeigten Resultate sucht die Nutzer_in sich aus, in welcher Reihenfolge besucht sie welche der angezeigten Seiten, wie viel Zeit vergeht dazwischen etc. Und diese Informationen wiederum gehen in die Gewichtung der Suchresultate bei zukünftigen Suchanfragen ein – eines der interaktiven Prinzipien zur Generierung von Filter Bubbles und Realitätsblasen.

Wie trackt Google Search die Klicks auf die Suchresultate? – Fährt man mit der Maus über ein Suchresultat, z.B. das zu block011.de bei einer Suchanfrage nach „block011“, dann sieht man in der Statuszeile „www.block011.de“. Das suggeriert, dass der Link wirklich (direkt) dorthin führt. Schaut man aber in den Quelltext, dann sieht der Link so aus:

<a href="http://www.block011.de/" 
    onmousedown="return rwt(this,'','','','1','AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw',
    '','0CCgQFjAA','','',event)">block011</a>

Tatsächlich führt der Link also direkt zu http://www.block011.de/ (href-Parameter). Aber der Link wird vom Browser erst ausgeführt, wenn man beim Anklicken den Mausbutton wieder loslässt, und davor, schon beim Herunterdrücken, wird das JavaScript-Event onmousedown ausgelöst. Und das führt dazu, dass die Funktion rwt aufgerufen wird. Was macht die? rwt, das steht wenig verhohlen für „rewrite“, und diese Funktion ist so gemacht, dass sie ganz schnell den href-Parameter des Links – also die Ziel-URL – ersetzt durch:

http://www.google.de/url?sa=t&rct=j&q=&
    esrc=s&source=web&cd=1&ved=0CCgQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&ei=wp91VaC6E8mxsAGPl7nwCw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&bvm=bv.95039771,d.bGg

Zwischen dem Drücken des Mausbuttons und dem Loslassen wird also das Ziel des Links ausgetauscht. Man ruft deshalb tatsächlich eine Google-URL auf, von der aus dann wiederum mit einem HTTP response code 302 redirect-Mechanismus auf das eigentliche Ziel weiterleitet wird. (Dieser 302-redirect ist eine Standard-Prozedur, keine besondere dark magic unterwegs hier. Diese  liegt vielmehr darin, wie das URL-Tracking durch den Trick mit dem JavaScript onmousedown dem User verschleiert wird.) – Probier es aus, indem du diese google.de/url?...-URL nimmst und in den Browser kopierst. Nach einem millisekundenkurzen Besuch bei Google, von dem du gar nichts merkst, landest du dann auf block011.de

Wie kann man rausfinden, dass diese rewrite des href-Parameters des Links zwischen dem Drücken und dem Loslassen des Mausbuttons stattfindet? – Entweder man liest sich durch den gezielt kryptisch gehaltenen JavaScript-Code der rwt-Funktion. Oder: Man drückt den Maus-Button auf dem Link des Google-Suchresultats, hält ihn gedrückt, zieht dabei die Maus von dem Link wieder weg und lässt den Button dann wieder los – so als hätte man es sich anders überlegt und wollte dem Link doch nicht folgen. Der Browser bleibt dann tatsächlich auf der Resultateseite der Google-Suche, hat aber den href-Rewrite schon ausgeführt, weil die rwt-Funktion ja beim Runterdrücken des Mausbuttons ausgelöst wird. Das kann man erkennen, indem man die Maus auf den Link bewegt und schaut, welches Linkziel jetzt in der Statuszeile des Browsers erscheint. Oder indem man mit der rechten Maustaste das Linkziel kopieren und woanders einfügt – so habe ich es oben in diesen Beitrag eingefügt.

Was hat Google von diesem click-Tracking?

Man sieht, dass in dem http://www.google.de/url...-Aufruf allerhand Information an Google übermittelt werden: Mit jedem ? und jedem &amp; in der URL fängt eine neue Variable an, die mit dem Aufruf an Google übergeben wird. Auseinandergebrochen sieht das so aus:

http://www.google.de/url?
    sa=t&
    rct=j&
    q=&
    esrc=s&
    source=web&
    cd=1&
    ved=0CCgQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=wp91VaC6E8mxsAGPl7nwCw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&
    bvm=bv.95039771,d.bGg

Tja, wir wissen nicht, was sa, rct, q, estc, source, cd, ved, ei, usg, bvm im Detail heißen, aber klar ist: die Variable url speichert das Ziel des Links, zu dem wir eigentlich wollen. Dorthin wird dann weitergeleitet. Und die Bandwurmparameter wie z.B. ei=wp91VaC6E8mxsAGPl7nwCw sind Codes, die Google bereits beim generieren der Suchresultate dort hineingeschrieben hat. Sie dienen dazu, die Suchsession eindeutig zu indentifizieren, damit Google weiß, welche der vielen Millionen in jeder Sekunde gleichzeitig eintreffenden Suchanfragen und google.de/url-Aufrufe zueinander gehören.

Wenn ich jetzt z.B. in der gleichen Google-Suche den Suchbegriff nochmal verfeinere, z.B. indem ich in die Suchbox neben dem da schon stehenden „block011“ auch noch „hallo“ schreibe, Enter drücke, dann das Hallo wieder entferne, so dass nur noch „block011“ da steht, wieder Enter drücke, und dann mit dem gleichen Klick-Wegzieh-Trick schaue, wie die URL für das Suchresultat blok0806.de jetzt aussieht, dann kommt das dabei raus:

http://www.google.de/url?
    sa=t&
    rct=j&
    q=&
    esrc=s&
    source=web&
    cd=1&
    ved=0CCgQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=hqN1VaaFEsWZsgHe5aOQAw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw

Ich  habe fett markiert, was sich geändert hat. Das heißt: Ein Teil der Information bleibt gleich, der Parameter ei allerdings hat sich geändert. Mit ihm lässt sich meine konkrete Google-Suchsession eindeutig identifizieren. Jede einzelne Suchanfrage wird in dieser Weise mit einer eindeutigen Kennung verstehen – also nicht nur ich als User, sondern jede einzelne meiner Suchanfragen separat voneinander, so dass sich genau erschließen lässt, welches Suchresultat ich auf welche Suchanfrage hin angeklickt habe, nach welchen Begriffen ich vorher gesucht habe, und nach welchen ich danach suche.

Wenn man nun gleichzeitig auch noch in einem anderen Browserfenster bei Google eingeloggt ist (z.B. in gmail, oder im „Play Store“ mit seinem Android Mobiltelefon, in Google Drive oder irgendeinem anderen Google-Produkt), dann enthält die URL der Suchanfragen noch einen weiteren Parameter:

https://www.google.de/url?
    sa=t&
    rct=j&
    q=&
    esrc=s&
    source=web&
    cd=1&
    ved=0CCQQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=p691VdOGOsqpsgHq8oLwAw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&
    sig2=LGxxxxxxxxxxxxxh-sxxxx

Dieser Wert sig2 bleibt bei allen Suchanfragen gleich, es sei denn, man logged sich aus seinem Account aus oder mit einem anderen ein. Auch wenn ich gmail etc. in einem anderen Fenster nicht mehr offen habe, mich aber vergessen habe, auszuloggen, bleibt dieser Parameter erhalten. Die Variable sig2 ordnen die Klicks auf Suchresultate eindeutig dem eingeloggten Benutzeraccount zu – auf diese Weise hat Google nicht nur die E-Mails eines Nutzers (bei Verwendung von gmail), sondern auch die gesamte Such- und Klick-Historie im Zusammenhang mit Suchresultaten, die sich – wenn man sie über Monate und Jahre sammelt – sehr leicht zu einem umfangreichen Persönlichkeitsprofil inklusive der Einschätzbarkeit tagesaktueller Ereignisse zusammensetzen lassen (an dem Tag, wo ich besonders oft nach einer bestimmten Krankheit im Netz suche, sehe ich deswegen neben meinen E-Mails bevorzugt Werbung für medizinische Services etc.).

Es gibt Leute, die haben sich durch reverse engineering und educated guesses ausführlichere Gedanken dazu gemacht, was es mit den einzelnen Variablen in der URL, die ich hier nicht alle besprechen kann, auf sich hat. Siehe z.B.:

Dort ist zu erfahren, dass der Parameter usg lediglich ein Hash des Parameters url ist (also wahrscheinlich keiner Tracking-Funktion dient, sondern der Fehler-/Missbrauchskorrektur bei Aufruf von google.de/url). Und die Parameter cd und ved encodieren in komplexer Weise Informationen über den aktuellen Suchvorgang, die für Google Analytics interessant sind: Z.B. wo innerhalb der Suchresultate der angeklickte Link positioniert war. Viel genauer als die Information, dass ein Suchresultat angeklickt wurde, erfassen diese beiden Variablen, wo dieses Resultat positioniert war, als ich es angeklickt habe. Damit lassen sich detaillierte Benutzungsprofile gewinnen, die für die Marketingpsychologie der Mensch-Maschine-Interaktion interessant sind. Jede einzelne Nutzer_in ist damit ein Testkaninchen für das Website-Design; man braucht keine Probandengruppen mehr, sondern die Produkte werden im realen Einsatz ständig getestet und optimiert, jeder Nutzer trägt unfreiwillig dazu bei.

Hilft es, Java Script im Browser auszuschalten?

Nein. Wenn der bei der Google-Suche verwendete Browser Java Script deaktiviert hat, dann lässt sich zwar der trickreiche rewrite-Mechanismus mit dem onmousedown-Event nicht mehr verwenden, getrackt wird aber trotzdem. Google stellt beim Aufruf von google.de fest, ob der Browser Java Script unterstützt, und wenn nicht, dann werden die href-Parameter der Suchresultate direkt in der Form google.de/url? erzeugt. Sie sehen dann etwa so aus:

http://www.google.de/url?url=http://www.block011.de/
    &rct=j&q=&esrc=s&sa=U
    &ei=g7N1Vbf_O4SzswGr4YPACw&ved=0CBYQFjAA
    &usg=AFQjCNH1KGHX31Y8GUChkjL9ZwnsP96qtw

Es werden die selben Variablen mitgeschickt, nur das Escaping der URL weicht technisch bedingt ein wenig ab. Man kauft sich mit dem Abschalten von Java Script in dem Fall lediglich eigene Nachteile ein, weil man die URL eines Suchresultats nicht mehr so leicht z.B. in eine E-Mail oder in ein anderes Dokument copy-pasten kann und weil der Browser kein Domain pre-caching (vorauseilendes Auflösen der Domain-Namen gegen IPs) vornehmen kann, so dass die Zugriffe auf links langsamer werden.

Google trackt nicht nur die Klicks auf Suchresultate

Google interessiert sich nicht nur dafür, welche Suchresultate angeklickt werden, sondern prinzipiell für jeden einzelnen Klick, der in den Weiten des Netzes auf irgend einer Internetseite jemals erfolgt. Dazu bietet Google die Google Analytics Tools für webdeveloper an, eine Art Pakt mit dem Teufel, durch den Webdeveloper detaillierte Analysen der Benutzerströme durch ihre Webseiten erhalten, Google aber ebenfalls. Dazu müssen Webdeveloper die Google Analytics JavaScript-Bibliotheken und Tracking-Bausteine in ihre Website einbinden, etwa im Head des HTML-Dokuments wird dann google-analytics.com/ga.js geladen. Auf
https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide
findet man beschrieben, wie man mittels Google Analytics dezidiert für einzelnen Links und Elemente auf seiner Seite die Klicks tracken kann: Bei einem einfachen HTML-Button sieht das dann so aus:

<button onclick="_gaq.push(['_trackEvent', 'button3', 'clicked'])"></button>

Hier wird getrackt, ob ein User tatsächlich den Play-Button für ein auf der Seite eingebundenes Video („Baby’s first birthday“) drückt:

<a href="#" onClick="_gaq.push(['_trackEvent', 'Videos', 'Play', 
    'Baby\'s First Birthday']);">Play</a>

Und so weiter.

Es fällt auf, dass für Google Analytics ebenfalls Javascript Events zum Einsatz kommen. Vielleicht lässt sich mit dem Abschalten von Java Script hier das Tracking verhindern.

Kann Google den Zurück-Button tracken?

Wenn es darum geht, herauszufinden, welches Suchresultat wirklich zufriedenstellend war, wäre es ja auch wichtig, zu wissen, ob ein User auf ein Resultat klickt, dort ein bisschen rumsurft, nicht findet, was er_sie sucht, und dann mit dem Zurück-Button wieder zu den Suchresultaten zurückkehrt, um ein neues Suchresultat anzuschauen. Das ist auch tatsächlich möglich. Dazu zwei Beobachtungen:

Ich rufe google.de auf, suche nach „block011“ und finde mit dem oben genannten Klick-Wegzieh-Trick die tatsächlich aufgerufene URL heraus. Die ist:

http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=nLl1VZKqK8amsgGcpaDgCw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&
    bvm=bv.95039771,d.bGg&

Ich klicke jetzt auf diesen Link, und lande auf block011.de. (Hier stelle ich am Rande fest, dass das „Self-Destructing Cookies“-Plugin von Firefox das Google-Cookie nicht löscht, obwohl ich google.de ja verlassen habe. Warum auch immer – das wird später untersucht.) Ich klicke jetzt den Zurück-Butten und lande wieder auf der Seite mit den Suchresultaten. Mit dem selben Trick fake ich nochmal das onmousedown-Event für das block011-Resultat, und die URL ist jetzt:


http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCEQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=nLl1VZKqK8amsgGcpaDgCw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&
    bvm=bv.95039771,d.bGg&
    cad=rja

Das heißt, wenn ich das zweite Mal das Suchresultat block011.de anklicke, kommt in der URL plötzlich ein neuer Parameter cad hinzu, alles andere bleibt gleich. Insbesondere bleibt auch die ei-Variable gleich, welche die Suchsession eindeutig identifiziert; das ist aber korrekt, weil ja die Daten der Seite nach Verwendung des Zurück-Buttons aus dem Firefox Cache reproduziert und nicht neu von Google geladen werden, so dass Google keine neue ei-Variable vergeben kann. Dennoch enthält die google.de Seite aber offenbar ein JavaScript, welches feststellt, dass ich im Begriff bin, das Suchresultat block011.de ein zweites Mal aufzurufen, weil ich zwischenzeitlich den Zurück-Button benutzt habe, und das wird Google über die cad-Variable mitgeteilt.

Variation des Experiments: Von vorne Beginnen, also google.de neu aufrufen und nochmal nach „block01″1 suchen. Die URL des block011-Suchresultats ist wieder:

http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&
    ved=0CCEQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=OLp1VeHuKIetsAH0nYDQBw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&
    bvm=bv.95039771,d.bGg

Jetzt aber mit der mittleren Maustaste dieses Resultat in einer neuen Tab öffnen. Die Seite mit den Suchresultaten bleibt dann offen. Mit dem Klick-Wegzieh-Trick auf der Resultate-Seite jetzt wieder das onmousedown-Event faken, und dann ergibt sich als URL für das Suchresultat:


http://www.google.de/url?sa=t&rct=j&q=&esrc=s&
    source=web&cd=1&ved=0CCEQFjAA&
    url=http%3A%2F%2Fwww.block011.de%2F&
    ei=OLp1VeHuKIetsAH0nYDQBw&
    usg=AFQjCNHSw8rC6-yeAp5xRbBRV4c5xd96cw&
    bvm=bv.95039771,d.bGg&
    cad=rja

Das heißt, auch wenn ich nicht mit dem Zurück-Button mich durch verschiedene Suchresultate arbeite, sondern dafür Tabs benutze, in denen ich parallel mehrere Suchresultate öffne, wird das registriert. Die Resultateseite von google.de ist so klever mit Java Scripts ausgestattet, dass alle diese Verhaltensweisen erfasst und in das Tracking einbezogen werden.

Es ist ein wenig spekulativ, ob die Variable cad nur den Zurück-Button bzw. das Tabbed-Browsing speichert. Die Kollegen auf http://razzed.com/2009/02/12/analysis-of-google-outbound-link-tracking/ nennen noch eine Reihe von weiteren Beobachtungen und Werten, die diese Variable annehmen kann (vermutlich speichert sie so etwas wie einen Referrer, durch den Google ganz allgemein tracken kann, woher man gerade gekommen ist, bevor man auf den Link geklickt hat).

Wie kann man das Click-Tracking umgehen? (Edit 2015-12-02)

Nach dem Herumprobieren mit verschiedenen Firefox-Plugins hat sich nur eine Methode zum Blockieren des Google Click-Tracking als zuverlässig erwiesen: Das Plugin uBlock Origin ist aktuell einer der empfehlenswertestens Adblocker und lohnt sich ohnehin zu installieren. Es kann so konfiguriert werden, dass es auch das Google Click-Tracking in den Suchresultaten von Google deaktiviert. Dazu müssen in den uBlock-Einstellungen unter „My Filters“ einfach die folgenden zwei Zeilen hinzugefügt werden:

! remove google.com/url? click tracking
google.*##script:contains(rwt)

Hier ein Screenshot (wobei da auch noch ein weiterer Filter zur Umgehung des Facebook „Log in / Sign up“-Popups eingetragen ist):

Technische Details: Mit dieser Zeile (die erste ist nur ein Kommentar) wird ein „inline script tag filter“ angelegt (das ist eine neue Funktion von uBlock Origin, siehe https://github.com/gorhill/uBlock/wiki/Inline-script-tag-filtering). Sie schneidet den Javascript-Aufruck der rwt-Funktion aus den Links heraus.

Das Firefox-Plugin „Remove Google Tracking 1.10.1“ hat bei mir nicht funktioniert. Das Plugin Google Search Link Fix verspricht eine ähnliche Funktionalität, konnte aber nur von manchen von uns erfolgreich getestet werden. Wenn man uBlock Origin sowieso benutzt, ist der Filter die einfachere und ressourcensparendere Lösung.

Comments are closed.

theme by teslathemes