2012-01-01 14 views
35

Necesito ayuda para saber cómo redirigir éxito, mientras incluyendo el código de Analytics.redireccionamiento de JavaScript con Google Analytics

El código para ese archivo de redirección :

<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> 

Esto funciona como una redirección solo si no incluyo mi código de Analytics. Intenté mover el código sin cambios.

PREGUNTA ¿Cómo puedo agregar un redireccionamiento, de cualquier tipo, y seguir siendo capaz de rastrear con Google Analytics?

He intentado redirigir PHP sin éxito y estoy bastante seguro de que las redirecciones de htaccess no servirán de ayuda, aunque estoy abierto a sugerencias.

La razón por la que estoy usando un redireccionamiento de JavaScript es para poder seguir rastreando con Google Analytics y también mostrar un pequeño mensaje o hacer una página personalizada con el retraso.

Gracias por cualquier ayuda. No tiene que ser JS, por favor, cualquier aportación es bienvenida si conoce una solución.

+1

¿Intentó utilizar el [meta refresh] (http://en.wikipedia.org/wiki/Meta_refresh)? – balexandre

Respuesta

6

Usando meta refresh trabajó como un encanto! ¡FTW heredado! Gracias, @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> 

CRÓNICA: ahora soy capaz de redirigir las redirecciones mientras que el seguimiento con Google Analytics!

Meta Refresh (Tomado de wikipedia)

Ejemplos

lugar en el interior para actualizar la página después de 5 segundos:

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

redirigir a http://example.com/ después de 5 segundos:

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

Redirigir a http://example.com/ inmediato:

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

alguna idea de cómo redirigir rápido (y no 5s)? –

+0

@DS_web_developer Esta solución funcionó para mí, puedes probar y simplemente cambiar el valor 'content = 5' por otra cosa, pero esa no es la más robusta ... debes usar http://stackoverflow.com/a/ 8692588/805031 – TryTryAgain

14

yo sugeriría cambiar el código de Google Analytics para ser sincrónica en lugar de asíncrono cambiándola a esto:

<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> 

Esto debería garantizar que se ejecute antes de que sus patadas código de redirección en y debería estar fuera del camino de su script de redirección para que no haya interferencia. Como lo tienes ahora, estás jugando a un juego de adivinanzas por cuánto tiempo tardará la secuencia de comandos GA en cargarse y se cargará y hará su trabajo en menos de 3 segundos. Ese suele ser el caso, pero no hay ninguna razón para cargarlo de manera asincrónica como tú y tienes que jugar ese juego. Cargúelo sincrónicamente y hará su trabajo antes de que su javascript redirija los incendios.

Incluso podría ser posible sólo hay que poner la redirección directamente después del código de GA como este y minimizar el tiempo de visualización de la página de marcador de posición:

<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

Gracias, eso funciona con todos los métodos de redirección que he probado. Bueno saber. – TryTryAgain

42

Nota: _gaq.push permite empujar de funciones en la cola. El siguiente código debe redirigir después de 250 milisegundos (para dar tiempo para el píxel de seguimiento) después de la _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

Respuesta perfecta. Puede agregar un enlace de texto simple a la url de redirección en el texto del cuerpo, de modo que los usuarios sin javascript puedan llegar a la url de redirección. Además, el documento de referencia de google con la sección sobre funciones de empuje se puede encontrar aquí: https://developers.google.com/analytics/devguides/collection/gajs/# PushingFunctions – kontur

+0

No estoy seguro de que necesite un tiempo de espera - la solicitud de la imagen siempre debería estar desactivada antes de la redirección - no importa si el cliente nunca recibe ningún dato devuelto –

+0

@Simon_Weaver Estuvo de acuerdo en que no es importante que el cliente nunca reciba datos, pero parece (al menos con Chrome y Firefox) que el navegador no solicitará el píxel de seguimiento si la ventana cambia demasiado rápido después de que se inicia la solicitud. Google incluso tiene una nota sobre el uso de un retraso, pero su código está arruinado, mezclando sincronización y análisis de estilo asíncrono. – mike

2

actualización Meta general se desaconseja debido a preocupaciones de usabilidad (especialmente con un corto, o ningún retraso), pero como a fallback para clientes sin javascript, creo que es perfectamente válido en este caso.

Si combina combine la llamada síncrona ga.js con metarefreservación obtiene lo mejor de ambos mundos: una redirección rastreada casi instantánea si JS está habilitado; una redirección retrasada pero aún efectiva si no es así (y un enlace rígido en el cuerpo por si acaso todo lo demás falla).

<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

Creo que tal vez sólo tiene que utilizar el método jQuery listo para que no se inicie el contador de tiempo hasta que la página se ha cargado completamente ...

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

El uso de jQuery en este caso es muy costoso y, sobre todo, innecesario. –

9

Los code provided por Mike obras de hecho. Sin embargo, descubrí que eliminar el temporizador funciona completamente también. La solicitud __utm.gif se cancela, pero se ha enviado toda la información. La ventana simplemente redirige y no espera la respuesta (que simplemente es un estado de 200). Probé esto y parece estar funcionando muy bien.

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

Esta solución funciona maravillosamente ... pero si un usuario tiene JavaScript desactivado, GA no solo no funcionará, ¿pero la página no se redireccionará también? ¿Sería mejor tener una redirección 'meta' después de este script, por si acaso? – user1997781

20

Si está utilizando el nuevo código de GA puede simplemente reemplazar esta línea ga('send', 'pageview'); con este código:

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

Ejemplo completo:

(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 debe ser cotizado – Tosh

+0

@Tosh Tienes razón. Hecho, gracias. – Jarrod

0

Este enfoque no requiere un retraso. Primero ejecuta el código de Google Analytics sincrónicamente y luego redirigirlo.

<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>