Jan 31 2012

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

Raddoppia lo spazio per le variabili personalizzate

autore: Marco Cilia categoria: codice di monitoraggio

Le variabili personalizzate sono un grande e prezioso tesoro di Google Analytics; come ho modo di ripetere durante corsi e consulenze, quando si tocca l’argomento, sono uno dei pochi modi che abbiamo per inserire dati arbitrari – scelti da noi – dentro al sistema di analytics. Infatti se un visitatore è nuovo o di ritorno lo decide lo script, guardando i cookies, idem per la keyword usata nella ricerca che ha veicolato la visita. Invece nelle custom var possiamo scrivere quel che vogliamo, e “appiccicare” valori arbitrari al visitatore, alla visita o alla pagina vista in quel momento.

I limiti delle custom var sono sempre stati: non più di 5 slot usati contemporaneamente (50 su Analytics Premium) e la lunghezza di nome + valore della variabile non eccedente i 64 caratteri. L’ultima revisione del changelog di Analytics ci informa invece che questo limite è stato raddoppiato: adesso nome + valore possono arrivare a 128 caratteri. L’ultima frase “Additionally, the length is now checked before URL encoding” mi fa tornare in mente un vecchio post letto chissà dove che affermava che in presenza di caratteri “non standard” essi andavano a erodere molti caratteri (per via dell’encoding). Pare che adesso la lunghezza venga controllata PRIMA di effetture l’econdig e l’invio a GA.

Altre modifiche di questo aggiornamento sono l’aumento del limite di eventi inviabili e un diverso modo di registrare il cookie __utmv (usa il separatore ^ invece della virgola).
Dato che c’è una nuova versione del codice di monitoraggio (la 5.2.4) e che è un po’ che non lo faccio, posto la lista dei motori di ricerca conosciuti dallo script. Sicuramente Babylon è nuovo, perché in alcuni miei profili lo vedo sempre nei referrer, altri nuovi non ne vedo (e manca sempre l’italiano arianna):


daum:q
eniro:search_word
naver:query
pchome:q
images.google:q
google:q
yahoo:p
yahoo:q
msn:q
bing:q
aol:query
aol:q
lycos:q
lycos:query
ask:q
netscape:query
cnn:query
about:terms
mamma:q
voila:rdata
virgilio:qs
live:q
baidu:wd
alice:qs
yandex:text
najdi:q
seznam:q
rakuten:qt
biglobe:q
goo.ne:MT
wp:szukaj
onet:qt
yam:k
kvasir:q
ozu:q
terra:query
rambler:query
conduit:q
babylon:q
search-results:q
avg:q
comcast:q
incredimail:q
startsiden:q


Nov 17 2011

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

Posizione delle keyword nelle variabili personalizzate

autore: Marco Cilia categoria: javascript

Quasi un mese fa su SEOmoz è apparso un articolo su come tracciare il ranking del sito usando le variabili personalizzate. Uno dei tanti della serie, direi, perché ciclicamente l’argomento ritorna (io stesso ne scrissi più di un anno fa). Segnalo questo perché è il primo che compare dopo la modifica al passaggio delle keyword per gli utenti loggati ai servizi Google, e quindi prova ad usare il metodo per “indovinare” quali siano queste keyword (not provided). Ma andiamo con ordine: innanzitutto propongo una modifica al suo codice, che presuppone una funzione e una chiamata sull’onload della pagina. Io farei tutto nello script di analytics, così


<script type="text/javascript">
var url = String(document.referrer);

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
if (url.indexOf ("google") !=-1)
{  
  var urlVars = {};
  var parts = url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value)
  { urlVars[key] = value; });
  // Push to GA Custom Variables
  _gaq.push(['_setCustomVar', '1', 'Rankings', urlVars["cd"], 1]);
}
_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);
})();

</script>

ho inoltre modificato il check sul referrer da “google.com” a “google”, altrimenti per google.it non funzionerebbe (e poi perché privarsi degli altri TLD?)

