GTM和Optimize:JS变量未定义,但在控制台中运行良好

时间:2020-01-09 16:35:27

标签: javascript html google-tag-manager event-tracking

我正试图在Google跟踪代码管理器中显示Google Optimize变体。

我尝试通过“自定义JavaScript变量”实现它:

function() {
  var property = window.keys(gaData);
  var experiment_nr = window.keys(window.gaData[property].experiments);
  var experiment_value = window.values(window.gaData[property].experiments).toString()
  if (experiment_value == "") {
    return "0"
  } else {
    return experiment_value
  }
}

这是它的结果:

Custom JavaScript Variable Result

然后我尝试使用5秒的延迟触发来测试我的代码:

GTM HTML Tag

这是DevTools JS控制台的结果:

DevTools Console result

如您所见,控制台不会通过GTM接受它,但是在我手动输入时会接受它。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

尝试使用 dataLayer 代替窗口对象。

答案 1 :(得分:0)

答案实际上很简单。

Google Optimize使用名为_gaexp的cookie。 在那里,您会得到一个字符串,总结了Google Optimize实验ID以及最后的版本: GAX1.2.wHL2IJUnSg2n8PB4iQH66w.18362.1

我要做的就是创建一个新的读取Cookie的变量

  1. 新变量
  2. 第一方Cookie,其Cookie名称为“ _gaexp”

您当然可以通过简单地从DevTools控制台调用Cookies.get('_gaexp')(以检查cookie值是否正确)来获得带有JavaScript的cookie名称

必须对_gaexp值进行操作以隔离变体:

  1. 新变量
  2. 自定义JavaScript
  3. 添加以下代码:
function (){
  if ({{GA_Optimize_Variable}}=='undefined'){
    return '0'
  } else {
    return {{GA_Optimize_Variable}}.charAt({{GA_Optimize_Variable}}.length-1)
  }
}

当Google Optimize将您的访问量引导到网站的原始变体时,_gaexp不存在。因此,需要一个if语句。

最后,您可以在Google Analytics(分析)事件和/或维度中使用变量。