是否可以使用 Google 优化读取 Javascript 中的 ExperimentId 和 VariationId?

Is it possible to read ExperimentId and VariationId in Javascript with Google Optimize?

我使用 Google 优化创建了一个 A/B-test。现在我想读取 Javascript 中的当前 experimentId 和 variationId。我的目标是根据给定的变化 运行 不同 javascript。

我似乎无法在文档中找到关于此的任何信息。可能吗?

Google 优化允许您在每个 DOM 元素的基础上 运行 任意 JS。

此功能旨在修改 DOM 元素,但没有什么可以阻止您使用它来调用 JS 函数或定义一些变量。

如何设置脚本

  1. 在可视化编辑器中编辑您的实验变体。
  2. 单击 Select 元素 图标(左上角的矩形)
  3. 元素Select或字段中,输入正文
  4. 单击添加更改 按钮和select Javascript。这将打开一个对话框,允许您输入将为主体调用的 JS 函数。
  5. 在里面输入你想要运行的代码。

什么代码到运行

假设您在页面上定义了一个 doSomething() 方法,您可以使 Google 优化函数看起来像这样:

doSomething("Experiment #1", "Variant A");

或者,您可以尝试全局定义变量。

// We need to use `windows` here, because if we define a variable 
// with `var`, it will be limited to the scope of the Google Optimize
// function.
window["google_optimize_exp_id"] = "Experiment #1";
window["google_optimize_exp_var_id"] = "Variant A";

如果您使用第二种方法,请记住您需要等到 Google 优化函数具有 运行 之后才能 运行 调整您自己的逻辑。

编辑: 别介意下面我基于 cookie 的回答,我找到了更好的解决方案。

只需这样做:

var propertyId = "UA-1234567-33";
var experimentId = Object.keys(gaData[propertyId].experiments)[0];
var variationId = gaData[propertyId].experiments[experimentId];

旧答案:

(不要这样做..留在这里供参考)

Maximes 的回答有效,但不是我想要的。我希望能够在不通过可视化编辑器添加代码的情况下找到 experimentId 和 variationId。终于找到方法了

这些值实际上存储在 _gaexp cookie 中。当实验 运行 时,cookie 就会出现。您可以在 Chrome 中检查它,方法是打开 开发人员工具 ,转到 应用程序选项卡 并单击 Cookies 在左窗格中。它看起来像这样:

GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1

实验id是第二个数字之后的部分:

S0SJOWxJTVO1tM2QKD2NcQ

变体 ID 是最后一个数字:

1

我写这段代码是为了从 cookie 中提取它:

function getCookieValue(cookieName) {
    var result = document.cookie.match('(^|;)\s*' + cookieName + '\s*=\s*([^;]+)');
    return result ? result.pop() : '';
}

function getExperimentId() {
    var cookie = getCookieValue('_gaexp');
    if (cookie == undefined) {
        return undefined;
    } else {
        var fields = cookie.split('.');
        return fields[2];
    }
}

function getVariationId() {
    var cookie = getCookieValue('_gaexp');
    if (cookie == undefined) {
        return undefined;
    } else {
        var fields = cookie.split('.');
        return fields[4];
    }
}

var experimentId = getExperimentId();
var variationId = getVariationId();

警告: 从 cookie 中获取实验 ID 和 variationId 不是一个好主意。有两个原因。

  1. 实验结束后,cookie 仍然存在。 cookie被缓存了,所以你会发现一个不适用的experimentId和variationId,你无法知道这个experiment是不是运行
  2. 如果您停止实验 A 并开始实验 B,A 的旧值仍将是 cookie 的一部分。所以它看起来像这样:

GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1!vr1mB2L2RX6kSI1ZnUDTzT.18721.0

这与您同时进行 运行 实验时的效果相同。这使得很难推断要使用什么 experimentId。

我发现可以获取变体编号 运行 代码如下:

gaData["UA-XXXXXXXX-X"].experiments['ZYkOuNLKEoeLytt-dLWw3x']

第一个变体的结果应该是“0"for the original, "1”...

您可以通过以下方式获得实验:

