> For the complete documentation index, see [llms.txt](https://docs.vwo.gaprise.jp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vwo.gaprise.jp/testing/split-testing/8jt76pkbra.md).

# スプリットURLテストでイベントベースのリダイレト実装方法

ウェブサイトでスプリットURLテストを行っている際、ユーザーが別のバリエーションにリダイレクトされたかどうかに基づいて、特定コードの実行をVWOに指示したい場面があり得ます。

この記事では、次の使用例について説明します。

1. リダイレクトが発生していない場合にのみコードを実行する
2. バリエーションにリダイレクトされる場合のGAコード実行を回避する
3. 離脱ポップアップコードを使用したVWOの使用

### リダイレクトが発生しない場合のみコードを実行する <a href="#id-1" id="id-1"></a>

リダイレクトが発生していない時にのみコードを実行する場合は、リダイレクトが発生しているかどうかをチェックする機能を設定することができます。VWO SmartCode（タグ）の前に以下のコードを追加してください。

```
(function() {
  window._vwo_evq = window._vwo_evq || [];
  var _vwoOldPush = window._vwo_evq.push;
  window._vwo_evq.push = function() {
    var eventData = arguments[0],
      willRedirectionOccur;
    if (eventData[0] === 'rD') {
      willRedirectionOccur = eventData[1]; // It will be set to true if a redirection is going to be done by VWO.

      window.willRedirectionOccurByVWO = willRedirectionOccur;
    }
    _vwoOldPush.apply(window._vwo_evq, [].slice.call(arguments));
  };
})();
```

{% hint style="warning" %}
後に実行されるプログラムで、このページで特定コードを実行すべきかどうかを判断する際に、"willRedirectionOccurByVWO" という変数を利用できます。これは、ページが別のバージョンに自動的に移動する（リダイレクトされる）かどうかを示す指標となります。
{% endhint %}

### バリエーションにリダイレクトされる場合のGAコード実行を回避する <a href="#id-2" id="id-2"></a>

この回避策は、UA/GA4ともに共通です。以下説明文では「GA」と表記します。

スプリットURLテスト実行中でGA設定されている場合、GAはコントロールページとバリエーションページの両方（同期および非同期コード）の訪問者を記録します。\
\
これを避けるには、次の手順を実施してください。

1. まず、現在設置されているGAタグ（もしくはGTMタグ）をページから削除します。
2. 次に、下記に記載されたコード（利用しているVWOスマートコードが同期／非同期かで異なります）を設置します。
3. GTMで設置している場合は、タグを再設置することで他のタグ計測にも影響与える可能性ありますので、作業後問題なく計測できているか念のためご確認ください。

**■VWO同期スマートコードを利用している場合**

VWO同期スマートコードの上に、下記コードを設置してください。コード内の「//EXECUTE UA/GA CODE HERE」は、GAまたはGTMコードに書き換えてください。

{% hint style="warning" %}
GTM経由で設置されている場合、GAの代わりにGTMコードをコードブロックにコピー＆ペーストしてください。
{% endhint %}

```
// If VWO is not going to redirect the page
if (!window.willRedirectionOccurByVWO) {
  //EXECUTE UA/GA CODE HERE
} else {
  // VWO is redirecting this page. So, don't execute UA/GA code here.
}
```

**■VWO非同期スマートコードを利用している場合**

非同期スマートコードの下に、以下のコードを追加してください。コード内に記述されているGA情報は対象アカウントのGAまたはGTMコードに書き換えてください。

```
(function(nonVWOScriptsToExecute, VWO_HARD_TIMEOUT) {
  window._vwo_evq = window._vwo_evq || [];
  var queue = window._vwo_evq;
  for (var i = 0; i < queue.length; i++) {
    if (queue[i][0] === 'rD') {
      window.willRedirectionOccur = true;
      break;
    }
  }
  var _vwoOldPush = window._vwo_evq.push;
  window._vwo_evq.push = function() {
    var eventData = arguments[0],
      willRedirectionOccur;
    if (eventData[0] === 'rD') {
      willRedirectionOccur = eventData[1];
      // It will be set to true if a redirection is going to be done by VWO.
      window.willRedirectionOccurByVWO = willRedirectionOccur;
    }
    _vwoOldPush.apply(window._vwo_evq, [].slice.call(arguments));
  };
  var hardLimitTimedout = false;

  function tryNonVWOTracking(nonVWOScriptsToExecute) {
    if ((window._vwo_code && (window._vwo_code.finished() || window._vwo_code.libExecuted)) || hardLimitTimedout) {
      if (!window.willRedirectionOccurByVWO) {
        clearTimeout(hardLimitTimer);
        for (var i = 0; i < nonVWOScriptsToExecute.length; i++) {
          try {
            nonVWOScriptsToExecute[i]();
          } catch (e) {}
        }
        return;
      }
    }
    setTimeout(function() {
      tryNonVWOTracking(nonVWOScriptsToExecute)
    }, 500)
  }

  var hardLimitTimer = setTimeout(function() {
    hardLimitTimedout = true;
  }, VWO_HARD_TIMEOUT);
  tryNonVWOTracking(nonVWOScriptsToExecute);
})([function() {
  (function(i, s, o, g, r, a, m) {
    i['GoogleAnalyticsObject'] = r;
    i[r] = i[r] || function() {
      (i[r].q = i[r].q || []).push(arguments)
    }, i[r].l = 1 * new Date();
    a = s.createElement(o),
      m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m)
  })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
  ga('create', 'UA-75286006-1', 'auto'); //UA ID would vary as per UA account
  ga('send', 'pageview');
}], 5000 /*MAXIMUM TIME IN SECONDS IN WHICH GA CODE WILL EXECUTE ANYWAY*/ );
```

### **離脱ポップアップコードを使用したVWOの使用** <a href="#id-3" id="id-3"></a>

離脱ポップアップのある Web サイトで VWO 同期コードを使用することもできます。VWO同期コードの前に下記コードを追加します。

```
<script >
  window.onbeforeunload = function() {
    if (window.willRedirectionOccurByVWO) {
      // No Exit popup.
      return null;
    } else {
      // Move Existing exit popup code Here to show popup in case visitor remains on control.
    }
  };
</script>
```

{% hint style="warning" %}
このコードは非同期コードでも機能しますが、同期コードと共に使用することをお勧めします。
{% endhint %}

※本ページは\[[原文:How to Implement Event-based Redirection for Split URL Tests?](https://help.vwo.com/hc/en-us/articles/360020074093-How-to-Implement-Event-based-Redirection-for-Split-URL-Tests-#:~:text=While%20you%20are%20running%20a,to%20a%20variation%20or%20not)]を翻訳・加筆修正しています。
