Jan 19 2011

HelpSemaforoQuesto semaforo indica il livello difficoltà del post
semaforo verde - articolo per tutti semaforo giallo - articolo avanzato semaforo rosso - articolo per esperti

Tracciamento dei sottodomini: best practices

autore: categoria: codice di monitoraggio

Traduco un post di ROIrevolution, perché mi sembra interessante: riguarda alcuni consigli per il tracciamento dei sottodomini

Non esiste un articolo specifico nell’help ufficiale dedicato al tracciamento dei sottodomini. Il più vicino è questo, che raccomanda quanto segue:


// questa è solo la parte modificata
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-12345-1']);
_gaq.push(['_setDomainName', '.example-petstore.com']);
_gaq.push(['_setAllowHash', false]);
_gaq.push(['_trackPageview']);

Propongo invece alla maggior parte dei siti con sottodomini, di usare il codice seguente:


// questa è solo la parte modificata
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-12345-1']);
_gaq.push(['_setDomainName', 'example-petstore.com']);
_gaq.push(['_addIgnoredRef', 'example-petstore.com']);
_gaq.push(['_trackPageview']);

Cosa c’è di sbagliato nel codice raccomandato da Google? ci sono tre aspetti che potrebbero generare problemi evitabili:

1. Disabilitare l’hashing è male

Disabilitare l’hashing del sito, tramite [‘_setAllowHash’, false] oppure [‘_setDomainName’,’none’] è necessario affinché il tracciamento cross-domain abbia successo. E’ una necessità sfortunata, tuttavia, perché l’hashing del dominio è una cosa veramente utile.

Per definizione, uno script non può identificare il dominio di un cookie; questa informazione non è disponibile a meno che essa non faccia parte del nome del cookie o sia scritta nel suo contenuto. Includere l’hash fornisce quella informazione, così il codice di Google Analytics può leggere il set di cookie corretto in situazioni dove potrebbero essercene più d’uno.

Disabilitare l’hash significa che il codice non ha modo di capire quale set di cookie sia quello corretto. La maggior parte delle volte esiste un solo set, quindi non è un problema. Ma se avete già usato Google Analytics senza il tracciamento dei sottodomini, allora finirete per avere due set di cookie per lo stesso dominio nel caso di un visitatore di ritorno (dopo la modifica, ndMC): un set creato dal codice vecchio, e un set creato dal codice nuovo. Questo accade più spesso nei sottodomini, ma può anche accadere sul dominio principale.

Eduardo Cereto ha un post che approfondisce questo problema con più dettagli e fornisce un altro caso in cui _setAllowHash genera problemi. La morale qui è che avete bisogno di _setAllowHash per il tracciamento cross-domain, ma se invece avete solo a che fare con sottodomini non è necessario e anzi potrebbe causarvi problemi.

2. Il punto messo come prefisso causa il reset dei cookie

Le pagine del Google Code offrono la seguente spiegazione per l’uso del punto prima del dominio quando si usa _setDomainName:

“se volete tracciare attraverso differenti sottodomini:
* dogs.petstore.example.com e
* cats.petstore.example.com

è richiesto un punto prima del nome di dominio”.

Se il vostro sito usa sottodomini allora avrete indubbiamente bisogno di quel punto, pena il non funzionamento del tracciamento. Se il vostro sito non usa sottodomini, comunque,sarebbe meglio non usare il punto.
Il motivo è ancora una volta l’hash. L’hash che viene generato dal codice di Google Analytics quando si usa il punto è differente da quello generato quando invece il punto non si usa. Ma l’hash generato quando non si usa il codice per tracciare i sottodomini sul sito principale è identico a quello generato quando si tracciano i sottodomini senza l’uso del punto.

Questo significa che se non si stavano tracciando i sottodomini in precedenza, usare il punto istruirà il codice di GA a distruggere i vecchi cookie perché l’hash non combacia, che è appunto simile a quanto descritto al punto 1.

Semplicemente, non includere il punto se non è necessario significa avere minori probabilità di reset dei cookie, cosa che facilità la transizione al tracciamento dei sottodomini.

3. Non utilizzare _addIgnoredRef causa problemi di auto-referrer

Se il vostro sito non ha sottodomini il GATC è capace di riconoscere quando la sessione di visita è scaduta tra due pagine visualizzate ed evitare di sovrascrivere il referrer esistente con un auto-referrer o un referrer-interno (cioè evita di far comparire il vostro stesso sito come referrer ndMC).

Questa “protezione” è tuttavia rimossa quando ci sono dei sottodomini, anche se il vostro codice usa la soluzione standard per il loro tracciamento. Questo può risultare in una percentuale elevata di auto-referrer anche se sembra che abbiate fatto le cose per bene.

