Google Optimizeを使用してA/Bテストを作成しました。ここで、Javascriptの現在のexperimentIdとVariationIdを読みたいと思います。私の目標は、与えられたバリエーションに基づいて異なるJavaScriptを実行することです。
ドキュメントでこれに関する情報を見つけることができないようです。出来ますか?
より良いオプションであるGoogle Optimize javascript APIも利用できるようになりました。
実験が作成されるとすぐに(開始前に)、experimentIdがOptimize 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
});
詳細については
編集:以下の私のクッキーベースの答えを気にせず、より良い解決策を見つけました。
これを行うだけです:
var propertyId = "UA-1234567-33";
var experimentId = Object.keys(gaData[propertyId].experiments)[0];
var variationId = gaData[propertyId].experiments[experimentId];
(これをしないでください..参照のためにここに保管してください)
マキシムズの答えは機能していますが、私が探していたものとはまったく異なりました。ビジュアルエディターでコードを追加せずに、experimentIdとVariationIdを見つけたいと思いました。私はついに道を見つけました。
値は実際には_ gaexpCookieに保存されます。 Cookieは、実験の実行中に存在します。 (== --- ==)開発者ツールを開き、に移動して、Chrome [アプリケーション]タブをクリックし、左側のペインでCookiesをクリックします。
GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1
実験IDは、2番目の数字の後の部分です。
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を取得することはお勧めできません。 2つの理由があります。
GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1!vr1mB2L2RX6kSI1ZnUDTzT.18721.0
これは、一度に実験を実行した場合の外観と同じです。どの実験IDを使用するかを推論するのが難しくなります。
Google Optimizeでは、DOM要素ごとに任意のJSを実行できます。
この機能はDOM要素を変更するためのものですが、JS関数を呼び出したり、いくつかの変数を定義するために使用することを妨げるものは何もありません。
ページで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";
2番目の方法を使用する場合は、独自のロジックを実行する前に、Google最適化関数が実行されるまで待つ必要があることに注意してください。
次のようなコードを実行してバリアント番号を取得できることがわかりました。
gaData["UA-XXXXXXXX-X"].experiments['ZYkOuNLKEoeLytt-dLWw3x']
結果は、オリジナルの場合は「0」、最初のバリアントの場合は「1」になるはずです...
以下を使用して実験を取得できます。
gaData["UA-XXXXXXXX-X"].experiments
もちろん、UA-XXXXXXXX-XをGoogleアナリティクスIDに、ZYkOuNLKEoeLytt-dLWw3xを実験IDに置き換える必要があります。