wonder beeのブログ

アクセス解析・Web解析、Google Analytics(Universal Analytics)を中心にWebに関すること書いています。

Googleタグマネージャーで、ga(‘send’,…が使えない理由

   

こんばんは。
ワンダービーの阿部です。

今日はかなり技術寄りの内容についてです。

Googleタグマネージャーでga(‘send’,…)コマンドが動作しない件

Googleタグマネージャ(GTM)でグーグルアナリティクス(GA)の設定を行っており、ga(‘send’,’event’,…)でグーグルアナリティクスにイベントを設定しようとすると動きませんでした。

私がこの現象に遭遇しましたので、同じ現象で困っている方がいたらということで残しておきます。
(本文中「’」シングルクォーテーションと「”」ダブルクォーテーションで表記の仕方にばらつきがありますが、同じ意味なので、都合によっては「’」は「”」に脳内置換してください。)

概要

自分のウェブサイトにおいて、グーグルアナリティクスの設定をGoogleタグマネージャで設定していました。

もともとイベントを設定するつもりがなかったのですが、どうしても取得したいものが出てきました。

ちょうどHTMLの変更を行っていたので、そのアンカー要素にonClick=ga(‘send’,’event’,’eveCat’,’eveAct’,’eveLab’)でイベントを取得しようとしましたが、このイベントが動くことはありませんでした。

原因

ga(‘send’…)が使えない理由はGoogleタグマネージャで設定するグーグルアナリティクスのタグは自動でnameを設定してしまうことにあります。

実際にご確認ください。
下記の画像は、Googleタグマネージャーを利用して、異なるトラッキングIDを二つを利用して、それぞれグーグルアナリティクスのユニバーサルアナリティクスタグを設定した結果です。

スクリーンショット-2015-10-20-15.28.04
この画像はグーグルアナリティクスのデバッグモードで動作させた時のコンソール画面の出力のコピーになります。

画像の4つの赤線部分はそれぞれ抜き出すと、

  1. Running command: ga(“create”, “UA-XXXXXXXX-Y”, {name: “gtm1445322965133”})
  2. Running command: ga(“gtm1445322965133.send”, “pageview”)
  3. Running command: ga(“create”, “UA-XXXXXXXX-2”, {name: “gtm1445322965134”})
  4. Running command: ga(“gtm1445322965134.send”, “pageview”)

となっています。

1と3では、それぞれga(“create”…)の時にnameを設定していることがわかります。このnameは一つのウェブサイトに複数のグーグルアナリティクスのトラッキングコードを設定する時によく使うやり方です。

例えば各広告代理店ごとにグーグルアナリティクスを管理したい!などと言われるとこのような方法をとる必要がある場合があります。(詳細はGoogleデベロッパーの複数トラッキングオブジェクトの処理から確認できます。)

次に、2と4を見てください。少し見慣れない形をしていますが、sendの前にnameで指定した文字列と.(ドット)がくっついている形になります。なので、{name: “a”}と設定したとすると、ga(“a.send”…)となります。

1と2、3と4はそれぞれ何を行っているかというと、1と3で名前をつけて、2と4でそれぞれ対応したものだけを動かしているということです。

ページビューなので少し違和感がありますが、イベントトラッキングの場合でも同様にsendの前にnameと.(ドット)をつけます。こうすることによって、自分のグーグルアナリティクスのプロパティには、自分のイベントだけが飛ぶようになり、他社のデータを汚染しません。自分が設定した覚えのないデータが飛んでくると少しびっくりしますよね。

話を戻して、
「それじゃ、ga(‘名前.send’…)にすれば使えるじゃないか!」と思いますが、Googleタグマネージャが作るnameはランダムのため(10回更新して検証しました)、使えません。

Googleタグマネージャーが自動的に付与するランダムなnameのために、ga(‘send’…)コマンドを使うことができません。

以下は補足ですが、
おそらく、Googleタグマネージャーは既存のグーグルアナリティクスが残っている状態でも簡単に別のプロパティを導入できるように、自動でnameが付与される仕組みなっていたのではないかと推測しています。そのため、このような仕様になっていると考えられます。

対策

それではどうのようにすれば良いかです。

  1. dataLayerを使う
  2. Googleタグマネージャーでnameを指定する

(他に有効なものがあったら教えてください)

1のdataLayerはGoogleタグマネージャーの推奨の方法です。アユダンテ様が本を出しているので、そちらを閲覧してもらえればと思います。

2のnameを指定するは、
「nameがランダムで付与されるから使えない」と上記で書きましたが、Googleタグマネージャーには、このnameを指定するやり方が存在します。

スクリーンショット-2015-10-20-16.14.34

高度な設定の拡張リンクアトリビューションの設定の下にトラッカー名を設定するという項目があります。

これを使ってトラッカー名を指定することができます。しかし、?の部分マウスオーバーすると、「Google タグマネージャでは、極力トラッカー名を使用しないでください。」とでます。

さらに詳細をクリックすると、以下の文章がでます。

Tracker Name: Allows you to name the tracker object yourself. Note: Naming the tracker object yourself is discouraged. If you inadvertently reuse an existing tracker object name, your data may become corrupted. Although providing a name for the tracker can allow you to share state between Google Tag Manager-created trackers and your pre-existing Google Analytics code, you should instead update the code on your site to use the Google Tag Manager dataLayer syntax. Otherwise you will be unable to configure your tracking via Google Tag Manager.

英語はあまり得意ではないのですが、簡単に訳します。

「トラッカーオブジェクトの名前はあなた自身で決めることができます。(注意:あなた自身でトラッカーオブジェクトの名前をつけることはお勧めできません。もしうっかり既存のトラッカーオブジェクトの名前を再利用してしまったら、あなたのデータは破損するでしょう。トラッカーオブジェクトの名前を指定することによって既存のGoogle Analyticsのコードとの間で状態を共有できるようにすることができます。そのかわり、GoogleタグマネージャーのdataLayer構文を使用するために、あなたはサイトにコードを更新する必要があります。それ以外の場合は、Googleタグマネージャを経由してトラッキングを設定することができません。」

とのことです。ポイントは「極力使用しないでという注意文」と「dataLayer構文が使うためにゴニョゴニョしなくてはならない」部分です。そうであるなら、dataLayer構文を覚えてしまった方が断然に楽だと思います。

他にも、運用の面を考えると、dataLayer構文使わないからといって設定していないと、周知徹底できればいいですが、そうでないとデータがうまく取れないなどの問題になると思われます。

まとめ

Googleタグマネージャーを使うならそのルールに沿って使わないといけないですね。

以上!

 - グーグルアナリティクス