是否可以使用Google Optimize在Javascript中读取ExperimentId和VariationId?

Øyv*_*tad 24 javascript google-analytics-api google-optimize

我使用Google Optimize创建了A/B测试.现在我想在Javascript中阅读当前的ExperimentId和variationId.我的目标是根据给定的变体运行不同的javascript.

我似乎无法在文档中找到任何相关信息.可能吗?

Øyv*_*tad 12

编辑:没关系下面我基于cookie的答案,我找到了一个更好的解决方案.

这样做:

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

老答案:

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

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

这些值实际存储在_gaexp cookie中.实验运行时会出现cookie.您可以通过打开开发人员工具,转到" 应用程序"选项卡并单击左侧窗格中的" Cookie"在Chrome中进行检查.它看起来像这样:

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();
Run Code Online (Sandbox Code Playgroud)

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

  1. 实验结束后,cookie仍然存在.Cookie已缓存,因此您会发现不适用的experimentId和variationId,并且您无法知道实验是否正在运行.
  2. 如果您停止实验A并启动实验B,则A的旧值仍将是Cookie的一部分.所以它看起来像这样:

GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1!vr1mB2L2RX6kSI1ZnUDTzT.18721.0

这与你一次运行实验时的外观相同.这使得很难推断出使用什么样的实验.

  • 带有我的属性ID的`gaData`存在,但它只包含键`hitCount`; 即使我的实验正在运行,也没有"实验"键.谁能看到这个? (2认同)
  • @ØyvindHolmstad我和Georg有同样的问题,我的“gaData”不包含“experiments”属性,而只包含“hitcount”属性。关于如何解决这个问题有什么想法吗? (2认同)

小智 8

现在,还有一个可用的Google Optimize javascript API,它是一个更好的选择:

创建实验后(开始之前),experimentId现在可在Optimize UI中使用。

该页面中已经提供了该API,您可以像这样使用它:

google_optimize.get('<experimentId>');
Run Code Online (Sandbox Code Playgroud)

(注意:这仅在加载Optimize容器脚本之后才有效)

您还可以使用以下方法注册回调,以便在任何时候(甚至在加载Optimize脚本之前)运行所需的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
 });
Run Code Online (Sandbox Code Playgroud)

如果您想同时找到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
 });
Run Code Online (Sandbox Code Playgroud)

更多细节

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

  • 嗨,我已经使用 GTM 实施了优化服务器端实验。我目前正在我的 Optimize 仪表板中查看数据,因此我可以确认实验是否有效。但是,在尝试此答案中提到的代码片段时,我一直未定义。我想知道这个 Optimize Javascript API 是否已被弃用,或者我遇到的问题是否是由于我的实现(仅使用 gtm.js,而不是上面链接的 Google 支持文档中提到的 gtag.js)。您是否有使用 GTM 优化回调的工作示例? (2认同)
  • 同样的问题在这里。 (2认同)

Max*_*lle 5

Google Optimize允许您基于每个DOM元素运行任意JS.

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

如何设置脚本

  1. 在Visual Editor中编辑实验变体.
  2. 单击选择元素图标(左上角的矩形)
  3. 在" 元素选择器"字段中,键入正文.
  4. 单击添加更改按钮,然后选择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";
Run Code Online (Sandbox Code Playgroud)

如果您使用第二种方法,请记住,您需要等到Google Optimized功能运行后再运行您自己的逻辑.