Google Analytics cookie en meerdere domeinen

googlecookie.jpgVeel mensen die met Google Analytics werken zullen hier wel eens tegenaan gelopen zijn: je hebt meerdere domeinen binnen je website die je niet goed in Google Analytics krijgt. Dat kan een kassa zijn die bij een andere partij gehost wordt, of gewoon voor elke dienst van je bedrijf een andere site. Het probleem is wanneer bezoekers overstappen naar het andere domein ze daar gezien worden als bezoek vanuit het eerste domein, en de originele bron (Adwords, Banners, enz) daarmee verloren gaat. Vooral met externe kassasystemen is dit echt een probleem omdat zo niet meer achterhaald kan worden via welke bron de bezoeker binnengekomen was.

Google Analytics heeft hier een oplossing voor: links en formulieren die naar andere domeinen verwijzen kunnen voorzien worden van een stukje code (__utmLinker, __utmLinkPost, pageTracker._link, pageTracker._linkByPost). Deze code zorgt er voor dat alle bestaande data vanuit de cookie van de bezoeker overgeheveld wordt naar het andere domein. Hierdoor blijft de oorspronkelijke bron bewaard en kan inzichtelijk gemaakt worden welke bronnen goed renderen.

Maar er is 1 nadeel: elke link en elk formulier moet voorzien worden van deze code.

Ik heb een situatie gezien waarin een bedrijf 24 websites had, en alle onderlinge links moesten van deze code voorzien worden. Handmatig dus bijna niet te doen, en om dat op te lossen heb ik een script gemaakt wat dit geheel automatisch doet. Je geeft de zogenaamde 'interne' domeinen op, en alle onderlinge links en formulieren worden voorzien van de juiste code.

Het tracking script

Om alles goed te laten werken moet het tracking script ook aangepast worden. 2 extra regels moeten er voor zorgen dat de data in goede banen wordt geleid:

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-XXXXX-1");
pageTracker._setDomainName("none");
pageTracker._setAllowLinker(true);

pageTracker._initData();
pageTracker._trackPageview();
</script>

En voor de oude situatie:

<script src="http://www.google-analytics.com/urchin.js"
type="text/javascript"></script>
<script type="text/javascript">
_uacct = "UA-XXXXX-1";
_udn = "none";
_ulink = 1;

urchinTracker();
</script>

Het multi domein script

Vervolgens moet het Google Analytics Multidomain script helemaal onderaan de broncode geplaatst worden (vlak voor de </body>). Wel zijn er nog 2 kleine aanpassingen in het script nodig, helemaal bovenaan moeten de volgende instellingen gedaan worden:

var externalDomain = ".domein1.nl website2.nl kassa.nl";
Plaats daar alle domeinen in waarnaar de verwijzende links en formulieren aangepast moeten worden.

var new_ga_script = true;
Gebruik je het nieuwe ga.js script, dan true, en in het geval van de oude urchin.js zet je de waarde op false.

Handig? Gebruik je het? Laat het even weten 😉

