竞争条件并同步使用Google Analytics异步(_gaq)

Owe*_*len 18 analytics google-analytics race-condition

我有一个使用Google Analytics更新的异步跟踪方法(_gaq)的网站.我遇到的问题是我想建立一些特定的链接跟踪,并担心我会创建一个竞争条件.

基本上,它是一个新闻网站,所以它有标题链接到各地的故事.故事的标题可能出现在页面上的3个不同位置,并出现在数百个其他页面上.因此,为了理解我们的受众如何与网站进行交互,我们必须跟踪每个特定标题块的使用方式,而不仅仅是目的地.由于这两个规定跟踪单个页面,跟踪引用页面是不够的,我们必须跟踪单个链接.

所以,如果我有一个链接.

<a href="http://www.blah.com" onclick="_gaq.push('_trackEvent','stuff')">Here</a>
Run Code Online (Sandbox Code Playgroud)

因为_gaq.push()是异步调用,所以在Google完成点击跟踪之前是否可能发生页面更改?如果是这样可以防止这种情况发生,或者我对Google AnalyticsAsync的运行方式存在误解(http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html).

Bri*_*ian 11

你是对的.如果浏览器在发送事件的GA跟踪信标(gif命中)之前离开页面,则不会记录该事件.然而,这对异步代码来说并不陌生,因为发送跟踪信标的过程是异步的; 在这方面,旧代码的工作方式相同.如果跟踪非常重要,您可以执行以下操作:

function track(link) {
  if (!_gat) return true;
  _gaq.push(['_trackEvent', 'stuff']);
  setTimeout(function() {location.href=link.href'}, 200);
  return false;
}

...

<a href="example.com" onclick="return track(this);"></a>
Run Code Online (Sandbox Code Playgroud)

如果已经加载了GA,这将阻止浏览器在单击链接时转到下一页(最好不要让用户等待那么久).然后它发送事件并等待200毫秒将用户发送到他们点击的链接的href.这增加了记录事件的可能性.您可以通过延长超时来提高可能性,但这也可能会损害用户体验.这是你必须要尝试的平衡.

  • 不.该检查的目的是确定GA是否已加载.如果您使用的是异步语法,则检查_gaq不会告诉您任何信息; 您可以在代码段中创建它.使用async时,只在ga.js执行时创建_gat,因此检查它会告诉您是否会立即发送跟踪信标. (2认同)
  • Google有一个关于此的文档:http://support.google.com/analytics/bin/answer.py?hl = zh-CN&answer = 1136920 (2认同)

Ale*_*ack 9

我也有这个问题,我决心找到一个真正的解决方案.

将函数推入队列怎么样?

  // Log a pageview to GA for a conversion
  _gaq.push(['_trackPageview', url]);
  // Push the redirect to make sure it happens AFTER we track the pageview
  _gaq.push(function() { document.location = url; });
Run Code Online (Sandbox Code Playgroud)