A questo punto le posizioni delle parole chiave si trovano dentro al report VSITATORI -> DATI DEMOGRAFICI -> VARIABILI PERSONALIZZATE, nella chiave 1 se avete usato lo script qui sopra o nella chiave corrispondente se la 1 era già occupata e avete deciso di usare un altro slot.
Il report così com’è elenca dei numeri, cioè le varie posizioni aggregate in cui il nostro sito è comparso nelle pagine dei risultati di Google, ma usando la dimensione secondaria impostata su PAROLA CHIAVE possiamo dividere ogni riga del report nella combinazione posizione-keyword (l’immagine è di SEOmoz)

rankings

L’utilizzo possibile di queste informazioni è molteplice: innanzitutto possiamo creare dei segmenti avanzati su gruppi di posizionamenti. Ad esempio:

SEGMENTO AVANZATO: posizioni da 1 a 3
Variabile personalizzata (chiave 1) CORRISPONDE ESATTAMENTE a Rankings
E
Variabile personalizzata (valore 1) CORRISPONDE ALL’ESPRESSIONE REGOLARE ^[1-3]$

è una segmento che individua solo le visite arrivate con keyword tra la prima e la terza posizione (dove per posizione si intende il conteggio dei link nella SERP, occhio a Universal Search che mette più di 10 posizioni su pagina 1!).

L’autore dell’articolo su SEOmoz però si concentra sulla provenienza geografica e sul tentativo di indovinare le keyword che Google Analytics presenta come (not provided). L’esempio che fa è questo: le keyword (not provided) dagli Stati Uniti sono in posizione #1 e #2, quindi dopo aver esportato su Excel sono in grado di restringere il mio dataset a quelle due posizioni e a quel paese.

ranking seomoz excel

Segmentando allora il report delle variabili personalizzate per landing page si vedrà dove atterrano questi (not provided) dalle posizioni #1 e #2, e segmentando poi il report delle keyword sempre per landing pages l’autore immagina che queste keyword nascoste abbiano a che fare con il suo nome, per il quale il sito compare appunto in prima e seconda posizione.

Questo ragionamento non mi fa impazzire di felicità, ve l’ho riportato per completezza, ma mi sembra un po’ empirico e soprattutto non sempre applicabile.


Jun 29 2010

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

Il filtro per le variabili personalizzate? non si può fare (per ora)

autore: Marco Cilia categoria: filtri

L’altro giorno mi accingevo a mostrare il “famoso” metodo per escludere il proprio IP dalle statistiche quando esso non sia fisso, cioè la pagina nascosta con il valore personalizzato impostato tramite _setCustomVar() (la ex- _setVar() ).
Mi accingevo a mostrare il campo da filtrare nel “pattern filtro” della schermata di GA e non trovavo nessun riferimento. Cerce, cerca e cerca ancora, in effetti non c’è nessun riferimento!.

Questo è assolutamente incredibile, e di certo non è un vanto per Google! Google ha deprecato l’uso di _setVar() – il cui valore era richiamabile nei filtri tramite campo “definito dall’utente” – per consigliare la funzione _setCustomVar(), ma nei filtri non c’è modo di escludere o includere alcunché basandosi sui valori impostati tramite di essa!

E’ invece assolutamente possibile fare segmenti avanzati e report personalizzati usando quei valori, come testimoniato dallo screenshot:

In questo topic del forum ufficiale, ma non è il solo, altre persona lamentano questa mancanza, veramente notevole!


Jun 13 2010

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

Catturare la prima fonte con le variabili personalizzate

autore: Marco Cilia categoria: codice di monitoraggio

[questa è praticamente la traduzione di un post di websharedesign.com, che descrive un metodo per immagazzinare la prima sorgente di traffico nello slot 3 delle variabili personalizzate, analogamente a quanto descritto a suo tempo da Brian Clifton]

