2012-01-01 37 views
35

Ho bisogno di aiuto per capire come reindirizzare correttamente includendo il codice di Analytics.Reindirizzamento Javascript con Google Analytics

Il codice per quel file reindirizzamento :

<head> 
<script type="text/javascript"> 
function delayedRedirect(){ 
    window.location = "https://market.android.com/developer?pub=Fractal%20Systems" 
} 
</script> 
<script type="text/javascript"> 

    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-1234567-8']); <!--I have my real ID there--> 
    _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> 
</head> 
<body onLoad="setTimeout('delayedRedirect()', 3000)"> 
<h2>ADW.BuuF.Theme is no more! You will be redirected to new and better apps in 3 seconds.</h2> 
</body> 
</html> 

Questo funziona come reindirizzamento solo se non includo il mio codice Analytics. Ho provato a spostare il codice senza modifiche.

DOMANDA Come posso aggiungere un reindirizzamento, di qualsiasi tipo, ed essere ancora in grado di tracciare con Google Analytics?

Ho provato i reindirizzamenti PHP senza successo e sono abbastanza sicuro che i reindirizzamenti htaccess non saranno di aiuto anche se sono aperto a suggerimenti.

Il motivo per cui sto utilizzando un reindirizzamento JavaScript è che posso continuare a monitorare con Google Analytics e anche mostrare un piccolo messaggio o creare una pagina personalizzata con il ritardo.

Grazie per qualsiasi aiuto. Non deve essere JS, per favore, qualsiasi input è benvenuto se si conosce una soluzione.

+1

hai provato a utilizzare il [meta refresh] (http://en.wikipedia.org/wiki/Meta_refresh)? – balexandre

risposta

6

Utilizzare meta refresh ha funzionato come un fascino! Legacy FTW! Grazie, @Balexandre

<html> 
<head> 
<meta http-equiv="refresh" content="5; url=https://market.android.com/developer?pub=Fractal%20Systems"> 
<script type="text/javascript"> 

    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-1234567-8']); 
    _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> 
</head> 
<body> 
<h2>ADW.BuuF.Theme is no more! You will be redirected to new and better apps in 5 seconds.</h2> 
</body> 
</html> 

RECAP: sono ora in grado di reindirizzare, mentre il monitoraggio quei redirect utilizzando Google Analytics!

Meta Refresh (Tratto da wikipedia)

Esempi

posto all'interno di aggiornare la pagina dopo 5 secondi:

<meta http-equiv="refresh" content="5"> 

reindirizzare a http://example.com/ dopo 5 secondi:

<meta http-equiv="refresh" content="5; url=http://example.com/"> 

Reindirizza a http://example.com/ subito:

<meta http-equiv="refresh" content="0; url=http://example.com/"> 
+0

qualche idea su come reindirizzare velocemente (e non 5s)? –

+0

@DS_web_developer Questa soluzione ha funzionato per me, si potrebbe provare e semplicemente cambiare il valore 'content = 5' in qualcos'altro, ma questo non è il più robusto ... dovresti usare http://stackoverflow.com/a/ 8692588/805031 – TryTryAgain

14

Io suggerirei di cambiare il vostro codice di Google Analytics per essere sincrono invece che asincrono modificando a questo:

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-1234567-8']); 
    _gaq.push(['_trackPageview']); 
</script> 
<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script> 

Questo dovrebbe garantire che venga eseguito prima che i calci codice di reindirizzamento in e dovrebbe essere fuori mano dal tuo script di reindirizzamento, quindi non ci sono interferenze. Come ora, stai giocando a indovinare per quanto tempo ci vorrà per caricare lo script di GA e che caricherà e farà il suo lavoro in meno di 3 secondi. Di solito è il caso, ma non c'è motivo di caricarlo in modo asincrono come te e devi giocare a quel gioco. Caricalo in modo sincrono e farà il suo lavoro prima che il tuo reindirizzamento javascript si attivi.

Potrebbe anche essere possibile mettere solo il redirect direttamente dopo il codice GA come questo e ridurre al minimo il tempo in cui viene visualizzata la pagina segnaposto:

<script type="text/javascript"> 
    var _gaq = _gaq || []; 
    _gaq.push(['_setAccount', 'UA-1234567-8']); 
    _gaq.push(['_trackPageview']); 
</script> 
<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script> 
<script type="text/javascript"> 
    window.location = "https://market.android.com/developer?pub=Fractal%20Systems"; 
</script> 
+0

Grazie, funziona con tutti i metodi di reindirizzamento che ho provato. Buono a sapersi. – TryTryAgain

42

Nota: _gaq.push permette spinta delle funzioni nella coda. Il codice seguente dovrebbe reindirizzare dopo 250 millisecondi (per dare tempo al pixel di tracciamento) dopo il _trackPageview:

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-1234567-8']); 
_gaq.push(['_trackPageview']); 
_gaq.push(function() { 
    setTimeout(function() { 
     window.location = "https://market.android.com/developer?pub=Fractal%20Systems"; 
    }, 250); 
}); 

(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); 
})(); 
+2

Risposta perfetta. Potresti aggiungere un semplice link di testo all'URL di reindirizzamento nel corpo del testo, in modo che gli utenti senza javascript possano raggiungere l'URL di reindirizzamento. Inoltre, il documento di riferimento di Google con la sezione sulle funzioni di spinta può essere trovato qui: https://developers.google.com/analytics/devguides/collection/gajs/# PushingFunctions – kontur