Click to activate social bookmarks

 
  • Website promotie

    Wellicht zijn dergelijk zaken handig op te lossen door de tracker in een apart bestand te plaatsen en deze vervolgens te laten includen. Tegenwoordig is index.php (of andere taal) het hoofdbestand, waarin onderliggende pagina's geinclude worden. Als je een beetje handig bent, hoef je hem maar 1x in de je index te zetten.

  • Ik ga hier zeker eens naar kijken! lijkt me erg handig (zeker voor de wat kolossaler en minder vriendelijk opgebouwde websites).
    Ik zal laten weten wat mijn bevindingen verder zijn!

  • amitai

    This is a great script... If I want to add the pageTracker._linkByPost onsubmit event to my form when I click my "add to cart button" should I just add this code? where do I add the call to the script?

    great job and thank you very much!

  • Mooie oplossing. Ik ben toevallig net met dit probleem bezig. Het gaat om een bestaande implementatie met cross domainlinks waarbij nog geen rekening is gehouden met Google Analytics.
    Dit script maakt invoering en onderhoud van multidomain tracking overzichterlijker lijkt me. Ik ga het uittesten. Bedankt.

  • Lee

    Hi, We have a ecommerce site that passes the user to another domain (for a shared SSL Key) for the checkout process. Will this script work to keep all the analytical data (ie original referrer, search engine keywords etc) for the ecommerce tracking element of Google Analytics. If so, what do I need to do to implement it - ie we are going from one domain http://www.childrenspartyshop.co.uk to our hosts SSL domain https://www.pay-here.co.uk.
    I'm sorry as I don't speak Dutch, as your site might explain this - sorry for my ignorance.. Many Thanks, Lee.

  • @Lee: yes, this script wil do exactly what you wants. To implement it you have to add the 2 blue lines above in your Google Analytics tracking code. Then put the script in the bottom of your page (close before the </body>). Add the domains to the externalDomain variable and choose whether you use the old or new GA tracking script.

    If you need more help: email me at andre dot scholten at gmail dot com 😉

  • Dit is net wat ik zocht.

    Ik ben net bezig om analytics op te zetten voor een bedrijf met 12 sites (maar met ongeveer 30 verschillende templates waar dit script in moet). Als er een nieuw domein bijkomt moet de code : --- var externalDomain = ".domein1.nl website2.nl kassa.nl"; --- in alle 30 templates aangepast worden.

    Ik zal dit script op een apart domain plaatsen en het vandaar door alle 12 sites laten aanroepen (include). Dit zal me veel werk kunnen besparen omdat ik het script slechts 1 keer zal moeten aanpassen als er een domein bijkomt.

    Ik ben benieuwd naar het resultaat

  • beste andré,
    ik probeer die cross-domain cookie overdracht op te zetten, maar er komt geen goed resultaat van. Heb je ergens een link tussen 2 verschillende domeinen waar je dit opgezet hebt? Ik zou met httpwatch graag eens zien welke parameters er precies doorgestuurd moeten worden na "http://www.google-analytics.com/__utm.gif?...."

  • De waardes tussen 2 domeinen worden middels een link of formulier doorgegeven, niet zozeer in de aanroep naar de utm.gif. Een voorbeeld staat hier. Klik op een aanbieding en je wordt doorgestuurd naar een ander domein, in de url zie je keurig de Google Analytics waardes die meegegeven worden.

  • bedankt, ik ben al heel wat verder geraakt.

  • hallo André,

    Ik ben zelf aan de slag gegaan met bovenstaande codes. Ik krijg echter een foutmelding op de regel: document.write("\\" );

    De regel in mijn eigen Analytics code is anders namelijk:
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

    Zou het hier aan kunnen liggen? En zou het nog werken?

  • Je moet je eigen regel gebruiken, de versie die ik in het bericht had staan was nog een oude 😉

  • Website promotie

    Ik had ook een fout. In sommige stukken code stond .page() en in andere .pageData(). Dus kreeg je de melding dat .page() geen functie was (voor de . stond nog meer)

    Andre, waarom die vreemde regel eigenlijk (waar het bij Eelco fout ging). Ik heb het niet getest, maar kun je niet bijv. altijd de SSL variant gebruiken.

    Dus zoiets:

    <script type="text/javascript" src="https://ssl.google-analytics.com/ga.js"></script>

  • Dankjewel. Ik had al een vermoeden maar ik kan het zelf niet direct testen dus vandaar even de vraag 🙂

  • @Website promotie: dat kan ook prima, al kan een SSL verbinding wel eens trager zijn dan een normale onbeveiligde verbinding.

  • @André: werkt dit ook voor links in flash? Gaat het javascript pas over de link heen als de linkklik uitgevoerd wordt?

  • sorry ik vergat mezelf emails van nieuwe reacties te laten sturen. Nu ingesteld.

  • Dit werkt niet voor links in Flash, het script kan deze niet in de broncode van de pagina zien staan. Voor Flash zul je dus een andere oplossing moeten verzinnen.

  • Hallo André,

    Ik heb bovenstaande codes op de website van een klant geplaatst om in Analytics te achterhalen welke pagina's bezocht worden voordat men de boekingsmodule (met een andere URL) ingaat. Wanneer ik in Analytics op omgekeerd doelpad kijk dan zie ik nog steeds geen pagina's buiten de module. Ik krijg een javascript foutmelding op de homepage (www.rent-a-tent.nl). Op de volgende regel en om precies te zijn op de eerste van de twee quotes.

    pageTracker._setDomainName(”none”);

    Misschien wil je er een blik op werpen en heb je een idee wat er fout gaat? De boekingsmodule is overigens http://zoekenboek.rent-a-tent.nl/

    Groeten Eelco

  • HAllo André,

    Ik kwam er achter dat het maximaal aantal stappen in het omgekeerd doelpad 4 is. Dit verklaart volgens mij dus waarom ik sowieso niets buiten de boekingsmodule meet. De voltooiing van de boeking zit namelijk pas op stap 5. Ik zet nu een 'Doel' op stap 1 van de module om in ieder geval te meten waar mensen vandaan komen.

    Op andere punten in Analytics kan ik nu zien dat er in ieder geval metingen buiten de module om zijn geweest.
    De foutmelding op de homepage snap ik echter nog niet. Misschien heb je daar nog wel een idee over?

    Groeten Eelco

  • interessant artikel. had iemand ondertussen al een oplossing gevonden hoe dit te doen in het geval van flash navigatie? ben ik erg benieuwd na...

  • Floris

    Dankje ik lees ook de iets soortgelijks. Maar begrijp het net niet helemaal.

    Het gaat hier om meerdere domeinen in 1 analytics profiel neem ik aan?

    dus dan moet de property number op alles verschillende domeinen hetzelfde zijn. dus in dit geval XXXXX-1

    en dus op alle verschillende domeinen hetzelfde:

    var pageTracker = _gat._getTracker("UA-XXXXX-1");
    pageTracker._setDomainName("none");
    pageTracker._setAllowLinker(true);
    pageTracker._initData();
    pageTracker._trackPageview();

    en dan daarna gaan filteren in duplicate domains..

    mijn dank ik groot.

  • Klopt helemaal 🙂

  • Floris

    @andre dankje! (moest even dubbel check hebben)

    Is wel omslachtig eerst alles op een hoop en dan alles weer uit elkaar filteren.
    Alleen doen als domeinen echt door elkaar lopen lijkt me.

    ik ben eruit 🙂

  • Joeri

    Hallo André,

    Werkt dit ook voor een betere koppeling tussen een traffic generator en de website waar het uiteindelijk om draait?

    M.a.w. is het mogelijk om in te zien via welke bron de bezoekers op de traffic generator zijn gekomen, voordat ze op de bedoelde website uit zijn gekomen? Het gaat hier dus om de koppeling tussen 2 websites i.p.v. domeinen van 1 website. Momenteel wordt de traffic generator als 'totale' bron gezien.

    Groet,

    Joeri

  • @Joeri: daar werkt het perfect voor aangezien je de bron van de trafficgenerator meegeeft aan de hoofdsite.

  • Ik heb een andere situatie:

    Mensen komen via AdWords op mijn site. Ze klikken daar op een bestellink en gaan naar de paymentprovider (een andere website). Daar betalen ze via Ideal. na goedkeuring stuurt de paymentprovider de bezoeker terug naar mijn website, naar de zogenaamde "bedankt voor uw bestelling pagina". Deze laatste pagina heb ik ingesteld als doel binnen GA.

    Mijn vraag is nu hoe ik ervoor kan zorgen dat die doelen ook als via Adwords (en via welk zoekwoord) worden geregistreerd ipv de paymentprovider als refferer.

    Wat is de meest eenvoudige oplossing?

    (Ik heb de mogelijk om op elke pagina bij de paymentprovider een stukje eigen code te zetten maar zou ook graag willen weten wat de oplossing is wanneer die niet mogelijk zou zijn).

    Groeten,

    Karel

  • Je kunt de website van de payment provider uitsluiten met dit commando in de GA meetcode:
    pageTracker._addIgnoredRef("www.paymentprovider.nl");
    Dan zal een bezoeker als "direct" bezoek behandeld worden, en eventuele bestaande campagnes in de cookies zullen niet overschreven worden maar blijven bestaan.
    Als dit niet werkt heb ik nog meer oplossingen, maar eerst deze eens proberen 😉

  • Maar dan zal ik dus in mijn statistieken zien dat er in plaats als refferer de paymentprovider staat nu direct bezoek wordt geteld? Dat is natuurlijk niet de bedoeling.

    Ga het toch eens proberen...

    Wat is de oplossing als je de mogelijkheid hebt om een code op de website van de paymentprovider te plaatsen?

  • @Karel,

    Nee, direct bezoek overschrijft de vorige referral in de GA cookie niet. Dus in de situatie die je schetst zal de refer gewoon op Google CPC blijven staan. Indien er geen refer beschikbaar is (Bijv. iemand heeft z'n cookies gewist, of opent de link via een andere browser) dan zal het bezoek idd als direct in GA worden gemeten.

  • Danny W

    Andre, ik ga een koppeling maken naar een externe payment provider. Daar kan ik een code plaatsen, maar moet ik daar een nieuwe code laten plaatsen of dezelfde code als op het hoofddomein?

    Thanx en groeten,

    Danny

  • @Danny: dat ligt helemaal aan de situatie. Het meest ideale is dat beide trackingcodes de regels setAllowLinker(true) en setDomainName("none") bevatten. Vervolgens kun je met de _link functie de koppeling tussen beide domeinen regelen. En dan moet inderdaad de code bij de payment provider exact hetzelfde zijn.

  • Danny W

    Andre, dank je wel!

  • Eelco

    Dag André,

    Ik vroeg me af hoe het script er met de nieuwe Analytics code uit komt te zien? Kun je dan de regels pageTracker._setDomainName("none"); pageTracker._setAllowLinker(true); ook nog gewoon toevoegen?

    Groeten Eelco

  • Eelco

    Zou het dan dit worden?

    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXXX-1']);
    _gaq.push(['_setDomainName', 'none']);
    _gaq.push(['_setAllowLinker', true]);
    _gaq.push(['_trackPageview']);

    (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();

  • @Eelco: ja, helemaal goed 🙂

  • Hoi Andre,

    Ik heb ook een vraag over het koppelen van twee verschillende domeinen (A en B). Als ik de referers van de behaalde doelen van B opvraag, dan zie ik naast de referers van A, ook nog steeds A zelf staan. Je zou toch verwachten dat deze er nu wordt uitgefilterd?

    Kan het liggen aan dat beide domeinen een andere versie van de Google Analytics code (Ga en de nieuwe versie) gebruiken? Werkt het dan nog? Met andere woorden moeten beide domeinen dezelfde versie van analytics hebben?

    Of is het iets anders? Ik ben benieuwd naar je reactie

    Groet,

    Richard

  • Ik ga dit nu proberen.
    Ik vraag me af ok ik in mijn google account die meerdere domeinen moet toevoegen?

    Groet,

    Finovion

    • Nee dat hoeft niet 😉

  • Moet er echt een punt staan bij het eerste domein?

    var externalDomain = ".domein1.nl website2.nl kassa.nl";

    • Ligt er aan hoe je het wil matchen, daar kun je dus zelf voor kiezen.

  • Hoe van je duplicate content af en hou je de referer in stand?
    Een 301 redirect veranderd ook de referer van de site die je aan het tracken bent.