Sep.
14
2012

Hack din Google Analytics cookie

Vidste du at man nemt kan hacke den cookie, som Google Analytics sætter? Og på den måde få fat i informationer om, hvor den besøgende kommer fra, som man så kan bruge til alt muligt i sin backend?

Hold fast, denne artikel blive en smule teknisk.

Sådan ser cookien ud

Som du nok ved, så er en cookie en simpel tekstfil placeret i browseren på din computer. Og der er ikke noget specielt mystisk i disse cookies, faktisk kan de fleste åbnes og læses i en ganske almindelig text editor.

Åbner man cookien for Google Analytics, så ser den f.eks. sådan her ud:

Cookie

Kig godt på indholdet af denne cookie. Det er rimeligt nemt at se at den består af et eller andet tal, efterfulgt af de klassiske traffic source værdier i Google Analytics adskilt med tegnet |.

Her har du en oversigt over samtlige af de traffic source parametre, der kan optræde i cookien:

utmcsr Source
utmcmd     Medium
utmctr Keyword
utmcct Content
utmccn Name
utmgclid Adwords Campaign ID

Så er det egentligt bare lidt string parsing på den cookie, og så har du fat i hvor Google Analytics ser at den besøgende er kommet fra.

Gi' mig noget kode

Her kommer et C# kodeeksempel på, hvordan den slags kan gøres.
Eller spring over, hvis du ikke er til den slags.

public static string GetGoogleCampaign()
{
// set some default values
string utmcSource = "";
string utmcMedium = "";
string utmcKeyword = "";
string utmcContent = "";
string utmcName = "";
string utmcGCLID = "";

string cookie = "";
string retval = "";

try
{
    // load the Google Analytics cookie
    cookie = Request.Cookies["__utmz"].Value;

    // remove the first part, the visitor identifier
    cookie = cookie.Substring(cookie.IndexOf("utm"));

    // split the cookie into each utmc value
    string[] cookievals = cookie.Split('|');
    foreach (string cookieval in cookievals)
    {
        string[] valset = cookieval.Split('=');
        if (valset.Length == 2)
        {
            // check which utmc value we've got
            switch (valset[0].ToLower())
            {
                case "utmcsr": utmcSource = valset[1]; break;
                case "utmcmd": utmcMedium = valset[1]; break;
                case "utmctr": utmcKeyword = valset[1]; break;
                case "utmcct": utmcContent = valset[1]; break;
                case "utmccn": utmcName = valset[1]; break;
                case "utmgclid": utmcGCLID = valset[1]; break;
            }
        }
    }

    // force Adwords if there's a GCLID in the cookie
    if (utmcGCLID != "")
    {
        utmcSource = "google";
        utmcMedium = "cpc";
    }

    // do some decoding, trimming etc.
    utmcKeyword = Server.UrlDecode(utmcKeyword);
    utmcKeyword = utmcKeyword.Replace("http://", "");
    utmcMedium = utmcMedium.Trim('(').TrimEnd(')');
    utmcSource = utmcSource.Trim('(').TrimEnd(')');
    utmcKeyword = utmcKeyword.Trim('(').TrimEnd(')');

    // construct the return value
    retval = utmcMedium + " | " + utmcSource;
    if (utmcKeyword.Length > 2) retval += " | " + utmcKeyword;
    return retval;
}
catch (Exception ex)
{  return "";  }
}

Disclaimer: Lad være med at grine alt for meget over koden, jeg er ikke nogen specielt hardcore programmør. Men i det mindste er den fyldt med kommentarer :-)

Og nej, jeg har den ikke i en PHP udgave eller som et WP / Magento plugin. Men så er det godt, der findes andre ninjaer derude.

Bliver Google ikke sur over hacks?

For det første, så er et "hack" ikke nødvendigvis en negativ ting. At "hacke" betyder såmænd bare, at bruge noget på en facon, der ikke oprindeligt var udtænkt. Og det er der egentligt ikke noget galt i.

Google har intet imod at man forsøger at læse cookien. De fraråder kun at man selv forsøger at rette i den, men det er kun fordi man så risikerer at ødelægge ens Google Analytics data.

Så hack du bare løs!

Og hvad skal man så bruge det til?

Jeg er glad for at du spørger!

Jeg plejer selv at hacke cookien på denne facon på en webshops ordrekvitterinsside, og gemme informationerne ned som et felt på selve ordren:

Ordre Source

Det har to fordele:

  1. Det er ekstra motiverende for shop-ejeren at kunne se, hvor hver individuelle ordre kommer fra.

    De fleste shop-ejere har ikke tid til at logge sig ind i Analytics hver eneste dag, og sidde og nørde. Men står de pludseligt og pakker en masse ordrer, som de kan se kommer fra en eller anden finsk blog, så kan de se, at der nok lige er noget de skal have kigget på.
     
  2. En professionel web analytikers fornemmeste opgave er, at forudse hvilke data forretningen har brug for i fremtiden. For ellers render man ind i, at når forretningen spørger: "Kan du levere oplysninger på x?", så bliver svaret "Sagtens. Tager mig en uge at udvikle, og så skal vi lige vente 6 måneder på at der bliver samlet data ind".

    Ikke godt for forretningen. Men svarer analytikeren derimod: "Det kan jeg sagtens, faktisk har vi samlet data ind på det i over et år".
    Ja, så er det du bliver betragtet som en Analytics ninja :-)

    Hvis en ordres kilde på denne facon står direkte nede i dit ERP system, så åbner det nemlig op for nogle fantastiske business intelligence muligheder, bl.a. for at lave avancerede analyser af customer lifetime value begrebet. Men det er en helt anden blog post.

