Google Analytics, P3P, iframes, Internet Explorer en cookies


20 April 2009 20:55 - André
Categorie: Webanalytics

ie7Wat hebben deze termen met elkaar gemeen? Dat de combinaties van de laatste 3 vaak problemen opleveren voor een Google Analytics meting. En de 2de term een onderdeel is van de oplossing.

Dit zijn de problemen:

  • Google Analytics cookies doorgeven aan een (i)frame
  • Cookies in (i)frames met inhoud van externe domeinen worden geblokkeerd in Internet Explorer

Google Analytics, frames en iframes

Om op een goede manier het bezoek binnen een frame te meten moeten er een aantal zaken in het Google Analytics meetscript geregeld worden. Het ligt aan de situatie welke oplossing er het beste toegepast kan worden. Hieronder de diverse situatie met de bijbehorende oplossing:

Pagina met (i)frame op hetzelfde hoofddomein

  • voorbeeld.nl/hoofdpagina.html
  • voorbeeld.nl/pagina-in-frame.html

Omdat zowel de hoofdpagina als de pagina die in het frame geladen wordt op hetzelfde domein staan zijn er geen problemen met de meting. Op beide pagina's wordt er gebruik gemaakt van dezelfde cookies en hoeft er dus niets te gebeuren.

Pagina met (i)frame op een subdomein van hetzelfde hoofddomein

  • voorbeeld.nl/hoofdpagina.html
  • sub.voorbeeld.nl/pagina-in-frame.html

Omdat technisch gezien de beide pagina's op een ander domein staan maken ze allebei standaard gebruik van hun eigen cookies. Wat er dan gebeurd is dat in het (i)frame de hoofdpagina.html als verwijzende bron in de cookies geplaatst wordt. Dit is niet een gewenste situatie omdat je dan je eigen site als externe verwijzende bron gerapporteerd ziet worden. Er zijn 2 oplossingen. De eerste is door op het subdomein ook gebruik te maken van de cookies op het hoofddomein. Dit kan gedaan worden door de volgende regel in de Google Analytics meetcode op te nemen op beide domeinen:

pageTracker._setDomainName(".voorbeeld.nl");

De cookies worden dan op 1 centrale plaats gebruikt. Helaas werkt dit niet voor 2 letter domeinen, daar moet de cookie op "www.xx.nl" gezet worden.

De tweede oplossing (die je dus ook bij 2 letter domeinen moet gebruiken) is door de cookies van het hoofddomein mee te geven aan het subdomein. Dit kan gedaan worden door het (i)frame met javascript in de pagina te plaatsen:

<script type="text/javascript">
document.write('<iframe src="' + pageTracker._getLinkerUrl("http://sub.voorbeeld.nl/pagina-in-frame.html") + '"></iframe>');
</script>
<noscript>
<iframe src="http://sub.voorbeeld.nl/pagina-in-frame.html"></iframe>
</noscript>

Let op: de Google Analytics functies (ga.js) moeten wel al ingeladen zijn voor dit script gebruikt word. De _getLinkerUrl functie zorgt er voor dat de Google Analytics cookies meegegeven worden aan de URL van het (i)frame.

Pagina met (i)frame op een ander (sub)domein dan het hoofddomein

  • voorbeeld.nl/hoofdpagina.html
  • example.com/pagina-in-frame.html

Deze situatie komt bijvoorbeeld vaak voor bij externe boekingssytemen. Op een of andere manier wil je de Google Analytics cookies toch meesturen om zo de uiteindelijke conversie aan de juiste bezoekersbron toe te kennen.

In principe kan voor deze situatie dezelfde oplossing gebruikt worden als in bovenstaande situatie: schrijf het (i)frame met javascript in de pagina.

Maar dan komt het echte probleem: Internet Explorer ziet pagina's van externe domeinen die geladen worden in een (i)frame als Third Party Content. Oftewel: cookies vanaf deze pagina's worden door de beveiligingsinstellingen geblokkeerd. En omdat de cookies geblokkeerd worden zal er ook geen Google Analytics meting plaatsvinden. Dit kun je dan weer oplossen met P3P.

