React 等を使用した SPA では、実際にページ遷移が発生しているわけではないため、ブラウザでのページ遷移が発生する時のように、Google Analytics に記録ができません。

どのように記録するのか、調べて実装してみました。
React で、Reactt-Helmet を使わない通常時と、React-Helmet を使っている場合で実装方法異なります。
結果を以下に記載します。


参考


GTM からは、履歴の変更をトリガーにPageView イベントを Google Analytics に送付する

Angular2(SPA)に、Google Tag Manager 経由でGoogle Analyticsを設定する方法 | 株式会社エムアイ・ラボ同様の方法で上手くいきそうに思いましたので、こちらを試してみます。


Google Analytics でのブラウザの進む戻る<wbr>扱い

イベントの発行タイミングは厳密には異なるので、通常の画面遷移時と、進む戻る<wbr> クリック時の PageView の記録のされ方について気になったのですが、以下を読む限り記録されそうです。

ただ、firefox の BFCache動作と、Google Analytics のタグの記載方法によっては、戻るの<wbr>ページビュー記録されない場合もあるようにも思います。1
以下、参考記事へのリンクです。
* ブラウザバックするとボタンが反応しなくなる問題 - Qiita * BFCacheを有効化。

記録されない時もあるとはいえ、基本的には記録されるので、履歴変更をトリガーにしても個人的な要件は満たしており問題はないのかなと思いました。


GTMの設定

Google Anlaytics タグに以下2つのトリガーを定義しました。
"トリガー"

  • ページビュー のトリガー
    ページ表示時に、タグを起動するためのトリガーです。
    初回表示時、ページ更新時はこのトリガーで Pageview を記録します。

  • 履歴の変更 のトリガー
    ページ表示後の画面遷移時は、このトリガーで Pageview を記録します。

この設定で、Pageview がうまく取得できるようになりました。


React-Helmet を使っている場合、Title が誤って記録されることがある

Google Analytics を後日確認したところ、ページパス と ページタイトル が異なって記録される場合がありました。
気になったので調べたところ以下の記事が見つかりました。

Google Tag Manager ではイベントで発火させて、JavaScript の実装で ページタイトルを書き換えた後に、イベントを発火させる方法になります。

関連するIssue、 Pull Request

上記の Stackoverflow の 記事の実装が適切かというと、別のやり方がありそうにも思いましたので関連する Issue、Pull Request へのリンクを記載しておきます。


React-Helmet 使用時のGTMの設定

Title not updating after history change - タグマネージャ ヘルプ参考に以下のように実装しました。

  1. 全ての履歴の変更トリガーで、fireDelayedHistoryChange カスタムHTMLタグを発火させる。

    • HTMLタグ
      2020-01-19 2.11.07.png - Google ドライブ

    • HTMLタグの内容
      setTimeout関数で、GTMイベントのpushを少し遅延させます。
      これで、React-Helmet でのTitleタグの変更後に、GTMイベントがpushされるようになります。

          <script>
              window.setTimeout(function() {
              window.dataLayer = window.dataLayer || [];
              window.dataLayer.push({
              event: 'delayedHistoryChange'
              });
              }, 100);
          </script>
      

  2. delayedHistoryChange イベントトリガーを作成する。
    2020-01-19 2.17.30.png - Google ドライブ

  3. ページビュータグと、delayedHistoryChange イベントトリガー を紐づける。
    2020-01-19 2.20.30.png - Google ドライブ

上記設定で、ページタイトルが正しく記録されるようになります。

以上です。


  1. 試せてないので推測です。 

コメント