gaData["UA-XXXXXXXX-X"].experiments

当然,您必须将 Google 分析 ID 替换为 UA-XXXXXXXX-X,将实验 ID 替换为 ZYkOuNLKEoeLytt-dLWw3x。

现在还有 Google 优化 javascript API 可用,这是一个更好的选择:

一旦创建实验​​(开始前),experimentId 现在在优化 UI 中可用。

API已经在页面中可用,您可以这样使用它:

google_optimize.get('<experimentId>');

(注意:这只有在加载了优化容器脚本后才会起作用)

您还可以随时(甚至在加载优化脚本之前)使用以下方法向 运行 和 javascript 注册回调:

function gtag() {dataLayer.push(arguments)}

function implementExperimentA(value) {
  if (value ==  '0') {
    // Provide code for visitors in the original.
  } else if (value == '1') {
    // Provide code for visitors in first variant.
  }

gtag('event', 'optimize.callback', {
    name: '<experiment_id_A>',
    callback: implementExperimentA
 });

如果您想同时找到 experimentId 和变体,您可以为任何实验注册回调:

function implementManyExperiments(value, name) {
  if (name == '<experiment_id_A>') {
    // Provide implementation for experiment A
    if (value ==  '0') {
      // Provide code for visitors in the original.
    } else if (value == '1') {
      // Provide code for visitors in first variant.
    ...
  } else if (name == '<experiment_id_B>') {
    // Provide implementation for experiment B
    ...
}

gtag('event', 'optimize.callback', {
    callback: implementManyExperiments
 });

更多详情

https://support.google.com/optimize/answer/9059383

有 3 种方法可以做到这一点:

1) 根据您的 Google Analytics 设置,您可以通过 Chrome 控制台访问以下对象并传入您的 GA 属性 ID:

Object.keys(window.gaData["YOUR-GA-PROPERTY ID"].experiments).forEach(function(key, index){

var value = window.gaData["YOUR-GA-PROPERTY ID"].experiments[key];
console.log("Info", key, value, index);

 });

2) 正如有人已经指出的那样,您可以访问 _gaexp cookie,它存储您的实验 ID 和变体编号。

    //READ THE COOKIE
    function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');

    for(var i=0;i < ca.length;i++) {
       var c = ca[i];
       while (c.charAt(0)==' ') c = c.substring(1,c.length);
       if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
   }
   return null;
   };

   // GET THE COOKIE
   let getCookie = readCookie("_gaexp");
   console.log('getCookie', getCookie);
   // WILL RETURN A STRING IN THIS FORMAT
   // GAX1.2.YOUREXPERIMENTID.18803.0
   // The long number in the middle is your experiment ID
   // The number at the end is your variant number (0)

   // SPLIT THE COOKIE
   let splitCookie = readCookie("_gaexp").split("!");
   // SPLIT THE COOKIE SO YOU CAN ACCESS THE EXPERIMENT ID AND VARIANT NUMBER

3) 最后,您可以使用 dataLayer.
这样做有点笨拙,但在 Optimize 360​​ 中,您可以在每个变体中添加 JavaScript(当您编辑 AB Test/variants 时)。并将您的实验 ID 以及其他信息发送到您的数据层。

EG:

function returnDate() {
  var today = new Date();
  var dd = String(today.getDate()).padStart(2, '0');
  var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
  var yyyy = today.getFullYear();
  
  today = mm + '/' + dd + '/' + yyyy;
  return today;
}

var dateToday = returnDate();

var ABTest = {

      id: 'YOUREXPERIMENTID',
      name: 'Title of your test',
      description:  'Test description',
      date: dateToday, //The launch date of AB Test.
      variant: 1,
      totalVariants: 5
  };

// AND THEN PUSH ALL THAT INFORMATION INTO THE DATALAYER 
dataLayer.Tests.push(ABTest);

然后要访问所有这些信息,您需要做的就是访问 window.dataLayer 对象。

现在我如何使用 google 标签管理器,在 dataLayer.Tests 中添加“测试”键。但是你当然不需要那个,但我只是喜欢整理我的对象:)