+0

Non sono convinto che tu abbia bisogno di un timeout - la richiesta dell'immagine dovrebbe sempre uscire prima del reindirizzamento - non importa se il client non riceve mai dati indietro –

+0

@Simon_Weaver Ha convenuto che non è importante che il client non riceva mai alcun dato, ma sembra (almeno con Chrome e Firefox) che il browser non effettui la richiesta di pixel di tracciamento se la finestra cambia troppo rapidamente dopo l'avvio della richiesta. Google ha persino una nota sull'utilizzo di un ritardo, ma il loro codice non è aggiornato, mescolando le analisi di sincronizzazione e stile asincrono. – mike

2

Meta refresh è generalmente scoraggiato a causa di problemi di usabilità (specialmente con una breve, o nessun ritardo), ma come a fallback per i client senza javascript Penso che sia perfettamente valido in questo caso.

Se si combinano la chiamata sincrona ga.js con un meta refresh si ottiene il meglio di entrambi i mondi: un reindirizzamento quasi istantaneo tracciato se JS è abilitato; un reindirizzamento ritardato ma comunque efficace se non (e un hard link nel corpo nel caso in cui tutto il resto fallisca).

<html> 
<head> 
    <!--For JS disabled: decent delay, both for usability and to allow plenty of time for JS to work if enabled --> 
    <meta http-equiv="refresh" content="5;https://market.android.com/developer?pub=Fractal%20Systems"/> 
    <script> 
     var _gaq = _gaq || []; 
     _gaq.push(['_setAccount', 'UA-1234567-8']); 
     _gaq.push(['_trackPageview']); 
    </script> 
    <!--Synchronous call to ensure tracking fires before JS redirect--> 
    <script type="text/javascript" src="//www.google-analytics.com/ga.js"></script> 
    <script> 
     /* if JS is enabled this will normally fire well before the meta refresh delay ends: an almost instantaneous redirect */ 
     window.location="https://market.android.com/developer?pub=Fractal%20Systems"; 
    </script> 
</head> 
<body> 
    <!-- Include a hard link in case both js and the meta refresh fail --> 
    <p>Redirecting you to <a href="https://market.android.com/developer?pub=Fractal%20Systems">https://market.android.com/developer?pub=Fractal%20Systems</a></p> 
</body></html> 
-1

penso che forse basta usare il metodo di jQuery pronto in modo da non far partire il timer fino a che la pagina viene caricata completamente ...

<script type="text/javascript" charset="utf-8"> 
$(document).ready(function() {  
    setTimeout(function() { 
     //alert("redirecting!"); 
     window.location = '<?= $url ?>'; 
    }, 3000); 
}); 
</script> 
+1

L'utilizzo di jQuery in questo caso è molto oneroso e, soprattutto, non necessario. –

9

davvero il code provided di Mike opere. Tuttavia, ho scoperto che la rimozione del timer funziona perfettamente. La richiesta __utm.gif viene quindi annullata, ma tutte le informazioni sono state inviate. La finestra si limita a reindirizzare e non attende la risposta (che è semplicemente uno stato 200). Ho provato questo e sembra funzionare bene.

var _gaq = _gaq || []; 
_gaq.push(['_setAccount', 'UA-1234567-8']); 
_gaq.push(['_trackPageview']); 
_gaq.push(function() { 
    window.location = "https://market.android.com/developer?pub=Fractal%20Systems"; 
}); 


(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); 
})(); 
+0

Questa soluzione funziona perfettamente ... ma se un utente ha JavaScript disabilitato, GA non solo non funzionerà, ma anche la pagina non verrà reindirizzata? Sarebbe meglio avere un reindirizzamento 'meta' dopo questo script, per ogni evenienza? – user1997781

20

Se si sta utilizzando il nuovo codice GA si può semplicemente sostituire questa linea ga('send', 'pageview'); con questo codice:

ga('send', 'pageview', { 
    'hitCallback': function() { 
     window.location = "http://www.your-site.com"; 
    } 
}); 

Esempio per intero:

(function(i,s,o,g,r,a,m){ 
    i['GoogleAnalyticsObject']=r; 
    i[r]=i[r]||function() { 
     (i[r].q=i[r].q||[]).push(arguments) 
    },i[r].l=1*new Date(); 
    a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0]; 
    a.async=1; 
    a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

ga('create', 'UA-xxxxxxx-2', 'auto'); 

ga('send', 'pageview', { 
    'hitCallback': function() { 
     window.location = "http://www.your-site.com"; 
    } 
}); 
+0

auto dovrebbe essere quotato – Tosh

+0

@Tosh Hai ragione. Fatto, grazie. – Jarrod

0

Questo approccio non richiede un ritardo. Esegui prima il codice google analytics in modo sincrono e poi reindirizza.

<html> 
<head> 
<script src="//www.google-analytics.com/analytics.js"></script> 
    <script> 
    var tracker = ga.create('UA-xxxxxxxx-x', 'auto'); 
    tracker.send('pageview'); 
    window.location='http://your-url.com'; 
    </script> 
</head> 
<body> 
</body> 
</html>