JavaScript rediriger avec Google Analytics

J'ai besoin d'aide pour savoir comment rediriger avec succès tout en incluant le code D'analyse.

Le code de 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 un rediriger uniquement si je n'inclue pas mon code D'analyse. J'ai essayé de déplacer le code sans changement.

QUESTION Comment puis-je ajouter une redirection, de toute nature, et être toujours en mesure de suivre avec Google Analytics?

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

La raison pour laquelle j'utilise une redirection JavaScript est que je peux continuer à suivre avec Google Analytics et aussi montrer un petit message ou faites une page personnalisée avec le délai.

Merci pour toute aide. Ne doit pas être JS, s'il vous plait, toute entrée est la bienvenue si vous connaissez une solution.

35
demandé sur TryTryAgain 2012-01-01 13:12:56

9 réponses

Remarque: _gaq.push permet de pousser 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 _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
répondu mike 2012-12-24 06:09:49

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
répondu Jarrod 2014-10-12 22:42:29

Je suggère de changer votre code Google Analytics pour qu'il soit synchrone au lieu d'asychronous en le changeant à ceci:

<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écute avant que votre code de redirection entre en jeu et qu'il devrait être hors de votre script de redirection afin qu'il n'y ait pas d'interférence. Comme vous l'avez maintenant, vous jouez à un jeu de devinettes pour combien de temps le script GA prendra à charger et qu'il va charger et faire son travail en moins de 3 secondes. Cela peut généralement être le cas, mais il n'y a pas raison de le charger de manière asynchrone comme vous l'êtes 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 simplement mettre la redirection directement après le code GA comme ceci et de minimiser le temps que votre page d'espace réservé est affichée:

<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
répondu jfriend00 2012-01-01 10:32:26

Le code par Mike fonctionne effectivement. Cependant, j'ai trouvé que la suppression de la minuterie fonctionne entièrement aussi bien. Le _ _ utm.la demande gif est alors abandonnée, mais toutes les informations ont été envoyées. La fenêtre redirige juste et n'attend pas la réponse (qui est simplement un statut 200). J'ai testé cela et il semble fonctionner 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);
})();
9
répondu Ghans 2017-05-23 12:34:33

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>

Récapituler: je suis maintenant en mesure de rediriger tout en suivant ces redirections en utilisant Google Analytics!

Meta Refresh (extrait de wikipedia )

Exemples

Placer à 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
répondu TryTryAgain 2012-01-01 09:36:30

Meta refresh est généralement déconseillé en raison de problèmes d'utilisabilité (en particulier avec un court délai ou sans délai), mais en tant que fallback pour les clients sans javascript, je pense que c'est parfaitement valide dans ce cas.

Si vous combinez Le ga synchrone.appel js avec un meta refresh vous obtenez le meilleur des deux mondes: une redirection presque instantanée et suivie si JS est activé; une redirection retardée mais toujours efficace sinon (et un lien dur dans le corps juste au cas où tout le reste échouer).

<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
répondu CfSimplicity 2012-03-10 10:58:23

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 vous utilisez la fonction hitCallback.

2
répondu jamescridland 2014-06-25 14:14:05

Cette approche ne nécessite pas de retard. Exécutez d'abord 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
répondu Karthik Sankar 2016-02-27 15:08:40

Je pense peut-être utiliser la méthode jQuery ready pour ne pas démarrer la minuterie tant que la page n'est pas complètement chargée...

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {       
    setTimeout(function() {
        //alert("redirecting!");
        window.location = '<?= $url ?>';
    }, 3000);
});
</script>
-1
répondu John Peterson 2012-03-27 10:10:42