Per tracciare e registrare l’informazione sulla prima sorgente di traffico si ha bisogno di leggere il cookie __utmz e scrivere le informazioni nel cookie __utmv, che è dedicato alle variabili personalizzate. Facendo così è facile andare incontro al limite dei 64 caratteri (considerate che potenzialmente si potrebbero immagazzinare sorgente, mezzo, campagna, keyword e informazioni sull’annuncio).
Ecco il problema: se si prova a immagazzinare più di 64 caratteri nel cookie __utmv, Google Analytics non si preoccuperà di tagliare l’eccedenza, ma si rifiuterà di scrivere completamente l’informazione. Per evitare questo, ecco alcuni consigli:

  1. Scegliete un nome breve per le vostre variabili, come “FT” (first touch) nel nostro caso. Le variabili personalizzate usano una struttura chiave/valore nella quale la chiave è una categoria di dati; in questo caso la vostra chiave è semplicemente first touch, mentre il valore è qualcosa come google/organico/grande/blu. Scegliere un nome corto per la chiave permette di salvare la maggior parte dei caratteri per il valore
  2. Scrivere una regular expression cerca-e-sostituisci sul valore nella coppia chiave/valore per tenere solo i caratteri che non necessitano di essere codificati. Si salverà spazio utile per molti altri caratteri.
  3. Limitare la lunghezza del valore a 64 caratteri meno il valore della chiave. In altre parole valore = 64 – (lunghezza della chiave)
  4. Alla fine chiamare _setCustomVar() per memorizzare i dati della prima fonte in una variabile personalizzata

Ecco il codice necessario a leggere il cookie __utmz e quindi eseguire i passaggi dal 2 al 4:


