使用本地存储和Google Analytics进行AB测试

Jac*_*ham 8 javascript google-analytics

我正在我的电子商务网站上运行全站点AB测试.访问者登陆后,我为他们分配了一个本地存储密钥/值:

function isLocalStorageNameSupported() {
  var testKey = 'test', storage = window.localStorage;
  try {
    storage.setItem(testKey, '1');
    storage.removeItem(testKey);
    return true;
  } catch (error) {
    return false;
  }
}

$(function() {

  if(isLocalStorageNameSupported()){
      var version = Cookies.get("version");

      if (version == null) {

        if (Math.random() >= 0.5){
            Cookies.set("version", "A");  
            var version = "A"
        }else{
            Cookies.set("version", "B");  
            var version = "B"
        }

        ga('create', 'UA-XXXXXXXX-1', 'auto');
        ga('send', {
          hitType: 'event',
          eventCategory: 'Pricing Experiment',
          eventAction: 'New Unique Visit',
          eventLabel: version,
          eventValue: 0
        });       
    } 
  } 



});
Run Code Online (Sandbox Code Playgroud)

访问者签出后,我会检查他们所在的版本并发送另一个Google Analytics事件.

我的结帐转换事件正好显示出来.但我只获得了大约25%的"新独特访问"活动.Google Analytics(分析)显示了12000次访问该网站,但我只有3000次自定义活动.

我的代码的哪一部分导致了这种差异,如何在所有访问中触发事件?

Gre*_*kes 4

这有点盲目,因为我运行了你的代码并且每次都会触发事件(我假设你的Cookies对象/函数正在工作),但我想知道 12,000 数字是否可能不正确...

这里的代码片段是否正是您网站正在运行的代码片段?您将 GA 浏览量发送到哪里?我之所以这么问,是因为我发现该活动是在您的create活动结束后立即进行的。我看到的另一个潜在的报告问题是该事件是交互式的 - 这意味着如果您也发送综合浏览量(我假设您是),它会影响您的跳出率。

当您说 12,000 次访问时,具体指什么指标?会议?

在综合浏览量之前发送事件还会为您提供一堆(not set)着陆页维度。这意味着该事件不会与任何登陆页面关联,并且当发送综合浏览量时,它也会增加您的用户计数...因此,如果您看到的用户多于会话,则表明这是一个问题。

一些值得尝试的事情:

  • 在活动之前发送综合浏览量。
  • 使用 将该事件设置为非交互事件{nonInteraction: true}
  • 我要做的另一件事是只将事件放在条件内 -create无论本地存储条件如何,页面视图发送都应该始终发生。
  • 编辑:您还在等待 DOM 准备好create。我会将其移至标签,<head>以便该事件是唯一等待文档准备好的事情。

<head>
    <script>
	    //Your preferred method of loading analytics.js here...
	    ga('create', 'UA-XXXXXXXX-1', 'auto');		
	    ga('send', 'pageview');
    </script>
</head>
Run Code Online (Sandbox Code Playgroud)

function isLocalStorageNameSupported() {
	var testKey = 'test', storage = window.localStorage;
	try {
		storage.setItem(testKey, '1');
		storage.removeItem(testKey);
		return true;
	} catch (error) {
		return false;
	}
}

$(function() {
	
	if(isLocalStorageNameSupported()){
		var version = Cookies.get("version");
		if (version == null) {
			if (Math.random() >= 0.5){
				Cookies.set("version", "A");  
				var version = "A"
			}else{
				Cookies.set("version", "B");  
				var version = "B"
			}
			
			ga('send', 'event', 'Pricing Experiment', 'New Unique Visit', version, 0, {nonInteraction: true});			
		} 
	} 

});
Run Code Online (Sandbox Code Playgroud)

看看这是否能让您的指标更加接近,然后考虑这种跟踪数据的替代方法:

也许在这里举办活动并不是最好的解决方案。您正在做的事情听起来像是使用用户范围内的自定义维度的绝佳候选者。

我建议创建一个名为“定价实验”的自定义维度,其范围为用户(因为使用 GA 实验,用户在连续会话中总是会看到相同的变化),然后在您的create函数之后,将事件替换为 ga('set', 'dimension1', version);:(请务必替换dimension1为您的实际号码。

最后,设置维度后发送综合浏览量(自定义维度使用命中类型传输到GA)。

<head>
	<script>
		//Your preferred method of loading analytics.js here...
		ga('create', 'UA-XXXXXXXX-1', 'auto');
		
		if(isLocalStorageNameSupported()){
			var version = Cookies.get("version");
			if (version == null) {
				if (Math.random() >= 0.5){
					Cookies.set("version", "A");  
					var version = "A"
				}else{
					Cookies.set("version", "B");  
					var version = "B"
				}
				
				ga('set', 'dimension1', version);			
			} 
		} 
		
		ga('send', 'pageview');
		
		function isLocalStorageNameSupported() {
			var testKey = 'test', storage = window.localStorage;
			try {
				storage.setItem(testKey, '1');
				storage.removeItem(testKey);
				return true;
			} catch (error) {
				return false;
			}
		}
		
	</script>
</head>
Run Code Online (Sandbox Code Playgroud)

现在,当您查看任何其他报告时,您可以应用“定价实验”的辅助维度,并且您将能够显示他们看到的版本。

通过这种方式,您将能够获取上下文数据,而不会弄乱会改变报告指标的命中类型。

再次,如果这不能完全说明您的问题,我深表歉意 - 我将逐字逐句地获取您提供的片段并尽我所能填写任何空白。