利用シーン

代表的な利用シーンとしては、「複数ドメインにまたがるGoogleアナリティクス実装」において、個別のドメインごとのプロパティでデータ計測を行った上で、全ドメインを横断してデータを計測するプロパティも作成したい、というケースがあります。そのようなケースで、個別のプロパティで様々なカスタマイズを行っている場合、それを全ドメイン横断プロパティでも実装する、となると手間が増えてしまいます。そんなときに今回の「同一データを複数プロパティに送信する方法」は役に立ちます。

前提条件

Googleタグマネージャを用いて、Googleアナリティクスのトラッキングコードを実装していることを前提とします。とはいえ、アイディア自体はGoogleタグマネージャに依存しないので、直接トラッキングコードを実装している場合でもお使いいただけます。

また、送信している情報は単純なページビューだけでなく、様々なイベントトラッキングを実装しており、単純に既存のタグを全てコピーして送信先だけ変更するのはメンドウだという状況を想定しています。

さらに、Googleタグマネージャにおける「 Googleアナリティクス設定 」変数を利用していることも条件とします。この機能を使うと、Googleアナリティクスの設定情報を1つの変数にまとめて、それを複数のGoogleアナリティクスタグ(イベントなども含め)で共有することができます。Googleアナリティクスのタグがたくさんあるのであれば、利用することをお勧めします。

カスタマイズの元になるアイディア

アイディアとしては、4ヶ月くらい前に実装された「タスク機能」と呼ばれる機能を利用します。タスク機能とは、Googleアナリティクスのデータ送信時の各処理の間に、任意の処理を挟み込むことができる機能です。任意の処理を挟み込むだけでなく、送信する値をこのタイミングで書き換えることも、特定の条件で送信をキャンセルすることもできます。

今回は、このタスク機能を使って、基本となるトラッカーがGoogleアナリティクスに送信するときにその情報を取得して、別のプロパティにも送信する、という処理を実装します。

カスタマイズ内容

カスタムJavaScript変数の作成

まずは、カスタムJavaScriptタイプの「変数」を作成します。ここでは変数名は「Function - customTask」としています。JavaScriptの内容は下記になります。

function () {
  return function(model) {
    var keys = "hitType page eventCategory eventAction eventLabel eventValue".split(' ');
    var params = {};
    for (var i = 0; i < keys.length; i++) {
      if (model.get(keys[i])) {
        params[keys[i]] = model.get(keys[i]);
      }
    }
    ga('create', 'UA-xxxxxxx-y', {name: 'second'});
    ga('second.send', params);
  };
}

値をコピーするパラメーターをkeys変数で定義して、それらをmodel変数から取得して送信用パラメーターに設定。その後、新しいトラッカーを生成し、コピーして作成した送信用パラメーターの値を新しいトラッカーに送信しています。

場合によっては、

ga('create', 'UA-xxxxxxx-y', {name: 'second'});

の前のタイミングで、params変数を上書きすることで、2つ目のトラッカーに対しては基本トラッカーとは少し異なる情報を送信させることも可能です。

また各自のタグで設定している内容に合わせて、keysの変数に適切なパラメーター名が含まれるように調整していただく必要があります。

customTaskとしてGAタグに登録する

このときに、Googleアナリティクス変数が利用されていると変更箇所が1箇所で済むため便利です。

Googleアナリティクス変数の「詳細設定」から「設定するフィールド」を選択していただき、フィールドを1つ追加します。フィールド名には「customTask」と入れ、「値」に先程作成した変数「Function - customTask」を設定します。

参考のためにキャプチャを準備しました。

動作テストを行い、公開

ここまでで複数トラッカーへの送信の実装は完了です。あとは、プレビューモードで動作確認を行い、問題なければ公開してください。注意点としては、カスタムディメンションを使っているケースで、その場合は複数のプロパティのカスタムディメンションのインデックスを揃えるか、「Function - customTask」の中で正しくマッピングする必要があります。

まとめ

今回の記事では、複数のトラッカーに対して、同一の情報を送信するための仕組みについて紹介しました。使い所は難しいかもしれませんが、いざというときに知っていると得をするカスタマイズ手法かと思います。