Jan 24 2010
Setdomainname() e AdWords
Google Analytics è pensato per essere usato nella maniera più semplice possibile; ci sono margini di miglioramento, certo, ma nella maggior parte dei casi le cose funzionano da sole, quasi come per magia. Poiché però il web è vasto, e le casistiche possibili sono pressoché infinite, alcune volte c’è bisogno di indagare e capire perché gli ingranaggi si inceppano: è il caso di questo post di Brian Kats su VKI studios, relativo all’uso di setdomainname(), initdata() e le campagne Adwords, e a casi in cui il sito che si sta monitorando compare come referrer di se stesso, falsando quindi l’attribuzione della campagna.
Gli scenari più comuni per questo errore sono:
- non state usando _seDomainName() su nessuna pagina:
– il dominio principale (mywidgets.com) non viene rediretto al sottodominio www (www.mywidgets.com). I visitatori potrebbero digitare l’indirizzo sbagliato e poi cliccare su link all’URL completo, generando un referrer inconsistente
– si usano sottodomini in modo che il navigatore passi da uno all’altro e viceversa.
– ci sono redirect inconsistenti tra il dominio principale e i sottodomini
Soluzioni:
– costringere il webmaster/provider/sistemista a redirezionare il dominio principale sul sottodominio www
– seguire le best practice seguenti - C’è un misto di chiamate a urchin.js e ga.js, risultato di:
– Una migrazione dal vecchio codice
- Effettuare test con Google Website Optimizer e usare un codice differente dal resto del sito.
Soluzione:
– Correggere il codice di GWO per usare _setDomainName() in modo appropriato (si vedano gli esempi in fondo) - Ordine incorretto delle funzioni _set* e di _initData() o altre funzioni che inviano dati a Google Analytics (ecommerce, eventi e la funzione _setVar()).
– _initData() è deprecata e l’uso è opzionale. In ogni caso, tutte le funzioni che inviano dati a GA la invocano internamente. Questo è il motivo per cui non è più necessario specificarla.
– Il suo scopo è quello di creare l’oggetto di tracciamento e (ri)creare i cookie __utm*
– _initData() fa questo lavoro secondo le impostazioni esistenti al momento in cui è chiamata. Tutte le funzioni _set* seguenti vengono ignorate
Soluzione:
– tutte le funzioni _set* (a parte _setVar()) devono essere chiamate prima di qualsiasi funzione che contenga la chiamata interna a _initData(), altrimenti le loro impostazioni saranno ignorate. - Inconsistenze generali tra le pagine, risultato di manutenzione evolutiva, programmatori o webmaster multipli e altri casi che possono presentarsi nella normale vita di un progetto web
– La migrazione di pagine che usavano il vecchio codice su un sito col nuovo codice
– La migrazione di specifiche pagine (thank you page, ad esempio)
– L’uso di urchin.js per Google Website Optimizer su un sito che usa ga.js (o viceversa)
Soluzione:
– La vecchia variabile _udn deve essere trasformata nell’equivalente funzione per ga.js _setDomainName() (es: e.g.: _udn =”.MyWidgets.com” diventa _setDomainName(“.MyWidgets.com”))
Perché adWords viene derubato della paternità della visita
- Nell’esempio seguente, _initData() è responsabile della creazione di un set di cookie per il sottodominio www.mywidgets.com, perché _setDomainName(“.mywidgets.com”) viene invocata troppo tardi:
var pageTracker = _gat._getTracker("UA-987654321-99"); pageTracker. _initData(); pageTracker._setDomainName(".MyWidgets.com"); // ordine errato pageTracker._trackPageview();
Il cookie registra la campagna “IloveWidgtes” così:
Name: __utmz Value: 187400622.1251739746.1.1.utmcsr=google|utmccn=ILoveWidgets|utmcmd=cpc Host: www.MyWidgets.com
- In una pagina successiva, il seguente codice crea un altro set di cookie in “.mywidgets.com”
var pageTracker = _gat._getTracker("UA-987654321-99"); pageTracker._setDomainName(".MyWidgets.com"); // correct order pageTracker._initData(); pageTracker._trackPageview(); Name: __utmz Value: 18180582.1251739746.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) Host: .MyWidgets.com
- Se venisse registrato un obiettivo o una transazione ecommerce adesso, la campagna AdWords sarebbe “derubata” e la conversione sarebbe attribuita a “traffico diretto”. L’uso di funzioni che invocano _initData() prima di _setDomainName() ha lo stesso effetto.
Sbagliato: var pageTracker = _gat._getTracker("UA-987654321-99"); pageTracker. _setVar("Leads"); pageTracker._setDomainName(".MyWidgets.com"); pageTracker._trackPageview(); Corretto: var pageTracker = _gat._getTracker("UA-987654321-99"); pageTracker._setDomainName(".MyWidgets.com"); pageTracker. _setVar("Leads"); pageTracker._trackPageview();
Best pratices raccomandate:
- usare un solo file .js con il codice di Google Analytics e richiamarlo da tutte le pagine. E’ il modo migliore per evitare problemi di inconsistenza
- Usare sempre _setDomainName(“.mywidgets.com”), sia che abbiate sottodomini sia che non li abbiate
- Usare sempre le funzioni _set* prima di quelle che invocano _initData() (le funzioni che tracciano le pagine, gli eventi, setVar e le funzioni ecommerce)