Apr 08 2013

HelpSemaforoQuesto semaforo indica il livello difficoltà del post
semaforo giallo - articolo avanzato

Perché il totale transazioni non coincide col report transazioni?

autore: Marco Cilia categoria: report tag: , ,

Ecco un caso infido, una delle sfide che mi piace affrontare nel quotidiano per capire sempre di più come ragionano gli ingegneri che stanno dietro al sistema e provare quindi a capire un po’ meglio lo strumento.
Che il totale delle transazioni registrate da Google Analytics possa non coincidere con quanto registrato dal sistema e-commerce è normale, oserei dire quasi fisiologico; in tanti anni ho visto uno ed un solo e-commerce con aderenza 100% tra registrato e GA. Le cause possono essere molteplici, si va dagli utenti che comprano senza avere javascript abilitato (quindi invisibili a GA), a errori bloccanti nell’esecuzione dello script, lentezza della pagina e posizione sbagliata del codice, redirect fantasiosi, insomma avete capito.

Il caso di cui parliamo oggi invece è diverso, perché rappresenta una discrepanza interna dello strumento: in un dato giorno l’overview ecommerce dice che ci sono 102 transazioni e 13.084 euro di entrate, e il report delle transazioni elenca solo 47 record, per lo stesso ammontare di entrate (clic sulla seconda immagine per ingrandire).

102-transazioni
47-transazioni

Il problema non sarebbe nemmeno tanto grave una volta appurato quale dei due è quello corretto (quello del report, vi rovino la sorpresa 😀 ), se non fosse che nell’overview è presente il dato del valore medio, che è un KPI importante in un e-commerce, e che in quel caso viene calcolato usando il numero di transazioni dell’overview.

Un po’ di background tecnico, per cominciare

Tutti ormai dovremmo sapere almeno a grandi linee come funziona Google Analytics, anzi come fa ad inviare le informazioni ai server di Google: richiama una gif trasparente 1×1 pixel e ci attacca una lunga serie di parametri, con i dati che servono. Tra le tante informazioni che invia, ne esiste una particolare che dice allo strumento che tipo di hit sta arrivando: se si tratta di una pagina vista (il default), di un evento, di un prodotto o di una transazione.
Esatto, ogni prodotto e ogni transazione generano una nuova chiamata alla gif, per cui la thankyoupage di un ecommerce in cui ho fatto un acquisto con 4 prodotti avrà almeno 6 chiamate alla gif: la pageview, la transazione e una chiamata per ogni prodotto.

Quindi?

Quindi la discrepanza è semplicemente dovuta a gif di tipo transazione che vengono conteggiate in un caso e nell’altro no. Come me ne sono accorto? facendo un semplice custom report con metrica “transazioni” e dimensione “transazione” (clic per ingrandire)

102-rettificato

ci sono si 102 transazioni, ma ce n’è una di nome “undefined” con 55 transazioni. 47 transazioni “vere” + le 55 undefined fa proprio 102.
Al sistema quindi arrivano, per motivi da debuggare in seguito, delle hit di tipo transazione con transaction ID (il primo parametro obbligatorio della funzione _addTrans) vuoto (o undefined). L’overview e-commerce mostra semplicemente il numero di hit di tipo transazione, il report delle transazioni invece è filtrato a monte per mostrare solo ID di transazioni “reali”, o meglio per nascondere i valori undefined. Da cui la discrepanza.

E abbiamo portato a casa un altro pezzo di conoscenza del sistema 🙂


Feb 13 2013

HelpSemaforoQuesto semaforo indica il livello difficoltà del post
semaforo verde - articolo per tutti

Transazioni multivaluta, finalmente!

autore: Marco Cilia categoria: codice di monitoraggio tag: ,

Una delle cose che a mio avviso è sempre mancata in Google Analytics era un modo semplice per inviare transazioni multivaluta, un problema molto sentito dagli e-commerce internazionali. Poiché nel codice di tracciamento e-commerce non è mai specificata la valuta, essa veniva impostata a livello di di profilo tramite l’apposita opzione nell’amministrazione.
Se il tuo e-commerce vende in molti paesi con valute diverse, la soluzione è sempre stata “converti tutto in una unica valuta PRIMA di inviare la transazione”.

Oggi non è più così perché il team di Google Analytics ci informa tramite un post sul blog che è arrivata la multivaluta: GA provvederà ad effettuare la conversione nella valuta principale che è stata specificata nel profilo.

Prima domanda: quale tasso usano i server di Google? usano il tasso medio di conversione del giorno precedente all’analisi, ricavato dallo stesso server di Google Billing (che se non ho capito male dovrebbe essere lo strumento ufficiale di fatturazione di Google, giacché non esiste un servizio che si chiama così).

Seconda domanda: come faccio ad usare il multivaluta? basta aggiungere una sola funzione e conoscere il codice ISO 4217 corrispondente alla valuta. Attualmente sono supportate 31 diverse valute in Google Analytics.
Ad esempio una transazione in euro avrà questa funzione prima di _trackTrans


_gaq.push(['_set', 'currencyCode', 'EUR']);

mentre una transazione in peso messicani avrà questa funzione


_gaq.push(['_set', 'currencyCode', 'MXN']);