Men man kan sagtens bruge disse informationer til alt muligt andet. For eksempel til at udløse rabatkoder eller kampagner, hvis den besøgende kommer et bestemt sted fra.

Håber du kan bruge dette lille "hack". Og hvis du finder andre ting at bruge det til, så læg mægtigt gerne en kommentar herunder med det.

Kunne du lide denne blog post?
 
Så giv mig mægtigt gerne en +1, så jeg ved at jeg skal skrive mere af denne slags. Eller læg en kommentar herunder, så jeg ved om det jeg skriver er godt / skidt.
10 kommentarer
 ...havde lige håbet på at du havde fundet løsningen på "not provided" :)
Mikael Rieck , den 14. september 2012 14:05:58
.
 @Mikael: Heh, hvis jeg havde det, så ville jeg sælge løsningen for mega mange millioner, og trække mig tilbage på en strand i Asien :-D
Søren Sprogø , den 14. september 2012 14:50:03
.
 Nørdet, men sejt ninja trick, det skal helt sikkert implementeres her... Og til andre som sidder på PHP løsninger blev jeg lige inspireret til at bikse en php version sammen af sørens kode. Hvis andre er interesseret findes den her:
http://codenerd.dk/_download/php/class.googleCookie.phps
Martin Nielsen , den 14. september 2012 14:53:08
.
 fedt med ny visdom.. :-D
Omar , den 24. september 2012 16:41:02
.
 Hej Søren

Tak for snakken i lørdags - jeg er blevet ret hooked på at rode videre med det her. Kombineret med noget Spindoctor, uCommerce og Umbraco tror jeg at man ville kunne lave noget fedt omkring personificeret indhold.
Anders Lund , den 15. oktober 2012 10:49:48
.
 Hej Søren. Pissefedt trick. Netop CLV begrebet er noget, jeg kommer til at arbejde meget med, når jeg får min webshop op at stå. Det er jo ikke nogen hemmelighed, at det generelt koster langt flere penge at skaffe en ny kunde end at fastholde vedkommende. Der er alt viden om den enkelte uundværligt.
Jeg har sendt et link til min webudvikler med et link til dette indlæg, så han kan have det i baghovedet, når det kommer så langt :)
Monsar , den 16. oktober 2012 22:17:25
.
 @Anders: I lige måde! Og tænk dig, hvis det ikke havde været for den pokkers [not provided] på organiske keywords, så kunne man VIRKELIGT begynde at målrette kampagnefelter rundt omkring på ens site :-D

F.eks. ved at tage keywordet, smide det igennem en fuzzy Lucene søgning, og bruge resultatet til at cycle imellem produkter i et onsite banner... Nøj, nu får jeg helt lyst til at kode lidt ;-)
Søren Sprogø , den 17. oktober 2012 10:30:25
.
 Det er jo virkelig sejt! Det havde jeg slet ikke tænkt på var muligt.

I øvrigt er koden da helt fin ;-) Ingen mobning der!

Tak for tippet, det vil jeg klart overveje at implementere i fremtidige løsninger.
Lars Holdgaard , den 18. januar 2013 10:44:17
.
 Denne artikel har så begrænset levetid.

I første halvår af 2013 vil Google rulle deres næste generation af Analytics ud, kaldet Universal Analytics. Det fungerer på en radikalt anderledes måde (bare rolig, kun under "motoren"), så dette trick vil ikke fungere længere.

Men mon ikke der kommer en ny metode. I så fald skal jeg nok få blogget om den!
Søren Sprogø , den 18. januar 2013 12:38:32
.
 Genialt trick, det med Fuzzy Lucene, Søren.

Og så er det vel bare at sætte et generisk felt op, hvis søgeordet er (not provided)
Michael Kjeldsen , den 25. januar 2013 13:48:58
.
Læg en kommentar
.
Navn
E-mail
Website
To plus syv?
Kommentar
Bemærk: Dit website link i kommentarer har NOFOLLOW. Det betyder det ikke har nogen SEO-mæssig værdi, så du kan lige så godt angive dit rigtige navn og et relevant link. Kommentarer, der bryder med dette, vil blive slettet øjeblikkeligt.
 
Det du indtaster som navn, e-mail og website vil desuden blive gemt i en cookie i din browser, så det er nemmere for dig næste gang du vil skrive en kommentar. Det er desværre ikke muligt at frabede sig dette.
 
Om mig
Jeg er en pragmatisk midtjyde med mere end 18 års erfaring i IT-branchen. For tiden ernærer jeg mig som Online Marketing ansvarlig hos uCommerce.dk.
Se hvad jeg kan gøre for dig
Eller se min referenceliste
 
Nyhedsbrev
Få besked per mail, når der er nye posts her på bloggen
 
Tilmeld nyhedsbrev
 
Få det hele som RSS feed     RSS feed
Få også kommentarer, sitemap
Kategorier
 
Søg
Jeg anbefaler
Rapporten over alle rapporter anno 2012, vinder af SEMaward 2012
 
Rapporten over alle rapporter anno 2012, vinder af SEMaward 2012
 
GA tricks: Skaffer mine kampagner nye eller gamle kunder? vinder af SEMaward 2011
 
Google Analytics rapporten over alle rapporter, vinder af SEMaward 2010
Afdeling 18 Søren Sprogø E-commerce Guru work Grønnegade 3, st. tv. 8600 Silkeborg Danmark work 26727404 56.165787 9.537120 Søren Sprogø Cookies