使用Google Analytics进行Javascript重定向

时间:2012-01-01 09:12:56

标签: javascript redirect google-analytics subdomain subdirectory

我需要帮助确定如何在包含Google Analytics代码的同时成功重定向。

该重定向文件的代码:

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

仅当我不包含我的Google Analytics代码时,它才能用作重定向。我试过移动代码而没有任何改变。

问题 如何添加任何类型的重定向,并且仍然可以使用Google Analytics进行跟踪?

我已经尝试过PHP重定向但没有成功,我很确定htaccess重定向不会有帮助,尽管我愿意接受建议。

我使用JavaScript重定向的原因是,我可以继续使用Google Analytics进行跟踪,并显示一些消息或制作带有延迟的自定义页面。

感谢您的帮助。如果您知道解决方案,请不要成为JS。

9 个答案:

答案 0 :(得分:42)

注意:_gaq.push允许将函数推送到队列中。以下代码应在_trackPageview之后250毫秒(以便为跟踪像素留出时间)后重定向:

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

答案 1 :(得分:20)

如果您使用新的GA代码,只需使用以下代码替换此行ga('send', 'pageview');

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

完整示例:

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

答案 2 :(得分:14)

我建议您将Google Analytics代码更改为同步而非异步,方法是将其更改为:

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

这应该保证它在您的重定向代码启动之前运行,它应该不受重定向脚本的影响,因此不会产生干扰。正如你现在所拥有的那样,你正在玩一个猜测游戏,考虑GA脚本加载需要多长时间,并且它将在3秒内加载并完成它的工作。通常可能是这种情况,但没有理由像你一样异步加载它并且必须玩那个游戏。同步加载它,它将在你的javascript重定向触发之前完成它的工作。

甚至可以直接将重定向放在GA代码之后,并最小化占位符页面显示的时间:

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

答案 3 :(得分:9)

code provided Mike确实有效。但是,我发现移除计时器完全有效。然后中止__utm.gif请求,但所有信息都已发送。窗口只是重定向,不等待回复(这只是一个200状态)。我对此进行了测试,看起来效果很好。

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

答案 4 :(得分:6)

使用meta refresh就像魅力一样!遗产FTW!谢谢,@ 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:我现在可以在使用Google Analytics跟踪这些重定向时进行重定向!

元刷新(取自wikipedia

实施例

在5秒后放入内部刷新页面:

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

5秒后重定向到http://example.com/

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

立即重定向到http://example.com/

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

答案 5 :(得分:2)

由于可用性问题(特别是短暂或无延迟),通常不鼓励元刷新,但对于没有javascript的客户端,我认为它非常有效。 p>

如果你结合同步ga.js调用与元刷新,你将获得两全其美:如果启用了JS,几乎是即时的,跟踪的重定向;如果没有延迟但仍然有效的重定向(以及身体中的硬链接以防所有其他方法都失败)。

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

答案 6 :(得分:2)

这里有一个很好的答案: https://www.domsammut.com/code/setting-up-hitcallback-using-google-universal-analytics

简而言之,您可以使用事件来执行此操作,并使用hitCallback函数。

答案 7 :(得分:0)

这种方法不需要延迟。首先同步执行谷歌分析代码,然后重定向。

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

答案 8 :(得分:-1)

我想也许只是使用jquery ready方法,所以在页面完全加载之前它不会启动计时器......

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