使用本地存储和谷歌分析进行 AB 测试



我正在我的电子商务网站上运行全站范围的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
});       
} 
} 

});

访客结账后,我会检查他们使用的是哪个版本,并发送另一个Google Analytics事件。

我的结账转化事件显示正常。但我只获得了大约25%的"新独特访问"事件。分析显示该网站有 12000 次访问,但我只有 3000 次自定义事件。

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

这有点黑暗,因为我运行了您的代码并且每次都会触发事件(我假设您的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>

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

看看这是否会使您的指标更紧密地结合在一起,然后考虑这种跟踪数据的替代方法:

也许这里的活动完全不是最好的解决方案。您正在执行的操作听起来像是使用范围限定为用户的自定义维度的绝佳候选项。

我建议创建一个名为"定价实验"的自定义维度,范围为用户(因为对于 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>

现在,当您查看任何其他报告时,都可以应用"定价实验"的次级维度,这样您就可以显示他们看到的版本。

这样,您就可以获取上下文数据,而不会弄乱会更改报告指标的匹配类型。

再次,如果这不能完美地阐明您的问题,我深表歉意 - 我正在从字面上获取您提供的片段并尽我所能填写任何空白。

最新更新