NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

注目のタグ

    GTMでクリックした要素の様々な値を取得するTips

    dataLayerを利用して、難しい記述なしでHTML内の要素の様々な値を取得する方法をまとめました。

    f:id:s5-takahashi:20211207132144p:plain

    本記事はNRIネットコム Advent Calendar 2021 17日目の記事です。
    🥨 16日目 ▶▶ 本記事 ▶▶ 18日目 🍪

    はじめまして、入社2年目の高橋栞です。
    Google アナリティクス(GA)を中心としたGoogle マーケティング プラットフォーム(GMP)のテクニカルサポートを担当して約1年半になります。
    まだまだ修行中の身ですが、今回は誰でも簡単にTechな感じでGTMの設定を行えるようこの記事を書きました。パッと見は小難しく見えるかもしれませんが、やっていることはシンプルなのでぜひ読んでいただければと思います!

    はじめに

    GTMは「Google タグ マネージャー」という名称からお察しいただけるように、タグ管理ツールです。 1度GTMをウェブサイトに埋め込んでしまえば、サイトの改修なしでタグを配信したりGAのイベントを設定できるのでとっても便利です。
    さらに嬉しいのは、HTMLの要素を活用して柔軟な設定が可能な点です。わざわざサイトの改修を行わずに、GTM内で完結できたら嬉しいことこの上ないですよね。

    デフォルトで存在している「組み込み変数」では、JavaScriptやjQueryを利用せずに要素やクラス、リンクなどを取得することが可能です。 逆に複雑なJavaScriptやjQueryによる操作をGTMから行うことも可能ですが、フロントエンドの技術に明るくない方はできれば利用したくないですよね。

    今回はdataLayerを利用して難しい記述なしでHTML内の要素の様々な値を取得する方法をまとめました。

    組み込み変数とは

    組み込み変数とは、文字通り標準で組み込まれている変数です。
    ※一部の組み込み変数では、実際に利用する際に利用したい組み込み変数を有効にする必要があります。
    組み込み変数の多くはdataLayerで取得している値です。
    例えば、クリックした要素に関する組み込み変数であれば以下のようなdataLayerの変数名を利用しています。


    <a href="/recruit/" target="_blank" id="recruit" class="global-nav_item">採用情報</a>

    組み込み変数dataLayerの変数名例で取得できる値
    Click Element
    gtm.elementhttps://www.nri-net.com/recruit/: html > body > div#ContentsWrap > header#header > div.header_inner > div#utility > div#global-nav > nav > ul.global-nav_items > li.global-nav_item > a
    Click Classesgtm.elementClassesglobal-nav_item
    Click IDgtm.elementIdrecruit
    Click Targetgtm.elementTarge_blank
    Click URL gtm.elementUrlhttps://www.nri-net.com/recruit/
    Click Textgtm.elementText採用情報

    dataLayerとは、GTMの変数「データレイヤーの変数」のことです。
    つまり、dataLayerを利用しているということは、組み込み変数を利用せずとも下図のようにデータレイヤーの変数を作成してしまえば同じことができます。
    この特性を利用すると、組み込み変数では取得できないような要素の値も取得できるんです!

    f:id:s5-takahashi:20211206115033p:plain

    他の組み込み変数がどのように値を取得しているのか、気になる方は公式ヘルプを見てみてください。
    公式ヘルプ:ウェブサイト用コンテナの組み込み変数 - タグ マネージャー ヘルプ

    ここからはデータレイヤーの変数で様々なHTMLの要素の値を取得する裏ワザをご紹介します!

    クリックした要素の〇〇を取得したい!

    クリックした要素のうち、組み込み変数で取得可能な値は要素・クラス・ID・ターゲット・テキストでした。
    しかし、dataLayerを利用すれば以下のような値も取れてしまいます。

    f:id:s5-takahashi:20211206175711p:plain

    取得できる値dataLayerの変数名例で取得できる値
    要素内のすべてのテキストgtm.element.innerTextデジタルマーケティング
    要素名(タグ名)gtm.element.tagNameA
    ※大文字で取得されます。
    その要素を含むHTMLgtm.element.outerHTML<a href=\"/products/categories/digital-marketing\">デジタルマーケティング </a>
    その要素の中身のHTMLgtm.element.innerHTMLデジタルマーケティング
    要素の属性値gtm.element.attributes.{属性名}.value【gtm.element.attributes.href.valueの場合】
    /products/categories/digital-marketing

    クリックした要素の親要素/子要素の〇〇を取得したい!

    PDFのリンククリックを計測するときに、「親要素のテキストから資料名を取りたい...!」という場合がよくあります。(例
    また、バナーのリンククリックなどでクリックされた画像のソースを計測したい場合も、hrefのリンクがある要素の子要素にsrcがあることが多く、組み込み変数で設定を完結できず歯がゆい気持ちになったことが何度もあります。(例


    f:id:s5-takahashi:20211210141733p:plain

    そんなときは「gtm.element.」の後に下記を追加することで、クリックされた要素の親要素や子要素の値を取得できるんです!

    親要素
    parentElement
    最初の子要素firstElementChild
    最後の子要素lastElementChild


    ①親要素のテキスト → gtm.element.parentElement.innerText
    ②最初の子要素のソース → gtm.element.firstElementChild.src

    さらに便利なのが、親の親要素の値をとりたいときは「parentElement.parentElement」、
    親の親の親要素の値をとりたいときは「parentElement.parentElement.parentElement」と、
    parentElement.」を増やしていくだけで、HTML要素の階層をさかのぼることができてしまう点です。
    JavaScriptをたしなむ方にとっては少し気持ち悪いかもしれませんが、仕組みは単純なので使いやすいかと思います。


    親の親の親要素のID → gtm.element.parentElement.parentElement.parentElement.id

    dataLayerで取得できる値を全部チェックしたい!

    dataLayerの変数名と値はChromeのデベロッパーツール(検証モード)の「Console」から簡単にチェックできます。
    ※デベロッパーツールはショートカットキーの 「Ctrl + Shift + I」や、ウェブサイトの画面を右クリックし「検証」を押すことで開くことができます。様々な開き方があるので、この方法で開けなければ調べてみてください。

    まずはデベロッパーツールの「Console」を開き、dataLayerと入力しEnterを押してみてください。

    f:id:s5-takahashi:20211210160348p:plain

    出てきたものを開くと、発生したイベントが表示されます。

    f:id:s5-takahashi:20211210181503p:plain

    確認したいイベントを開くと、そのイベントで取得できるdataLayerの変数が出てきます。
    ※対象の要素をクリックし、イベントを発生させてから確認してください。
    リンククリックであれば「gtm.linkClick」、リンク以外のクリックであれば「gtm.Click」を開くと、 先ほどご紹介した組み込み変数のdataLayerの変数名と値などが出てきます。

    f:id:s5-takahashi:20211210161749p:plain

    その中の「gtm.element」を開くと、たくさんの変数名が出てきます。
    この出てきた値をgtm.element.の後につなげれば、表示されている値が取得できてしまうのです!

    f:id:s5-takahashi:20211210173652p:plain

    「この値を取りたいけど、どう取ればいいかわからない」などといった場合に利用すると便利ですね。

    GTMで値を確認してみましょう!

    では、上記の方法を使ってGTMで本当に取得できているか、実際に確認してみましょう。

    上記で確認したdataLayerの「gtm.element」を開くと出てくる変数の中から、今回は「host」の値をGTMで取得していきたいと思います。
    (私自身、今回初めて利用する変数なのでドキドキです...。)

    f:id:s5-takahashi:20211210164801p:plain

    まずはGTMで「データレイヤーの変数」を作成します。 データレイヤーの変数名には「gtm.element.host」を入力し、保存します。

    f:id:s5-takahashi:20211210165500p:plain

    作成後、プレビューモードで対象のページを開きます。
    開いたページでイベントを発生させたら、画面左側の一覧から発生させたイベント(今回はリンククリック)を開きます。
    そして「Variables」を開くと、そのイベントで取得できた値を確認することができます。

    f:id:s5-takahashi:20211210163820p:plain

    先ほど作成した変数「gtm.element.host」の値を見てみると...
    Consoleで確認した値が入っていますね!!ちゃんとGTMでも取得できていることが確認できました!

    f:id:s5-takahashi:20211210171332p:plain

    まとめ

    今回はdataLayerを利用して様々な要素の値を取得する方法をご紹介しました。
    この方法はHTMLの構造に依存した設定になるので、HTMLを改修する可能性がある場合は注意していただければと思います。
    可能であればサイトの改修を行い、上記の手段で取得した値を利用しなくて済むのが安心安全です。
    例えば下記のような改修を行うと、GTMでの設定が容易かつ安全になるかと思います。

    どうしてもサイトを改修できないなどの事情がある方や、あえてどんな値まで取得できるか挑戦したい方は、 当記事を参考にしていただけると幸いです!

    執筆者高橋栞

    Google アナリティクスを中心としたGoogle マーケティング プラットフォーム(GMP)のテクニカルサポートを担当しています。

    NRIネットコム Advent Calendar 2021
    🥨 16日目 ▶▶ 本記事 ▶▶ 18日目 🍪