web-dev-qa-db-fra.com

Javascript Redirect avec Google Analytics

J'ai besoin d'aide pour savoir comment rediriger avec succès tout en incluant du code Analytics.

Le code pour ce fichier de redirection:

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

Cela fonctionne comme une redirection uniquement si je n'inclus pas mon code Analytics. J'ai essayé de déplacer le code sans changement.

QUESTION Comment puis-je ajouter une redirection, quelle qu'elle soit, tout en conservant le suivi avec Google Analytics?

J'ai essayé les redirections PHP sans succès et je suis presque certain que les redirections htaccess ne m'aideront pas, bien que je sois ouvert aux suggestions.

J'utilise une redirection JavaScript pour pouvoir continuer à suivre avec Google Analytics et également afficher un petit message ou créer une page personnalisée avec le délai.

Merci pour toute aide. Il n'est pas nécessaire que ce soit JS, toute contribution est la bienvenue si vous connaissez une solution.

35
TryTryAgain

Utiliser meta refresh a fonctionné comme un charme! Héritage FTW! Merci, 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: Je suis maintenant capable de rediriger tout en suivant ces redirections avec Google Analytics!

Meta Refresh (extrait de wikipedia

Exemples

Placez à l'intérieur pour actualiser la page après 5 secondes:

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

Rediriger vers http://example.com/ après 5 secondes:

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

Rediriger vers http://example.com/ immédiatement:

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

Remarque: _gaq.Push permet de placer des fonctions dans la file d'attente. Le code suivant doit être redirigé après 250 millisecondes (pour laisser le temps au pixel de suivi) après 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);
})();
42
mike

Si vous utilisez le nouveau code GA, vous pouvez simplement remplacer cette ligne ga('send', 'pageview'); par ce code:

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

Exemple complet: 

  (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";
  }
});
20
Jarrod

Je suggérerais de modifier votre code Google Analytics pour qu'il soit synchrone au lieu d'asychrone en le modifiant comme suit:

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

Cela devrait garantir qu'il s'exécutera avant que votre code de redirection n'entre en jeu et qu'il soit hors de portée de votre script de redirection afin d'éviter toute interférence. Comme vous l'avez maintenant, vous jouez à un jeu de devinettes pour savoir combien de temps le script GA prendra à charger et qu'il se chargera et fera son travail en moins de 3 secondes. Cela peut généralement être le cas, mais il n’ya aucune raison de le charger de manière asynchrone et de jouer à ce jeu. Chargez-le de manière synchrone et il fera son travail avant que votre redirection javascript ne se déclenche. 

Il pourrait même être possible de mettre la redirection directement après le code GA comme ceci et de réduire le temps d'affichage de votre page d'espace réservé:

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

Le code fourni par Mike fonctionne en effet. Cependant, j’ai constaté que la suppression de la minuterie fonctionnait entièrement. La demande __utm.gif est alors abandonnée, mais toutes les informations ont été envoyées. La fenêtre redirige simplement et n'attend pas la réponse (qui est simplement un statut 200). J'ai testé cela et il semble bien fonctionner. 

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);
})();
9
Ghans

Il est généralement déconseillé de mettre à jour les méta-actualités en raison de problèmes de convivialité (en particulier avec un délai court ou nul), mais en cas de repli pour les clients sans javascript, je pense que cela est parfaitement valable dans ce cas.

Si vous combinez l'appel synchrone ga.js avec une méta-actualisation, vous obtenez le meilleur des deux mondes: une redirection suivie presque instantanément si JS est activé; sinon, une redirection retardée mais toujours efficace (et un lien physique dans le corps au cas où tout le reste échouerait).

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

Il y a une bonne réponse ici: https://www.domsammut.com/code/setting-up-hitcallback-using-google-universal-analytics

En bref, vous le feriez en utilisant un événement et en utilisant la fonction hitCallback.

2
jamescridland

Cette approche ne nécessite pas de délai. Commencez par exécuter le code Google Analytics de manière synchrone, puis redirigez. 

<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>
0
Karthik Sankar