Javascriptredirect与谷歌分析

我需要帮助了解如何在包含Google Analytics代码的情况下成功redirect。

  • 我有一个子域设置http://buuf.fractalsystems.org
  • 该子域实际上只是一个子文件夹http://fractalsystems.org/buuf
  • 我有一个HTML文件在该子文件夹redirect到https://market.android.com/developer?pub=Fractal%20Systems

该redirect文件的代码:

<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(分析)代码时,此function才能用作redirect。 我试着移动代码,没有改变。

问题如何添加任何types的redirect,并仍然可以使用Google Analytics进行跟踪?

我试过PHPredirect没有成功,我很确定htaccessredirect不会帮助,虽然我打开的build议。

我使用JavaScriptredirect的原因是,我可以继续跟踪Google Analytics(分析),并显示一条消息或延迟创build一个自定义页面。

谢谢你的帮助。 如果您知道解决scheme,请不必是JS,欢迎任何意见。

注意: _gaq.push允许将函数推送到队列中。 下面的代码应该在_trackPageview之后250毫秒后redirect(以允许跟踪像素的时间):

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

如果您使用新的GA代码,则可以简单地replace此行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','analytics.js','ga'); ga('create', 'UA-xxxxxxx-2', 'auto'); ga('send', 'pageview', { 'hitCallback': function() { window.location = "http://www.your-site.com"; } }); 

我build议将您的Google Analytics代码更改为同步而不是asynchronous:

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

这应该保证它在你的redirect代码开始运行之前运行,它应该是你的redirect脚本的方式,所以没有干扰。 就像你现在所做的那样,你正在玩一个猜测游戏,GA脚本将会加载多长时间,并且会在3秒钟之内加载并完成它的工作。 通常情况可能是这样,但是没有理由像你一样asynchronous加载它,并且必须玩这个游戏。 加载它同步,它会做你的JavaScriptredirect火灾之前的工作。

甚至可以直接在GA代码之后直接插入redirect,并最小化占位页面的显示时间:

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

Mike 提供的代码确实有效。 但是,我发现删除计时器完全可以工作。 __utm.gif请求然后被中止,但所有的信息已被发送。 该窗口只是redirect,并不等待答复(这只是一个200状态)。 我testing了这个,它似乎很好地工作。

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

使用元刷新工作就像一个魅力! 遗产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跟踪这些redirect的同时redirect。

元刷新(摘自维基百科 )

例子

放置5秒后刷新页面:

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

5秒后redirect到http://example.com/

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

立即redirect到http://example.com/

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

通常不鼓励元刷新,因为可用性问题(特别是短暂的,或者没有延迟),但是作为没有JavaScript的客户端的回退 ,我认为在这种情况下它是完全有效的。

如果同步ga.js调用与元刷新相结合,则可以得到两全其美的效果:如果启用了JS,则几乎是即时的跟踪redirect; 如果不是,则延迟但仍然有效的redirect(以及在所有其他情况都失败的情况下,在主体中的硬链接)。

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

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

总之,你可以使用事件来实现,并使用hitCallback函数。

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

 <html> <head> <script src="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> 

我想也许只是使用jQuery的准备方法,所以它不会启动计时器,直到页面完全加载…

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