Googleアナリティクス：クロスドメイン広告コンバージョン計測の実装パターンと検証

#概要
ランディングページとサンクスページのドメインが異なるサイトにおいて、**Googleアナリティクスが**広告コンバージョンを計測するために必要な設定は何か？どう動くのか？を考察・検証したノートです。

さて、前回の記事「[**Google広告**：クロスドメインコンバージョン計測の実装パターンを検証](https://qiita.com/MasatoEmata/items/1dfe2b780eb8315feb70)」とはどのような違いがあるのでしょうか。

※以降、ランディングページ～サンクスページの間で異なるドメインへ遷移することを「クロスドメイン」と呼びます。

#結論
##計測の仕組み
![Google Analytics Conversion Mechanism.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/d0830ab9-0ffc-97c7-da50-7dbe77a66083.png)

### ランディングページのURLパラメータを計測に使う
Google広告とは異なり、コンバージョンポイントではクリックIDを格納したCookieは利用しません。Googleアナリティクスは、ランディングページにアクセスした際、以下いずれかのURLパラメータを元にして流入元を判別しています。

- クリックID:`gclid`
- カスタムキャンペーンパラメータ:`utm_source``utm_medium`

###クロスドメイン時、トラッキングCookieを次のドメインに引き渡す
ユーザーがコンバージョンすると、Cookieの識別IDをキーにして上記流入元情報とコンバージョンデータがGoogleアナリティクスで紐づけられ、「そのユーザーのそのセッションのコンバージョンは広告経由のものである」と判別されます。

このCookieは、まずそのランディングページで作られてブラウザに保持されます。しかし、Cookieは本来ドメイン単位で作られるものなので、異なるドメイン（自分のサイト）にはそのままでは引き継がれません。すると、そのドメインでは全く別のCookieの識別IDが作られるため、ユーザーをキーとしてコンバージョンなどのトラッキング情報と、それが広告経由であるという情報を紐づけることができなくなります。これを回避するため、クロスドメインではCookieの識別IDを次のドメインに引き渡します。

※なお、クロスドメイン時の挙動を見ると、識別IDとして引き渡されているCookieの情報は`clientId`であるため、この`clientId`をアナリティクスのサーバーでまず広告コンバージョン計測のキーとして扱っているように見えます(コンバージョン(「目標の完了」)はセッション単位で計測されるのでセッション情報も最終的には絡んでくると思いますが...)。
※Google広告のクロスドメインコンバージョン計測の場合、クリックIDのCookie`gclid`をコンバージョンポイントまで引き渡し、コンバージョンタグの発火によりそのCookie`gclid`をGoogle広告に送ることで計測を行っています。これに対してGoogleアナリティクスのクロスドメイン広告コンバージョン計測の場合、`gclid`をCookieとして利用していません。


##計測の条件
上記「計測の仕組み」整理すると、以下の2つの条件を満たしているとき、Googleアナリティクスでクロスドメイン広告コンバージョンが行われます。

- [1] ランディングページのURLに特定のパラメータが付与されること（以下）
    - [1-1] Google広告のクリックID: `gclid`
    - [1-2] Googleアナリティクスのカスタムキャンペーンパラメータ(utmパラメータ): `utm_source=google`, `utm_medium=cpc`
- [2] ドメインが切り替わるとき、次のドメインのページURLのパラメータにcookie`clientid`の情報が付与されること 

##実装方法
上記「計測の条件」を満たすために、以下の2つの実装をしているとき、Googleアナリティクスでクロスドメイン広告コンバージョンが行われます。


- [1] 以下いずれかの方法によりランディングページのURLに特定のパラメータが付与させる
    - [1-1]「[自動タグ設定](https://support.google.com/google-ads/answer/3095550?hl=ja)」を有効にする
    - [1-2] 「[Google広告の最終ページURL](https://support.google.com/analytics/answer/1033981?hl=ja)」のキャンペーンパラメータに以下を追加する
        - utm_source=google
        - utm_medium=cpc
        
        ※[1-1] 「自動タグ設定」はリンクアカウント（Google広告とアナリティクスをリンク）するときの前提となるため、[1-1]を「リンクアカウントを設定する」と読み変えることも可能です。「自動タグ設定」をするだけでなくリンクアカウントを設定することで、どのアカウント・どのキャンペーンでどのくらい広告コンバージョンが発生したかを知ることができます。
![Google Ads and Analytics - link account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/435cf235-2452-4c8b-2a0a-24ca69e88278.png)

- [2] 以下いずれかの方法によりクロスドメイントラッキングを行う
    - [2-1] 「[グローバルサイトタグ(gtag.js)](https://support.google.com/google-ads/answer/7548399?hl=ja)」をトラッキングタグとして使っている場合：「グローバルスニペット」に[クロスドメイン用のコード](https://developers.google.com/gtagjs/devguide/linker)を追記する（補足参照）
    - [2-2] 「ユニバーサルアナリティクスタグ(analytics.js)」をトラッキングタグとして使っている場合：「[自動リンクドメイン](https://support.google.com/tagmanager/answer/6164469?visit_id=637105416874820058-195501965&rd=1)」（または「[オートリンクプラグイン](https://support.google.com/analytics/answer/1034342)」）の設置（補足参照）

- 補足

※[2-1]　「グローバルスニペット」のクロスドメイン用のコード

```gtag.js
<!-- Global site tag (gtag.js) - Google Ads: *** -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-***"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  //クロスドメイン用のコード
  gtag('set', 'linker', {
   'domains': ['masatoemata.github.io', 'myfirsraccount.firebaseapp.com']
  });

  gtag('js', new Date());
  gtag('config', 'AW-***');
</script>
```
  ※[2-2]　「ユニバーサルアナリティクス」の「自動リンクドメイン」
![cross-domain-tracking-auto-link-domains.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/8d0fceaf-fc74-7a63-e3cf-217a8faa8d7d.png)
`※{{allDomain}} = masatoemata.github.io,myfirsraccount.firebaseapp.com (定数)`


#検証メモ
##検証No.1
以下条件でクロスドメイン広告コンバージョン計測に**成功**。

- 条件

|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|リンクアカウント|なし|
|Google広告|自動タグ設定|あり|
|Googleアナリティクス|目標の完了|あり|
|Googleタグマネージャー|Googleアナリティクス設定変数 - オートリンクドメイン|あり|
|Googleアナリティクス|参照元除外リスト|あり(masatoemata.github.io)|
|Googleタグマネージャー|allwaysSendReferer|なし|

- 1 ランディングページの確認

URL: https://masatoemata.github.io/test/first.html?gclid=test

|カスタムディメンション|値|
|:--|:--|
|client id|1414608377.1575182780|
|session id|20191201-07053237|
((区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載))

▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|cpc|google|
|ユーザー|cpc|google|

- 2 クロスドメイン時の確認

URL: https://myfirsraccount.firebaseapp.com/#_ga=...&_gac=...test

|カスタムディメンション|値|
|:--|:--|
|client id|1414608377.1575182780|
|session id|20191201-02344928|

▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|(none)|(direct)|
|ユーザー|cpc|google|


- 3  コンバージョンポイントの確認

URL: https://myfirsraccount.firebaseapp.com/form_clientId.html

|カスタムディメンション|値|
|:--|:--|
|client id|1414608377.1575182780|


((区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載))
▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|(none)|(direct)|
|ユーザー|cpc|google|

- ユーザーエクスプローラーレポートの確認
![Google Analytics Conversion UserProfile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/4ffbdab6-f776-51f3-c1d8-098265a662a4.png)


- 集客レポートの確認
▽集客>すべてのトラフィック>参照元/メディア

|参照元/メディア|client id|ページ/セッション|コンバージョン|
|:--|:--|:--|:--|
|google / cpc|1414608377.1575182780|3|1|


##検証No.2
以下条件でクロスドメイン広告コンバージョン計測に**失敗**（**参照元除外リストを削除**）

- 条件

|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|リンクアカウント|なし|
|Google広告|自動タグ設定|あり|
|Googleアナリティクス|目標の完了|あり|
|Googleタグマネージャー|Googleアナリティクス設定変数 - オートリンクドメイン|あり|
|Googleアナリティクス|参照元除外リスト|**なし**(masatoemata.github.ioを削除)|
|Googleタグマネージャー|alwaysSendReferer|なし|


- 1 ランディングページの確認

URL: https://masatoemata.github.io/test/first.html?gclid=test

|カスタムディメンション|値|
|:--|:--|
|client id|256899691.1575190838|
|session id|20191201-05585437|

(区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載)
▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|cpc|google|
|ユーザー|cpc|google|

- 2 クロスドメイン時の確認

URL: 
https://myfirsraccount.firebaseapp.com/#_ga=...&_gac=...test

|カスタムディメンション|値|
|:--|:--|
|client id|256899691.1575190838|
|session id|20191201-09889877|
((区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載))
▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|参照|masatoemata.github.io|
|ユーザー|参照|masatoemata.github.io|

- 3 コンバージョンポイントの確認

URL:
https://myfirsraccount.firebaseapp.com/form_clientId.html

|カスタムディメンション|値|
|:--|:--|
|client id|256899691.1575190838|
|session id|20191201-09889877|
(区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載)

▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|(none)|(direct)|
|ユーザー|参照|masatoemata.github.io|

- ユーザーエクスプローラーレポートの確認
![Google Analytics Conversion UserProfile2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/2c6f902b-a6c2-6704-a0ec-88b53c3666b9.png)

- 集客レポートの確認
▽集客>すべてのトラフィック>参照元/メディア

|参照元/メディア|client id|ページ/セッション|コンバージョン|
|:--|:--|:--|:--|
|google / cpc|1950717675.1575186342|1|0|
|masatoemata.github.io / referral|1950717675.1575186342|2|1|

 - 考察

もし参照元除外をしていれば、クロスドメイン時のページでメディア/ソースが「(direct) / (none)」になる（※）。メディア/ソースが「(direct) / (none)」ならば、Googleアナリティクスの仕様上、前回のセッションの参照元/メディアが反映される。それが「cpc / google」ならば広告コンバージョンとして計測されるはずだが、今回実際は参照元除外をしていないため、クロスドメイン前のドメインがメディア/ソース＝「参照 / (前のドメイン)」になる。Googleアナリティクスの仕様上、参照元情報が異なるアクセスが行われた場合、トラッキングセッションが切り替わる。したがって、コンバージョンを行った今回のセッションは広告経由であるとは判別されなくなる。
※参照元除外リストにはプロパティに設定されたドメインが自動的に設定される。これを今回削除した。

##検証No.3
以下条件でクロスドメイン広告コンバージョン計測に**失敗**（**alwaysSendReferer**をTrueに設定）

- 条件

|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|リンクアカウント|なし|
|Google広告|自動タグ設定|あり|
|Googleアナリティクス|目標の完了|あり|
|Googleタグマネージャー|Googleアナリティクス設定変数 - オートリンクドメイン|あり|
|Googleアナリティクス|参照元除外リスト|**あり**(masatoemata.github.io)|
|Googleタグマネージャー|alwaysSendReferer|**あり**|

- 1 ランディングページの確認

URL: https://masatoemata.github.io/test/first.html?gclid=test

|カスタムディメンション|値|
|:--|:--|
|client id|398644281.1575249179|
|session id|20191202-06263977|
(区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載)

▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|cpc|google|
|ユーザー|cpc|google|

- 2 クロスドメイン時の確認

URL: https://myfirsraccount.firebaseapp.com/#_ga=...&_gac=...test

|カスタムディメンション|値|
|:--|:--|
|client id|398644281.1575249179|
|session id|20191202-07685228|
((区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載))

▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|(none)|(direct)|
|ユーザー|cpc|google|

- 3  コンバージョンポイントの確認

URL: 
https://myfirsraccount.firebaseapp.com/form_clientId.html

|カスタムディメンション|値|
|:--|:--|
|client id|398644281.1575249179|
|session id|20191202-07685228|
(区切り文字は本来"-"だがQiitaのテーブル仕様の都合上"-"で記載)

▽Googleアナリティクス>リアルタイムレポート>トラフィック

|表示オプション|メディア|ソース|
|:--|:--|:--|
|ページビュー|参照|myfirsraccount.firebaseapp.com|
|ユーザー|参照|myfirsraccount.firebaseapp.com|

- ユーザーエクスプローラーレポートの確認
<img width="882" alt="3回目_user-explorer.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/65c0c5fa-bcff-b64f-5849-810e994af492.png">


- 集客レポートの確認
▽集客>すべてのトラフィック>参照元/メディア

|参照元/メディア|client id|ページ/セッション|コンバージョン|
|:--|:--|:--|:--|
|google / cpc|398644281.1575249179|2|0|
|myfirsraccount.firebaseapp.com / referral|398644281.1575249179|1|1|

- 考察

もし、alwaysSendRefererを設定していなければ、クロスドメイン時のページでメディア/ソースが「(direct) / (none)」になる。メディア/ソースが「(direct) / (none)」ならば、Googleアナリティクスの仕様上、前回のセッションの参照元/メディアが反映される。今回はそれが「cpc / google」であるため、広告コンバージョン計測が可能。これに対して今回実際はalwaysSendRefererを設定していないため、常に参照元として「参照 / (前のドメイン)」がセットされる。Googleアナリティクスの仕様上、参照元情報が異なるアクセスが行われた場合、トラッキングセッションが切り替わる。したがって、今回コンバージョンを行ったセッションは広告経由であるとは判別されなくなっている。

##検証No.4
以下条件でクロスドメイン広告コンバージョン計測に**失敗**（ランディングページのURLパラメータgclidを設定せず、手動でCookieにgclid情報をセット）

|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|リンクアカウント|なし|
|Google広告|自動タグ設定|**なし**|
|Googleアナリティクス|目標の完了|あり|
|Googleタグマネージャー|Googleアナリティクス設定変数 - オートリンクドメイン|あり|
|Googleアナリティクス|参照元除外リスト|あり(masatoemata.github.io)|
|Googleタグマネージャー|allwaysSendReferer|なし|

 - 1 ランディングページの確認
URL: https://masatoemata.github.io/test/first.html

 - 2 クロスドメイン時の確認
    - URL
:https://myfirsraccount.firebaseapp.com/#_ga=2.212258836.1834576477.1575208490-177811258.1575208490
    - 手動でCookieにクリック情報をセット
    <img width="602" alt="Google Analytics Conversion Cookie-test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/b1ea39eb-103c-1dd7-d7bd-db456fa24ad4.png">

 - 3 コンバージョンポイントの確認
（割愛）

 - 集客レポートの確認
▽集客>すべてのトラフィック>参照元/メディア

|参照元/メディア|client id|ページ/セッション|コンバージョン|
|:--|:--|:--|:--|
|(direct) / (none)|177811258.1575208490|3|1|

#備考
##参照元/メディアとセッションの関係
この実験で見たように、以下の挙動はGoogleアナリティクスの仕様です：

- 参照元/メディアが変化したときにトラッキングセッションが切り替わる
- ただし、そのヒットの参照元/メディアが(none)/(direct)のときは前回のセッションの参照元/メディアが反映され、同一セッションとなる


##クリックIDのCookieについて
この実験では、Googleアナリティクスの広告コンバージョン計測のためにクリックIDのCookieが不要であることを確かめるために、コンバージョンポイント到達前にクリックIDのCookie(`_gac_Ua-***`,`_gcl_aw`)をブラウザから削除しておきました。

##リンクアカウントについて
リンクアカウントについて詳しくは未検証なのでいずれチェックしてみたいと思います。


---
何かあればお手数ですが、本記事か以下アカウントでお知らせください！

**\ *Follow Me!* /**
**[*Qiitaアカウント*](https://qiita.com/MasatoEmata)**
**[*Twitterアカウント*](https://twitter.com/masatoemata)**