La soluzione è usare _addIgnoredRef, ma come usarla spesso non è capito fino in fondo. Le raccomandazioni di Google sono di usare un codice simile a questo:

_gaq.push(['_addIgnoredRef', 'www.sister-site.com']);

Ho guardato in profondità nel sorgente di ga.js e osservato che una cosa così effettivamente non funziona. La ragione è che il codice di tracciamento considera www.sister-site.com identico a sister-site.com, quindi aggiungere www.sister-site.com come referrer ignorato non risolve granché. Usare un punto prima del dominio fallisce anche qui. Questo invece funziona benone:

_gaq.push(['_addIgnoredRef', 'sister-site.com']);

e ancora meglio

_gaq.push(['_addIgnoredRef', 'sister-site']);

Il GATC controlla ogni riga di referrer ignorati che aggiungete e usa il metodo javascript IndexOf per determinare se la stringa è contenuta o meno nel dominio referente. Se uno di questi controlli risulta essere positivo, allora il referrer è ignorato. Poiché il dominio principale senza il punto sarà contenuto anche in tutti i sottodomini, passarlo a _addIgnoredRef funziona bene. Questo elimina anche la necessità di aggiungere un _addIgnoredRef separato per ogni sottodominio.

Possono comunque esserci auto-referrer residui, ma non più di quanti ce ne sarebbero senza i sottodomini. La ragione è che _addIgnoreRef funziona soltanto quando il cookie contiene già informazioni di referrer. Se un nuovo visitatore arriva al vostro sito su una pagina senza codice di Analytics e poi naviga verso una pagina che invece ce l’ha, il risultato sarà che il vostro sito compare tra i referrer, a prescindere dalle accortezze che avrete usato per evitarlo.

Questi tipi di auto-referrer possono essere evitati assicurandosi di aver taggato ogni pagina del sito. Quindi se ci sono pagine che hanno questo problema, potete utilizzare GA per determinare esattamente quali esse siano, e siccome state usando _addIgnoredRef sarà facile isolarle dato che non avrete altri falsi positivi generati senza apparente ragione.

La cosa importante da ricordare, quindi, è che _addIgnoredRef dovrebbe essere inclusa per definizione ogni volta che si tracciano sottodomini, non solo se si notano auto-referrer

[update 27/1: Analyticpros chiarisce ancora meglio come funziona la routine per l’aggiornamento del cookie __utmz; le condizioni per aggiornarlo sono due: se nel DOM document.referrer è diverso da document.domain e se si tratta di una nuova sessione. Ne consegue che anche nell’ipotesi di codice ottimale se un visitatore è nel sito principale e ci resta 40 minuti, e poi clicca un link che lo porta ad un sottodominio, poiché entrambe le condizioni sono verificate il codice di GA provvederà ad aggiornare il cookie, causando un auto-referrer]

Condividi l'articolo:

