Redirección de Javascript con Google Analytics
redirect google-analytics (9)
Necesito ayuda para descubrir cómo redirigir correctamente al incluir código de Analytics.
- Tengo una configuración de subdominio http://buuf.fractalsystems.org
- El subdominio es en realidad solo una subcarpeta http://fractalsystems.org/buuf
- Tengo un archivo HTML en esa subcarpeta que redirige a https://market.android.com/developer?pub=Fractal%20Systems
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 un redireccionamiento 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 todavía puedo seguir con Google Analytics?
Probé los redireccionamientos de PHP sin éxito y estoy seguro de que los redireccionamientos 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 el seguimiento con Google Analytics y también mostrar un pequeño mensaje o crear 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.
Aquí hay una buena respuesta: https://www.domsammut.com/code/setting-up-hitcallback-using-google-universal-analytics
En resumen, lo harías usando un evento, y usarás la función hitCallback.
Creo que tal vez solo use el método jquery ready para que no inicie el temporizador hasta que la página esté completamente cargada ...
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
setTimeout(function() {
//alert("redirecting!");
window.location = ''<?= $url ?>'';
}, 3000);
});
</script>
El código provisto por funciona 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);
})();
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>
Le sugiero que cambie su código de Google Analytics para que sea sincrónico en lugar de asíncrono al cambiarlo a este:
<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 ejecuta antes de que su código de redirección se active y debería estar fuera del camino de su secuencia de comandos 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 colocar el redireccionamiento directamente después del código GA como este y minimizar el tiempo que se muestra 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>
Meta refresh generalmente se desaconseja debido a problemas de usabilidad (especialmente con un retraso corto, o sin demora), pero como una alternativa para los clientes que no tienen javascript, creo que es perfectamente válido en este caso.
Si combina la llamada síncrona ga.js con una meta actualización, obtendrá 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>
Nota: _gaq.push
permite presionar las funciones en la cola. El siguiente código debe redirigirse después de 250 milisegundos (para dar tiempo al píxel de seguimiento) después de _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);
})();
Si está utilizando el nuevo código GA, simplemente puede 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";
}
});
Usar meta refresh funcionó 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>
RECUPERAR: ¡Ahora puedo redireccionar mientras sigo esos redireccionamientos usando Google Analytics!
Meta Refresh (tomado de wikipedia )
Ejemplos
Coloque adentro 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/ inmediatamente:
<meta http-equiv="refresh" content="0; url=http://example.com/">