p3

P3P en Internet Explorer

Wat is P3P dan precies? P3P staat voor "Platform for Privacy Preferences Project". Ik ga niet uitleggen wat het precies is, daar zijn anderen beter in en herhaling is ook zo saai. ;) Maar de korte samenvatting is: "je koppelt een privacy beleid aan je site met een door computers en mensen te begrijpen inhoud".

Wat is er dan zo mooi aan? Met het juiste P3P privacy beleid zal Internet Explorer de cookies van het externe domein in het (i)frame keurig accepteren en zal er dus een Google Analytics meting plaatsvinden. De voordelen zijn:

  • Wanneer je site ingeframed wordt door een externe site zal dit keurig gemeten worden
  • Dit geldt dus ook voor de Google Image Search die ineens wel meetbaar wordt
  • Je Google Analytics meting is weer een stapje vollediger en betrouwbaarder

Een duidelijke zaak dus dat je dit geïmplementeerd wil hebben. Wat moet er voor gebeuren, hieronder stap voor stap de acties:

Toevoeging in de <head>
In de <head> moet een element opgenomen worden dat verwijst naar de plek waar de P3P instellingen te vinden zijn. Dit ziet er als volgt uit:

<link rel="P3Pv1" href="/w3c/p3p.xml" />

De locatie die ik hanteer is tevens de standaard locatie waar dit bestand zou moeten staan.

Inhoud van het P3P XML bestand