41 Commenti

  1. io per Blog2 Network ho risolto grazie al forum ufficiale di analytics:

    http://www.google.bj/support/forum/p/Google+Analytics/thread?tid=6b58096cda41eb8c&hl=en

    Sembra funzionare ma c’è una cosa che non capisco che forse tu mi puoi spiegare. La somma delle visite di tutti i sottodomini (compreso il www. ) è inferiore alle visite totali dell’account principale.

    Ho ricontrollato personalmente tutti i filtri applicati (si tratta di 25 terzi livelli) e tutto è ok.

  2. è strano, di solito ci si trova tutti ad affrontare il problema opposto…

  3. Ho fatto chiaramente confusione… la somma dei sottodomini è superiore. Beh se è un problema che affrontano più o meno tutti posso stare tranquillo ma continuo a non spiegarmi il perché.

    Complimenti per l’ottimo lavoro!

  4. ok, allora è il caso standard e la spiegazione è facile:
    nel profilo principale io arrivo sul sito A (1 visita) e poi passo a sottodominio sub.A (stessa visita), e poi balzo su sub2.A (sempre la stessa visita).

    nel profilo filtrato per sub1 la visita su A non esiste, inizia quando arrivo su sub.A e quando passo a sub2.A ancora non esiste. totale 1 visita.

    Stessa cosa per il profilo che conteggia solo sub2.

    Se fai la somma di sub1+sub2 viene 2 visite, mentre in realtà è sempre la stessa, solo che essendo “troncate” dai filtri non si possono legare 🙂

  5. uhmmm, ma nel caso in cui volessi monitorare piu’ siti internet (stesso target di clientela) con lo stesso codice di tracciamento, e’ una cosa fattibile?

    doc

  6. si, è una cosa fattibile ed è uno dei casi standard affrontati nell’help ufficiale: http://code.google.com/intl/it-IT/apis/analytics/docs/tracking/gaTrackingSite.html#multipleDomains

    in sostanza devi trasportarti i cookie da un dominio all’altro tramite le funzioni _link() e _linkbypost()

  7. Grazie! vado a studiare! ;-D

  8. Con omulità vi chiedo un eventuale supporto. Sto entrando nel mondo dei sottodomini e in Analytics ho un account con dentro un profilo riferito ad un dominio. Ho un sottodominio, con pagine completamente diverse dal dominio principale, e ho quindi aggiunto un profilo a quello del dominio principale. Ho quindi un codice UA identico. Ho preso il codice suggerito da Analytics e l’ho messo nel sottodominio, ma il profilo ha raccolto sia i dati del principale che del sottodominio. Ho allora modificato il codice, solo sul sottodominio, seguendo i suggerimenti in questa pagina, ma ancora vengono raccolti in entrambi i profili si i dati dell’uno che i dati dell’altro. Io vorrei semplicemente avere il dominio principale che raccoglie tutti i dati dell’uno e dell’altro, e il sottodominio che raccoglie solo i dati propri. Ci sono speranze? Ho letto anche “Advanced Web Metrics – 2nd edition”, ma senza successo. Scusate la lunghezza e grazie comunque.

  9. nel profilo del sottodominio ti serve un filtro di inclusione basato sul nome dell’host. In quel modo quel profilo avrà solo i dati del sottodominio.

  10. Ciao Marco,
    ho un problema che penso riguardi proprio l’hashing.
    All’interno di un sito ho due pagine diverse, sotto lo stesso dominio:
    – example.prova.it/pagamento
    – example.prova.it/conferma

    nel primo caso(pagina /pagamento) è stato inserito un tag analytics con hashing abilitato (quindi senza _gaq.push([‘_setAllowHash’, false]);)

    nel secondo caso (pagina /conferma) l’hashing è disabilitato (quindi nel tag è presente il comando _gaq.push([‘_setAllowHash’, false]);)
    Questa seconda pagina contiene inoltre un ecommerce tag in quanto si tratta di una pagina di conferma acquisto.

    Guardando i dati su analytics, nella sezione ecommerce riesco a vedere correttamente tutti i dati relativi alle revenues, ai prodotti etc, ma non riesco in alcun modo a capire quali sono le fonti di traffico che le hanno generate. Tutte le revenues provengono dalla source “Direct”
    è possibile che il problema sia dovuto al fatto che nella pagina con l’ecommerce tag ho disabilitato l’hashing?

    Grazie mille in anticipo per il tuo suppporto.
    Matteo

  11. immagino proprio di si. Probabilmente hai due set di cookie per lo stesso dominio. La vera domanda è PERCHE’ disabiliti l’hashing su una pagina?

  12. Ciao Marco, ho implementato un sistema di tracciamento con doppio codice (un codice per il dominio specifico, uno per il rollup che effettua la somma dei differenti domini) per monitorare 3 differenti domini, ognuno con numerosi sottodomini. Questo il codice in pagina:

    var pageTracker = _gat._getTracker(“UA-XXXXXXX-X”);
    pageTracker._setAllowHash(false);
    pageTracker._setDomainName(“.dominio.it”);
    pageTracker._setAllowLinker(true);
    pageTracker._trackPageview();
    var rollupTracker = _gat._getTracker(“UA-YYYYYYY-Y”);
    rollupTracker._setAllowHash(false);
    rollupTracker._setDomainName(“.dominio.it”);
    rollupTracker._setAllowLinker(true);
    rollupTracker._trackPageview();

    Il codice UA-XXXXXXX-X è presente in tutti e 3 i domini, mentre UA-YYYYYYY-Y è specifico per ognuno dei 3 (YYYYYYY, ZZZZZZZ, WWWWWWWW).

    Nell’account di roll-up, i 3 domini vengono letti come rispettivi referrer, mentre avrei bisogno che prevalesse il referrer esterno. Es. un utente entra da Google (organic), visita il dominio YYYYYY, poi passa al dominio ZZZZZZ ed effettua un acquisto. Oggi la sua sorgente è YYYYYY, vorrei invece che fosse Google.

    E’ sufficiente impostare _addIgnoredRef?

  13. non è il comportamento atteso, ci deve essere qualche problema

  14. Cosa suggerisci?

  15. scusa ho letto male io. credevo si parlasse solo di sottodomini. Quando il visitatore si muove tra domini di primo livello, oltre a quanto hai già fatto, devi usare le funzioni link() e linkbypost() sui link in uscita verso gli altri domini gestiti.

  16. Ciao Marco, bel blog molto utile!
    Ho una domanda (forse banale ma nono sono un guru di analytics 🙂 )

    Devo caricare il codice di analytics su un sito e tracciare anche un dominio di terzo livello.

    da quanto leggo sugli articoli di G. Analytics devo incollare questo codice su dominio.com e news.dominio.com

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setDomainName’, ‘.example-petstore.com’]);
    _gaq.push([‘_trackPageview’

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setDomainName’, ‘.example-petstore.com’]);
    _gaq.push([‘_trackPageview’
    questa parte di codice va comunque mantenuta su entrambi i codici?

    Da quando ho aggiunto la parte di codice in cui “dichiaro” il dominio ho notato un calo nelle visite. Forse ho sbagliato qualcosa? il codice che ho incollato è sbagliato?

    Grazie in anticipo per la risposta

    Andrae

  17. ammesso che naturalmente l’UA sia giusto, il dominio nel setdomainname sia giusto, la riga con trackpageview sia terminata correttamente e che il codice non sia ripetuto due volte, è corretto 🙂

  18. Ohi! sul sito non ho incollato due volte… lo giuro! 🙂
    Ho incollato questo codice:

    var _gaq = _gaq || [];

    _gaq.push([‘_setAccount’, ‘UA-xxxxxxx-1’]);

    _gaq.push([‘_setDomainName’, ‘.dominio.it’]);

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

    })();

    La seconda parte quella dopo function è corretta oppure va eliminata?

    Grazie ancora!

  19. si è giusto, e quella parte è necessaria. A me sembra tutto a posto

  20. Salve,
    io non ho impostato i sottodomini nel codice di tracking di analytics.
    Come indirizzo principale del sito ho impostato: http://www.nomesito.com

    Vorrei sapere se il codice di tracking (senza l’impostazione dei sottodomini) traccierà correttamente le visite sia se gli utenti visitano http://www.nomesito.com sia nomesito.com (senza www. davanti al nome a dominio)

    Grazie.

  21. www e non-www dovrebbero essere gestiti correttamente anche in assenza del setdomainname. Però non ho mai sperimentato, perché di norma redirigo o faccio redirigere uno dei due sull’altro.

  22. Salve,
    per visualizzare dopo i dati dei sottodomini divisi dal sito principale, qual’è il miglior metodo?

  23. fare dei profili-copia con filtri sul nome dell’host

  24. Non sul dominio quindi?
    Questo è errato? http://cl.ly/3I292p0E220c2Q1Y2k3E

  25. Non sul dominio quindi?
    Questo è errato? http://cl.ly/3I292p0E220c2Q1Y2k3E (anche perchè non mi da risultati)

  26. no. devi usare il campo NOME HOST e inserire il nome host completo

  27. Ciao a tutti, io ho un problema credo piuttosto raro.
    Il dominio http://www.dominio.com non è accessibile, si viene sempre redirectati a città.dominio.com (es. roma.dominio.com, milano.dominio.com etc).

    Vorrei che tutte le città vadano su un profilo, ma che il blog (blog.dominio.com) sia tracciato separatamente.

    Non capisco proprio come fare, mi date una dritta? Grazie!

  28. due profili-clone: uno con un filtro che include solo il blog, uno con un filtro che esclude solo il blog

  29. Ciao Marco,

    Sapresti darmi qualche info più dettagliata su come creare tali filtri?
    Inoltre: due profili quindi con tracking completamente diversi?

    Grazie mille per la risposta!

  30. no, due profili-clone: sono due profili che condividono lo stesso codice di monitoraggio.
    devi fare un filtro personalizzato di tipo includi, campo filtro nome host, valore blog\.sito.it. l’altro è identico, solo che è di tipo escludi

  31. ah fantastico grazie mille! 🙂

  32. Improvvisamente mi sono comparsi degli auto-referrer… non uso sottodomini però ho introdotto il tag per Google rel=canonical, può esserci correlazione ?

  33. non dovrebbe. il canonical non ha influenza sugli header http, che sono poi usati dal codice di GA per determinare il referrer

  34. Ciao Marco,
    ho una domanda da porti:-)

    Monitoro un sito con sottodominio (quest’ultimo di booking) che presenta due codici di tracciamento differenti. Il primo è il codice di tracciamento standard non impostato per il monitoraggio con sottodomini che genera dei problemi di autorefferer e immagino di visite duplicate (il dominio principale viene tracciato come referrer del sottodominio). Il secondo, che è quello che ho impostato io, è un monitoraggio subdomain impostato come segue

    _gaq.push([‘_setDomainName’, ‘example-petstore.com’]);
    _gaq.push([‘_addIgnoredRef’, ‘example-petstore’]);

    da qd ho implementato quest’ultimo sul sito, i problemi di autoreffer sono improvvismanete scomparsi anche nel profilo standard, le date coincidono e non credo sia un caso.

    Sapresti dirmi come mai? Può essere che la funzione _addIgnoredRef’ del secondo codice possa creare dei problemi anche nell’altro?

    Grazie

  35. dipende come sono scritti i codici. In teoria non dovrebbe, ma ormai credo di aver visto di tutto e di più. dovrei vederlo 🙂

  36. Ciao Marco, una domanda anchio.
    Ho un sottodominio con del traffico comprato da google adwords.

    Vorrei escludere queste visite dall’audience o quanto meno riuscire a filtrarle in modo corretto per capire quanto traffico organico ho e quali sono i miei “referal” reali (intendo i referal non di adwords.)

    Idee?

    Grazie in anticipo.

  37. oiboh. AdWords non dovrebbe mai essere un referrer, se hai collegato correttamente l’account GA a quello ADW.

  38. Ciao Marco,

    ho provato a far invertire i codici di monitoraggio e praticamente gli autorefferer sono tornati su entrambi i profili degli account. Sostanzialmente è come se GA leggesse solo il primo codice di tracciamento che incontra, proiettando gli stessi dati anche sul secondo.

    Al momento i codici sono online per intero nel seguente modo:

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-XXXXXX-XX’]);
    _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);
    })();
    //]]>

    var _gaq = _gaq || [];
    _gaq.push([‘_setAccount’, ‘UA-YYYYYYYY-Y’]);
    _gaq.push([‘_setDomainName’, ‘example-petstore.com’]);
    _gaq.push([‘_addIgnoredRef’, ‘example-petstore’]);
    _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);
    })();

    Cosa mi consigli? Grazie mille

  39. non basta vedere il codice, bisogna vedere cosa succede passo passo nella creazione dei set di cookie e nell’invio delle informazioni ai server di google. magari è solo un leading point nel primo cookie, magari c’è altro che non si può capire da qua.

    In ogni caso quello non è il modo migliore di gestire due codici: http://www.goanalytics.info/doppio-codice-asincrono-come/

  40. Ciao Marco,
    ho un dubbio amletico… 🙂

    Su un sito con vari sottodomini ho implementato un codice del tipo:
    _gaq.push([‘_setAccount’, ‘UA-12345-1’]);
    _gaq.push([‘_setDomainName’, ‘.example-petstore.com’]);
    _gaq.push([‘_trackPageview’]);
    con il punto nel setDomain e senza il _setAllowHash a false avendo solo sottodomini.

    Come da te previsto nel presente articolo, mi si generano molti autoreferral per gli utenti che si muovono tra un sottodominio e l’altro.

    Ho inoltre verificato che il numero di autoreferral del profilo principale è circa uguale alla somma degli autoreferral dei profili filtrati dei sottodomini, cosa secondo me stranissima e che mi apre la domanda su cosa leggo nel profilo principale a livello di sorgente e di sessioni/visite tracciate.

    Mi spiego con un esempio: consideriamo il caso che facevi sopra di una visita al sito A, proveniente da un motore di ricerca, di un utente che poi visita sub1.A e quindi sub2.A.
    Ora, nel profilo filtrato di sub1 dovrei avere 1 visita con A come sorgente referral, mentre nel profilo filtrato di sub2 dovrei avere 1 visita con sub1 come sorgente referral.
    Ti torna?
    Ora, cosa dovrei avere nel profilo principale? Teoricamente 1 visita con sorgente organica… ma allora perchè ho tutti quegli autoreferral anche nel profilo principale???
    Mi viene il sospetto che possa accadere una di queste 2 possibilità:
    – la sessione utente mi si divide in 3 visite, una con sorgente organica e le altre 2 con autoreferral (A e sub1.A)
    – rimane 1 visita, ma la sorgente cambia in autoreferral, non so se A o sub1.A…
    Che ne pensi? Hai qualche altra spiegazione?
    Come posso capire cosa succede effettivamente sul profilo principale?

    Come sempre, ti ringrazio in anticipo! 🙂
    Ciao Roberto

  41. c’è qualcosa che non quadra: se il setDomainName è impostato bene, i sottodomini condividono i cookie e non dovresti vedere autoreferral. Se succede, c’è qualcos’altro di mezzo che lo provoca…

Scrivi un Commento