2013-04-02 11 views
10

Posso inviare un evento di Google Analytics e spostarmi immediatamente, in questo modo?Invio di eventi di Google Analytics, quindi navigazione immediata

_gaq.push(['_trackEvent', 'foobar']); 
window.location = "/"; 

Se Google Analytics fa un certo tipo di richiesta AJAX quando questo è chiamato quindi dovrebbe funzionare se restiamo sulla pagina o no. La mia preoccupazione è che a volte potrebbe essere solo mettere roba in un array per l'elaborazione successiva. Penso che ciò accada inizialmente, quando Google Analytics non ha ancora avuto il tempo di essere inizializzato, ma mi piacerebbe esserne certo.

Ho eseguito un test con il debug di GA e sembra che abbia funzionato, ma non sono sicuro che ciò significhi sempre in base alla velocità di caricamento e cosa no.

Posso fare questo e non perdere mai nessun evento?

risposta

7

Il modo in cui l'ho fatto è in questo modo:

_gaq.push(['_trackEvent', '...', '...', '...']); 
_gaq.push(function(){ 
    // do stuff here 
}); 

$('#logo').on('click', function(){ 
    var curPage = window.location.href; 
    _gaq.push(['_trackEvent', curPage, '#logo']); 
    _gaq.push(function(){ 
     window.location.href = '/'; 
    }); 
}); 

La seconda chiamata push sarà sempre eseguito dopo il primo, perché Google code di tutti spingono le chiamate, in modo che il primo verrà eseguito e completa , quindi il secondo verrà eseguito e completato. Google ti consente di inserire funzioni nel metodo push in modo da poterle accodare.

Fonte: https://developers.google.com/analytics/devguides/collection/gajs/#PushingFunctions

+0

Esattamente quello che stavo cercando. Grazie! –

+0

Assicurati di fare molti test quando provi questo.Solo perché la chiamata _trackEvent _gaq.push è stata restituita non significa che i dati siano stati registrati. Internamente, viene utilizzata una richiesta di immagini asincrone per inviare i dati, e dipende dalla fase in cui si trova la richiesta quando la pagina viene abbattuta per la nuova pagina. – mike

+0

Ho pensato che se _gaq.push() ha effettivamente inviato la richiesta, non importa se ho proceduto subito dopo - perché una volta inviata la richiesta, il browser non ha bisogno di fare altro, vero? A meno che non ci sia stato un errore nell'invio del tracciamento, ma probabilmente sarebbe stato comunque rotto, indipendentemente dal fatto che io abbia reindirizzato o meno. –

0

Sembra che la preoccupazione relativa alla perdita dell'evento sia legittima, vedere this question. One answer sembra un po 'fragile per quanto riguarda la modifica del codice da parte di Google, ma ti consentirebbe di confermare il monitoraggio degli eventi prima di passare al link. Probabilmente sarebbe "quasi immediato".

5

posso aggiungere un leggero ritardo (via setTimeout) se la nuova pagina non viene aperto in una nuova finestra.

Non ho ancora avuto la possibilità di provare questo, ma il nuovo Universal Analytics di Google ha una funzione hitCallback che viene eseguita dopo che i dati sono stati inviati.

+0

Wow, questo è eccellente e realizzato esattamente per quello scopo. Grazie mille per il link! –

1

@mike menzioni hitCallback metodo che è descritto in analytics.js documentazione:

In alcuni casi, come quando si traccia link in uscita, si potrebbe desiderare di sapere quando il tracker è fatto l'invio dei dati. In questo modo puoi inviare un utente a destinazione solo dopo che il clic è stato segnalato a Google Analytics. Per risolvere questo problema, il comando send consente di specificare una funzione hitCallback nell'oggetto nome campo che verrà eseguita non appena analytics.js ha completato l'invio dei dati.

che è fantastico, tranne il frammento è ancora in beta pubblica. Se per qualche motivo (ahem politiche tecnofobiche ahem) si è limitato alla funzionalità ga.js, è possibile utilizzare this workaround:

_gaq.push(['_set', 'hitCallback', function(){ 
    document.location='someOtherPage.html'; 
}]); 
_gaq.push(['_trackEvent', 'category', 'event', 'value']); 

Un altro suggerimento sensato è quello di avere un ripiego per avere la richiamata eseguita immediatamente se _gaq non è definito.

Problemi correlati