<META xmlns="http://www.w3.org/2002/01/P3Pv1">
<POLICY-REFERENCES>
<POLICY-REF about="http://andrescholten.nl/w3c/privacy.xml#Privacy_Policy">
<INCLUDE>/*</INCLUDE>
<COOKIE-INCLUDE/>
</POLICY-REF>
</POLICY-REFERENCES>
</META>

Zoals je ziet staat hier weer een verwijzing in naar de plek waar de voor de computer te begrijpen privacy instellingen te vinden zijn. De inhoud van dat bestand kun je hier bekijken. Daarin staat het privacy beleid wat je voert beschreven, tevens een link naar de voor mensen te begrijpen privacy statement.

Toevoeging in de headers van je site
Bekijk eerst de HTTP headers van mijn site (handige tool om ook redirects te controleren). Zoals je kunt zien staat deze zin er in:

p3p: policyref="http://andrescholten.nl/w3c/p3p.xml", CP="NOI DSP COR CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"

In deze header staat ook een link naar het P3P XML bestand en tevens een verkorte notatie van het privacy beleid. In Wordpress kun je in je header.php op regel 1 op deze manier de header toevoegen:

<?php header("p3p: policyref="http://andrescholten.nl/w3c/p3p.xml", CP="NOI DSP COR CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"");?>

De afronding
Nadat je zelf ook een publieke privacy statement online hebt gezet (wat verplicht is als je Google Analytics gebruikt), kun je je beleid valideren. Als alles goed is gegaan worden nu ook cookies van externe domeinen in een (i)frame geaccepteerd.

Tipje: ik heb deze P3P editor gebruikt. En alsjeblieft: ga me niet naar de verkorte notatie vragen die in de headers gebruikt worden. Zo zwaar heb ik me daar niet in verdiept, ik was alleen op zoek naar een oplossing voor Google Analytics ;)

De resultaten

Wanneer ik nu mijn site in een (i)frame laadt vanaf een andere site worden toch de Google Analytics cookies geplaatst. Dit is bijvoorbeeld de (ingeknipte) inhoud van de utmz cookie wanneer ik een ingeframed bezoek doe vanuit de Google Image search:

__utmz
utmcsr=images.google.nl
utmccn=(referral)
utmcmd=referral
utmcct=/imgres

Lees ook hoe ik dit weer gebruik om de Google Image Search als zoekmachine door te meten inclusief het gebruikte zoekwoord.

Gerelateerde posts
Zoekt men in Google op “Het Internet” of in “het Nederlands”?...
Yahoo Site Explorer update...
Google Image Search doormeten met Google Analytics...
Google Analytics en 2 letter domeinen in IE...
Google Analytics zonder javascript...
99% van de Google Analytics implementaties is illegaal...




19 Reacties op “Google Analytics, P3P, iframes, Internet Explorer en cookies”



  1. Gravatar van Jorrit SchippersJorrit Schippers

    Op deze pagina is informatie te vinden over hoe Internet Explorer precies met P3P omgaat.

    Hier staat dus welke policies voor cookie acceptatie zorgen en welke niet.
    Daarnaast staat er dat je alleen een verkorte policy nodig hebt voor cookie acceptatie. Het XML bestand is hiervoor dus niet noodzakelijk.

  2. Gravatar van AndréAndré

    @Jorrit: dank voor de link. Ik weet dat het met de korte policy al werkt, maar een volledige implementatie kan geen kwaad ;)

  3. Gravatar van Emiel KamzolEmiel Kamzol

    Andre,
    Natuurlijk was ik van plan om je aanpassing direct door te laten voeren bij een klant van mij, maar ook (bijna) natuurlijk ondersteund het CMS deze methode niet standaard. En blijkt het een kostbare aangelegenheid om deze aanpassing aan het cms door te voeren. Nu werd aan mij gevraagd of het zich inderdaad terug vertaald in betere cijfers. Naar aanleiding daarvan ben ik eens gaan kijken wat er nu daadwerkelijk gebeurt met het cookie als de iframe pagina wordt aangesproken. Eerlijk gezegd zie ik niks veranderen aan het cookie en blijft de originele bron van afkomst bestaan in het cookie van de geladen iframe pagina. Kortom ik begrijp je oplossing, maar blijkbaar zijn er uitzonderingen wanneer je je oplossing toepast.
    ik heb het alsvolgt gestest. Al mijn cookie's die betrekking hebben op het betreffende domein verwijderd.
    Vervolgens via een google adwords advertentie naar de site gegaan.
    Cookie is geplaatst met de juiste bron informatie
    vervolgens ben ik naar een pagina gegaan met daarin het iframe en heb gecontroleerd of de bron informatie van Google adwords naar direct werd overschreven... En dat was niet het geval.

    voorbeeld.nl/bestel met iframe bestel.voorbeeld.nl/helelangenaampagina beide GA tags maken gebruik van pageTracker._setDomainName("voorbeeld.nl");
    pageTracker._setAllowLinker(true);

    Ik heb het een ander gecontroleerd met firefox en firebug

    Test ik het nou verkeerd of is jou oplossing op en of andere manier hierop niet van toepassing?

  4. Gravatar van AndréAndré

    Jouw voorbeeld gaat over een subdomein en een hoofddomein van hetzelfde domein, daar treedt het probleem niet op aangezien sub domeinen cookies kunnen delen met hun hoofddomein. Dat wordt ook genoemd in het 2de stuk hierboven "Pagina met (i)frame op een subdomein van hetzelfde hoofddomein".

  5. Gravatar van Emiel KamzolEmiel Kamzol

    Om te beginnen bedankt voor je snelle respons. Je hebt gelijk, ik heb te snel een conclusie getrokken.. Dan toch nog een klein vraagje. Hoe belangrijk is de . voor het domein? want deze staat er bij mijn klant niet voor..

  6. Gravatar van AndréAndré

    Volgens mij is die redelijk belangrijk omdat je dan aangeeft dat alles wat eindigt op .domein.nl bij de cookie mag. Maar wellicht dat het zonder die punt ook werkt, nog nooit getest eigenlijk.

  7. Gravatar van Emiel KamzolEmiel Kamzol

    Ik zal het eens laten wijzigen en kijken of het enig verschil uit maakt. Ik laat je weten wat het resultaat is. Alvast bedankt.

  8. Gravatar van JasperJasper

    He André

    bedankt voor de uitleg waar ik al een tijdje naar op zoek was!
    Ik heb een iframe.php bij een andere site hangen en zou inderdaad graag ook de bezoeken aan die site kunnen zien/meetellen in mijn analytics.

    Ik heb je stappen gedaan alleen was mijn vraag nog even: de toevoeging in de headers .. moet dit in de header van mijn iframe.php of in de headers van de desbetreffende website waar mijn iframe in getoond wordt ?

    Alvast bedankt!

  9. Gravatar van AndréAndré

    In de headers van je iframe ;)

  10. Gravatar van XiaraXiara

    Had er zelf nog geen last gehad, maar het is altijd interessant om te weten dat er oplossingen bestaan voor dergelijke problemen...

  11. Gravatar van BenjaminBenjamin

    Hoi Andre,

    Handig artikel!

    Alleen zit ik toch nog even met je punt "Pagina met (i)frame op hetzelfde hoofddomein" hier kan je uiteindelijk niet meten als de iframe pagina veranderd binnen de gestelde pagina.

    Stel je hebt "example.com/iframe"

    Ik bezoek de site en druk binnen het iframe op een blok. Vervolgens herlaat de iframe maar de url verandert niet omdat de hoofdpagina ook niet veranderd want je clickt immers binnen het iframe. Dus dan valt het toch niet te meten?

    Groeten en bedankt,

    Benjamin

  12. Gravatar van AndréAndré

    Jawel, wanneer de iframe herlaad krijgt die een andere URL, en dus kun je die meten. De oplossing is door in je iframe code ook een Google Analytics meetcode te plaatsen.

  13. Gravatar van JeroenJeroen

    Thanx André! Heb er veel aangehad en het is me gelukt... :-)

  14. Gravatar van dakadaka

    Hoi Andre,
    Ik heb tutorial gelezen en ik weet niet of mij dit lukt?
    Hier is de verhaal:
    ik heb website: http://www.iets.nl die houd in de iframe van affiliate partner affiliatepartner.nl
    Ik heb P3P geinstaleerd zoals jij dat deed.
    Volgende code heb ik van partner erin geplaatst:


    dan heb ik analytics zoals volgende geplaatst:

    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"));

    try {
    var pageTracker = _gat._getTracker("UA-xxxxxxxx-xx");
    pageTracker._setDomainName("none");
    pageTracker._setAllowLinker(true);
    pageTracker._trackPageview();
    } catch(err) {}

    var iframe = document.getElementById("myIFrame");
    iframe.src = pageTracker._getLinkerUrl("http://mini.beslist.nl/minisite/?request=list&query=acer&maincatID=6");

    Met die p3p heb ik geen privacy raport, wat denk ik betekent dat ik p3p goed geinstaleerd had!
    En nu nog doel opzetten:
    bij de doelen in analytics heb ik volgende gezet:
    http://mini.beslist.nl/php/ (hier komt nog veel meer erachter, maar dat zijn wel rare codes)
    omdat hiernaa komt een blank link die leidt naar een doel

    Dus als ik klik op de link in analytics bij de doelen zie ik niks
    en hoe kan ik uberhoupt zien of het werkt???

    Ik ben al week me bezig en niks....
    gr. daka

  15. Gravatar van AndréAndré

    He Daka, kun je dit misschien even naar me mailen? Dan zitten ook alle codes er bij ;)

  16. Gravatar van Rien HermansRien Hermans

    Hallo Andre, mooie info!

    Ik heb een externe booking engine in een (i)frame. Moet ik de P3P header nu aanpassen op mijn eigen site of op het domein van de (i)frames?

    Groet,
    Rien

  17. Gravatar van AndréAndré

    Op het domein van het iframe ;)

  18. Gravatar van Rien HermansRien Hermans

    Dank.
    Je zit me toch niet uit te lachen he ;-)

Tweetbacks

  1. Twitter avatar van SiteScore (SiteScore)SiteScore (SiteScore)

    NL: Google Analytics, P3P, iframes, Internet Explorer en cookies: Google Analytics, P3P, iframes, Internet Ex.. http://tinyurl.com/cgyyjs

Trackbacks

  1. Geen

Laat gerust een reactie achter


Als je een afbeelding bij je post wil moet je je aanmelden op de Gravatar site. Daar kun je je email adres koppelen aan een afbeelding. Dit Gravatar systeem wordt inmiddels al op veel sites ondersteund, dus het is op meer plaatsen nuttig.

Je kunt deze elementen gebruiken: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>