A livello di report saranno poi disponibili specifiche metriche relative alle transazioni nella loro valuta originale. Se ne possono vedere alcune nello screenshot postato sul blog di Analytics

multicurrency

Terza domanda: ho un ecommerce in una sola valuta. devo cambiare i miei tracciamenti? no, questa operazione è necessaria SOLO se si vogliono registrare transazioni in più valute e si vuole che Google si occupi della conversione automaticamente.


Aug 25 2008

Transazioni negative, la mia opinione

autore: Marco Cilia categoria: codice di monitoraggio tag: ,

NegativeInserire transazioni negative in un sistema di web analytics, principalmente quando si parla di e-commerce, ha il vantaggio di tenere sempre allineata la situazione dei ricavi reali con quelli presentati dal sistema. Vediamo come si inserisce una transazione negativa in Google Analytics: innanzitutto è necessario creare una pagina html qualsiasi ed editarla, incollando lo script di Analytics e le funzioni che si vogliono annullare, _addTrans(), _addItem() (o entrambe) e sicuramente _trackTrans().

E’ poi necessario assicurarsi di inserire lo stesso id_ordine della transazione che si vuole annullare. Infine il campo “totale” conterrà un numero negativo, il campo “quantità” un numero sempre negativo ma un “prezzo” positivo (in modo che la moltiplicazione dei due generi un numero negativo), i campi “tasse” e “spedizione” devono azzerare gli stessi campi della transazione con totali negativi.
A questo punto salvando la pagina e visualizzandola su un browser mentre si è connessi ad internet verrà eseguita _trackTrans() e i dati saranno inviati ai server di Google, che provvederà ad annullare la transazione nei conteggi e nei report.
E’ importante notare due cose: la prima è che bisogna assicurarsi di eseguire la pagina una e una sola volta, altrimenti si rischia di inserire transazioni negative pure (+100, -100, -100 fa -200), la seconda è che le singole transazioni restano visibili anche dopo l’annullo. Per cui se il primo del mese si registra una transazione per 3 oggetti e 300 euro, e il 15 del mese una transazione negativa per 1 oggetto e 100 euro, il totale considerando un periodo uguale o superiore al 1-15 del mese sarà 2 oggetti e 200 euro, guardando invece solo l’1 o un suo intorno sempre 3 e 300 e guardando solo il 15 o un suo intorno sarà -1 e -100 (nel caso semplificato in cui non ci siano altre transazioni nel mese).

Alcuni prodotti di e-commerce integrano la possibilità di tracciare le transazioni con Analytics, facilitando la gestione, e alcuni di questi permettono nativamente la gestione di ordini negativi, quindi evitano di dover editare a mano file HTML.

Veniamo alla mia opinione: Brian Clifton nel suo libro sconsiglia l’uso delle transazioni negative, perché falsano la metrica del ritorno dell’investimento. Se investi in advertising una somma X e poi vendi per 10volte X il tuo ROI è quello, e inserendo i resi si modificherebbe falsando le tue decisioni sui prossimi investimenti.

Eppure bisogna anche considerare che indipendentemente da quanto investi, se torna indietro il 100% della merce è giusto che il tuo ROI sia zero: primo perché così sarai costretto a interrogarti sulla qualità dei tuoi prodotti, secondo perché forse non è il caso di puntare su una categoria di prodotti che non soddisfano il pubblico. Quando si tratterà di allocare il prossimo budget di web marketing, si potranno fare scelte più oculate.

Alla fine l’inserimento o meno delle transazioni negative è un’opportunità da considerare attentamente: se si stanno valutando le performance del sito e i ritorni degli investimenti pubblicitari, cioè se si analizza il sito in modo slegato dal mondo fisico, può avere ragione Clifton. Se si fa una valutazione più globale, che abbracci tutta la filiera – dall’acquisizione di un nuovo cliente alla sua soddisfazione finale col prodotto in mano – può sicuramente avere senso inserire le transazioni negative.

[photo credit: jaqian on flickr]


Aug 21 2008

funzioni: _trackTrans()

autore: Marco Cilia categoria: funzioni tag: ,

_trackTrans() è l’ultima funzione della serie e-commerce ed è l’equivalente di trackPageview(). Dopo che altre funzioni hanno raccolto i dati necessari, entrambe si occupano di spedire il contenuto ai server di Google, completando la transizione delle informazioni dai browser ai server collettori.
_trackTrans() va usata tipicamente in congiunzione con _addTrans() e _addItem(), ma sempre e comunque dopo la chiamata a trackPageview(), altrimenti non funzionerà. Per cui, riprendendo gli esempi dei post precedenti, una transazione tipica e completa avrà il seguente codice:


pageTracker._trackPageView();
pageTracker._addTrans(
     "12345", // id_ordine
     "libreria ponte vecchio", // affiliazione
     "35.99", // totale
     "3.00", // tasse
     "5.99", // spedizione
     "Palermo", // città
     "Sicilia", // area
     "Italia" // nazione
     );
pageTracker._addItem(
   "12345", // id_ordine
   "TA2676", //sku
   "GAin30sec", // nome
   "Libri", // categoria
   "35.99", // prezzo
   "1"  //quantità
 );
pageTracker._trackTrans();