Googleタグマネージャーで配列の中身を取得したい
JavaScriptの値をGoogleタグマネージャー(以下、GTM)で使用できるのは理解できているのですが、配列となった場合どうやら少し取得方法が異なる模様。例えば、以下のようなJavaScriptがあるとします。
var foo = []; foo["bar"] = ["baz"];
グローバル変数(配列)foo
を定義して、foo["bar"]
要素の文字列値、"baz"
を取得したい。そこでGTMの変数→ユーザー定義変数で以下のように設定します。
グローバル変数名にfoo["bar"]
でなく連想配列名をドットでつなぐfoo.bar
と書きます。これをタグでカスタムHTMLを選択して、取得できているかテストします。
保存した変数名(foo_bar)を{{}}
で囲んで出力します。これをGTMのプレビューで確認すると表示されます。
配列の要素数を取得したい
実はここからが本題で、配列の要素数を取得できないか探っていました。やりたいこととしては、GTMのdata.Layer
に配列の中身をpushして送信していたのですが、配列の中身がない場合でもタグが送信されていてエラーがでていました。
具体的に言うとcriteoというサービスのタグに商品情報を送信するにあたって、カートの中の商品の情報を送るようにしていました。ただ、カートが空の状態で「カートを見る」としてしまうと商品情報がないにも関わらずcriteoのタグに空の情報を送ってしまいエラーが出力されていたということ。
そこでカートの商品数が1以上であれば送信するというトリガーを作りたく配列の要素数が取れないか調べていました。すると以下のようにすることで取得できることが判明しました。
length……そのまんまだ。この変数をトリガーに設定して先程の配列表示のタグにトリガー追加します。
配列の要素数が1以上だったらタグを表示するようにトリガーセット!これでOKです。
できた!\(^o^)/
これで無駄なタグの配信など防げそう。JavaScript内でlength取得して分岐させてもいいけど、トリガーで設定しておいたほうがわかりやすいし、ON/OFFがすぐできるのでこの方法がベストと思われます。