<script type='text/javascript'>
//Used to obtain a value from a string of key/value pairs
function _uGC(l,n,s) {
if (!l || l=="" || !n || n=="" || !s || s=="") return "-";
var i,i2,i3,c="-";
i=l.indexOf(n);
i3=n.indexOf("=")+1;
if (i > -1) {
i2=l.indexOf(s,i); if (i2 < 0) { i2=l.length; }
c=l.substring((i+i3),i2);
}
return c;
}
//Retrieve campaign and referrer info from the _utmz cookie
var z = _uGC(document.cookie, '__utmz=', ';');
var source  = _uGC(z, 'utmcsr=', '|');
var medium  = _uGC(z, 'utmcmd=', '|');
var term    = _uGC(z, 'utmctr=', '|');
var content = _uGC(z, 'utmcct=', '|');
var campaign = _uGC(z, 'utmccn=', '|');
var gclid   = _uGC(z, 'utmgclid=', '|');
//Replace empty values (marked by a dash) with an empty string
if(source=="-"){source=""};
if(medium=="-"){medium=""};
if(term=="-"){term=""};
if(content=="-"){content=""};
if(campaign=="-"){campaign=""};
//If gclid is present, explicitly set source/medium to google/cpc
if (gclid !=="-") {
source = 'google';
medium = 'cpc';
}
//Build utmString
var utmString = source;
utmString=utmString+"!"+medium;
utmString=utmString+"!"+campaign;
utmString=utmString+"!"+term;
utmString=utmString+"!"+content;
//Replace URL-encoded ’spaces’ with dashes
utmString=utmString.replace('%20','-');
//RegEx to retain only whitelisted characters
utmString=utmString.replace(/[^a-zA-Z0-9-~!*_.]/g,");
//Set string to specific length
utmString=utmString.substr(0,62);
//Set first touch information if not already there, using slot 3
var fT=pageTracker._getVisitorCustomVar(3);
if(!fT){
pageTracker._setCustomVar(3,'FT',utmString,1);
}
</script>

In questo modo nel report “variabili personalizzate” si troverà una variabile di nome FT che conterrà appunto la prima fonte di traffico usata dai visitatori per raggiungere il vostro sito. L’idea è quella di creare un report personalizzato che contenga per ogni conversione la prima (quella nella variabile) e l’ultima (quella che GA segna per default).


Mar 23 2010

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

funzioni: _getVisitorCustomVar()

autore: Marco Cilia categoria: funzioni

Se vi ricordate, qualche tempo fa abbiamo parlato della funzione _setCustomVar() e del fatto che essa sostituisce quasi totalmente la vecchia _setVar() perché è più flessibile e può memorizzare più dati, anche contemporaneamente. Uno dei parametri da passare alla funzione è lo “scopo”, un numero intero che rappresenta l’uso che si fa dello slot che decidiamo di usare tra i cinque disponibili.

Ecco, se usiamo la funzione per scrivere un valore riferito al visitatore, ovvero se usiamo uno scope con valore 1, allora abbiamo successivamente la possibilità di richiamare quel valore usando la funzione _getVisitorCustomVar(); l’unico parametro che accetta in ingresso è l’indice dello slot ove risiede la stringa che abbiamo scritto nel cookie del visitatore, per cui ad esempio se durante una precedente sessione di visita il visitatore si è loggato e abbiamo usato la funzione


pageTracker._setCustomVar(1,"condizione","loggato",1);

durante una visita successiva possiamo chiamare


pageTracker._getVisitorCustomVar(1); 

e vederci restituire in risposta la stringa “loggato” da utilizzare come meglio crediamo.

Premesso che non ho ancora usato questa semplice funzione, prevengo già una possibile domanda: non so se funziona anche con gli altri scopi, cioè con porzioni di cookie riferite alla sessione o alla pagina. A giudicare dalla documentazione – e ragionandoci un po’ su – direi di no, ma in questi casi non c’è niente di meglio di un bel test!


Dec 10 2009

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

funzioni: _setCustomVar() (e la fine di _setVar)

autore: Marco Cilia categoria: funzioni

A partire dal primo dicembre 2009, la funzione _setVar() è deprecata, il che significa che non va più usata nel proprio codice di tracciamento. Nel contempo sotto al report “definito dall’utente” è stato aggiunto “Variabili personalizzate”, che consente di monitorare quel che viene definito con la nuova funzione. Il vecchio report è adesso popolabile soltanto tramite filtro.

_setVar() è stata invece sostituita dalla nuova _setCustomVar(indice, nome, valore, scopo), che ha le stesse possibilità della precedente, ma aggiunge ulteriori livelli di utilizzo e possibilità di tracciamento. Vediamo come:

  • indice è un numero intero, da 1 a 5, e rappresenta lo “slot” nel quale il valore viene inserito.
  • nome è una stringa, e rappresenta il nome che diamo alla variabile impostato.
  • valore è una stringa e rappresenta il contenuto della variabile personalizzata
  • scopo è una numero intero – opzionale – che possiamo usare per tenere traccia del perché quella variabile viene impostata. Valori tipici sono 1, 2 e 3 che nell’idea di Google Analytics rappresentano nell’ordine variabili impostate a livello di visitatore, di sessione o di pagina.

Dal punto di vista del programmatore la funzione ritorna un valore booleano: true se la variabile personalizzata è stata impostata correttamente, false se qualcosa è andato storto. Tenete a mente che la somma dei caratteri di nome e valore non può sorpassare i 64 caratteri.

Perché è utile dichiarare uno scopo? perché la nuova funzione _setCustomVar() può essere usata in contesti differenti rispetto alla vecchia _setVar(), ad esempio per raggruppare i contenuti senza trucchi. Il codice necessario per raggruppare le pagine della categoria “sport” potrebbe ad esempio essere:
pageTracker._setCustomVar(1,"sezione","sport",3);

Se per adesso non avete voglia di fare troppe modifiche ma vi interessa solo continuare a far fare ad Analytics quello che facevate con _setVar(), la traduzione della vecchia riga

trackPageview._setVar('miovalore');

si fa – ad esempio – con

trackPageview._setCustomVar(1,'valore_pers','miovalore',1);

Si è inserito il valore di 1 nello scopo perché la vecchia funzione impostava SOLO valori a livello utente, che sono appunto quelli con scopo 1.

Ricordatevi sempre che _setCustomVar() va chiamata PRIMA di un trackPageview() o di un _trackEvent(), poiché la funzione imposta il valore ma non comunica niente ai server, mentre le altre due poi inviano tutte le informazioni, quindi anche il valore appena impostato, a Google Analytics