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

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

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

- 背景：
公式ドキュメント「[Google 広告のコンバージョンをトラッキングする方法](https://support.google.com/google-ads/answer/7521212)」を見ても、クロスドメインコンバージョン計測に必要十分な設定は何なのか、どう検証するのか、自分のなかでいまいち消化できていないと感じたことです（もしかするとサポート記事が今後アップデートされることでこの投稿時点の感想もアップデートされるかもしれません）。
- 関連：**Googleアナリティクス**との違いは「[Googleアナリティクス：クロスドメイン広告コンバージョン計測の実装パターンと検証](https://qiita.com/MasatoEmata/items/907b291f6ee0d480e368)」で確認しました。


#結論
必要最低限の実装は以下 **1, 2のどちらか**（3は通常不要）。さらに、アカウント・キャンペーンごとにコンバージョン計測をしたい場合は広告アカウントとアナリティクスプロパティのリンクをする必要がある。

##1. [グローバルサイトタグ(gtag.js)](https://support.google.com/google-ads/answer/7548399?hl=ja)
- 「**[自動タグ設定](https://support.google.com/google-ads/answer/3095550?hl=ja)**」
- 「**グローバルスニペット**」＋**[クロスドメイン用のコード](https://developers.google.com/gtagjs/devguide/linker)** の設置
- 「**イベントスニペット**」の設置
  
→ ランディングページのアクセス時、「グローバルスニペット」がURLパラメータ`gclid`(広告クリックID)を取得し、Cookie`_gcl_aw`の値としてセットする。このスニペットに「クロスドメイン用のコード」を加えることでクロスドメイン時にもファーストパーティCookieを引き渡すことが可能になる。コンバージョン時には「イベントスニペット」によりCookieで保持していた広告クリックIDを取り出してGoogle広告に送信することでコンバージョン計測を行う。

##2. ユニバーサルアナリティクスタグ(analytics.js)

- 「**[自動タグ設定](https://support.google.com/google-ads/answer/3095550?hl=ja)**」
- 「**ユニバーサルアナリティクスタグ(analytics.js)**」＋「**[自動リンクドメイン](https://support.google.com/tagmanager/answer/6164469?visit_id=637105416874820058-195501965&rd=1)**」（または「[オートリンクプラグイン](https://support.google.com/analytics/answer/1034342)」）の設置
- **広告コンバージョンタグ**の設置
    
    ※本記事ではGoogleタグマネージャーでデフォルトで存在するタグを想定

→ ランディングページのアクセス時、「analytics.js」がURLパラメータ`gclid`(広告クリックID)を取得し、Cookie`_gac_UA-***`の値としてセットする。後述の「自動リンクドメイン」または「オートリンクプラグイン」と呼ばれる設定によりクロスドメイン時にもファーストパーティCookieを引き渡すことが可能。コンバージョン時には「広告コンバージョンタグ」によりCookieで保持していた広告クリックIDを取り出してGoogle広告に送信することでコンバージョン計測を行う。


##3. コンバージョンリンカー
- 「**[自動タグ設定](https://support.google.com/google-ads/answer/3095550?hl=ja)**」
- 「**コンバージョンリンカー**」タグの設置
- **広告コンバージョンタグ**の設置

→ analytics.jsかgtag.jsを使っていれば不要。

#前提：計測の仕組み
コンバージョン計測の大きな流れとしては、まずクリックIDのURLパラメータ発行を行い、それを元にCookieを生成することでコンバージョンポイントまでクリックIDのデータを引き継ぎ、コンバージョンタグでGoogle広告へ送信するといった形になります。

**1. クリックIDをURLパラメータに発行**
ユーザーに広告が表示されるタイミングです。この広告のリンク先(ランディングページ)URLのパラメーターに("gclid")が付与されます。このパラメーターは広告表示時にGoogle広告サーバーが発行した広告クリックを識別するためのIDです。
※**基本的に「[自動タグ設定](https://support.google.com/google-ads/answer/3095550?hl=ja)」が有効になっていればこちらの処理が行われますが、今回検証したいのは次以降の動きです。**

**2. クリックIDをCookieに保存**
ユーザーが広告をクリックしてランディングページへアクセスするタイミングです。広告クリックを識別するためのURLパラメーター("gclid")を元にブラウザのCookieが作られます。

**3. Cookie=クリックIDのクロスドメイン**
ユーザーがランディングページからドメインを跨いで完了画面へアクセスするタイミングです。何もしなければこのタイミングでCookie=クリックIDが抜け落ちてしまいます。したがって、クロスドメインと呼ばれる、別ドメインへのCookieの引き渡しが必要です(新しいファーストパーティCookie(その新しいドメイン用のCookie)が作成されます)。

**4. CookieをもとにクリックIDをGoogle広告へ送信**
ユーザーが完了画面を読み込むタイミングです。Google広告のコンバージョンタグが発火したときに、[3]のCookieからgclidのデータがGoogle広告へ送信されます。


#「方法 1: 新しいGoogle広告コンバージョントラッキングタグを使用してコンバージョンをトラッキングする」に従った場合
##前提
|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|自動タグ設定|あり|
|Googleアナリティクス|analytics.js|なし|
|Google広告|グローバルサイトタグ「グローバルスニペット」「イベントスニペット」|あり|
|Google広告|Googleアナリティクスとのアカウントのリンク|なし|
|Googleタグマネージャー|Google広告のコンバージョントラッキング|なし|
|Googleタグマネージャー|コンバージョンリンカータグ|なし|

関連ドキュメント：

- [グローバル サイトタグ（gtag.js）>ガイド>ドメインをまたぐカスタマー ジャーニーを測定する](https://developers.google.com/gtagjs/devguide/linker)
- [Google 広告のコンバージョン トラッキングにグローバル サイトタグを使用する](https://support.google.com/google-ads/answer/7548399?hl=ja)


##検証内容
- **クリックIDをCookieに保存**
OK! URLパラメータ`gclid`を元にCookie`_gcl_aw`が作られている
![Global-Site-Tag-Global-Snippet-Cross-Domain-Conversion-Landing-Page-gclid-_gcl_aw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/d596ecc8-d826-0af1-ace2-6de989b29d3b.png)
`ランディングページURL:https://masatoemata.github.io/test/first.html?gclid=test`

- **Cookie=クリックIDのクロスドメイン**

**クロスドメイン用のコードを追記するとCookie** 
OK! `_gcl_aw`が別ドメインのファーストパーティクッキーとして引き渡されている
※クロスドメイン用のコードを追記しなければクロスドメインができるようにはならない
![Global-Site-Tag-Global-Snippet-Cross-Domain-Conversion-Next-Page-gclid-_gcl_aw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/97e5dc58-fa41-cda3-548f-df89e3e59977.png)

`クロスドメイン先URL:https://myfirsraccount.firebaseapp.com/?_gl=***_gcl_aw***`

- **CookieをもとにクリックIDをGoogle広告へ送信**

OK! `gclaw: test` というURLパラメータでHTTPリクエストが行われている。
![Global-Site-Tag-Global-Snippet-Cross-Domain-Conversion-Conversion-Page-gclid-_gcl_aw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/26f1f36d-da4a-9e9d-ce4e-e01184402b3f.png)
`コンバージョンポイントのURL:https://myfirsraccount.firebaseapp.com/form_clientId.html`

```https://www.googleadservices.com/pagead/conversion/1010802458/
Parameters:
  label: ******
  data: event=conversion
  gclaw: test
  ...
```


##実装方法
以下タグの設置（「自動タグ設定」は既に有効とする）

- (1)グローバルスニペットをGoogle広告またはGoogleアナリティクスから取得
- (2)[クロスドメイン用のコード](https://developers.google.com/gtagjs/devguide/linker)を(1)に追記して全ページに設置

```allpages.html
<!--global snippet-->
<!--Global site tag (gtag.js)-->
<script async src="https://www.googletagmanager.com/gtag/js?id=***"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  //クロスドメイン用のコード
  //なお、「クロスドメイン用のコード」を最下部に記載したところ動かなかった。
  gtag('set', 'linker', {
   'domains': ['(ドメイン1)', '(ドメイン2)’]
  });

  gtag('js', new Date());
  gtag('config', '***');
</script>
```
- (3)イベントスニペットをGoogle広告から取得してコンバージョンポイントに設置

```thanks.html
<!--event snippet-->
<!-- Event snippet for ReachForm conversion page -->
<script>
//「タグの順序付け 」で(1)の後に発火させるようにする
  gtag('event', 'conversion', {
      'send_to': '***',
      'transaction_id': ''
  });
</script>
```


#「方法 2: Google タグ マネージャーを使用して、新しいコンバージョン リンカータグを追加する」に従った場合
##前提
|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|自動タグ設定|あり|
|Googleアナリティクス|analytics.js|なし|
|Google広告|グローバルサイトタグ「グローバルスニペット」「イベントスニペット」|なし|
|Google広告|Googleアナリティクスとのアカウントのリンク|なし|
|Googleタグマネージャー|Google広告のコンバージョントラッキング|あり|
|Googleタグマネージャー|コンバージョンリンカータグ|あり|

##検証内容
- **クリックIDをCookieに保存**

OK! URLパラメータ`gclid`を元にCookie`_gcl_aw`が作られている。
![Conversion-Linker-Cross-Domain-Conversion-Landing-Page-gclid-_gcl_aw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/abc0750c-f92d-c8c4-a555-74a6188c5364.png)

`ランディングページURL:https://masatoemata.github.io/test/first.html?gclid=test`

- **Cookie=クリックIDのクロスドメイン**

OK! Cookie`_gcl_aw`が別ドメインに引き渡されている。
![Conversion-Linker-Cross-Domain-Conversion-Next-Page-gclid-_gcl_aw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/d5a3a4e5-c5a9-9829-85c4-10f59991f3b2.png)
`クロスドメイン先URL:https://myfirsraccount.firebaseapp.com/?_gl=***_gcl_aw***`

- **CookieをもとにクリックIDをGoogle広告へ送信**

OK! (画像省略：後述の方法と同様「方法 3: Google アナリティクスを使用する」)
`コンバージョンポイントのURL:https://myfirsraccount.firebaseapp.com/form_clientId.html`

```https://www.googleadservices.com/pagead/conversion/1010802458/
Parameters:
  label: ******
　gclaw: test
  ...
```

##実装方法
以下タグの設置（「自動タグ設定」は既に有効とする）
![Conversion-Linker-Cross-Domain-TagManager-Setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/ab868a0c-6148-1401-d140-4c2c1a53fa06.png)
ほか、「前提」を満たすようにする

#「方法 3: Google アナリティクスを使用する」に従った場合
##前提
|ツール|設定項目|設定有無 |
|:--|:--|:--|
|Google広告|自動タグ設定|あり|
|Googleアナリティクス|analytics.js|あり|
|Google広告|グローバルサイトタグ「グローバルスニペット」「イベントスニペット」|なし|
|Google広告|Googleアナリティクスとのアカウントのリンク|あり|
|Googleタグマネージャー|Google広告のコンバージョントラッキング|あり|
|Googleタグマネージャー|コンバージョンリンカータグ|なし|

##検証内容
- **クリックIDをCookieに保存**

OK! URLパラメータ`gclid`を元にCookie`_gac_UA-***`が作られている。
![Analytics-Js-Cross-Domain-Conversion-Landing-Page-gclid-_gac_UA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/8e1d6d55-4760-88fc-58b6-338828464a84.png)
`ランディングページURL:https://masatoemata.github.io/test/first.html?gclid=test`

- **Cookie=クリックIDのクロスドメイン**

OK! Cookie`_gac_UA-***`が別ドメインに引き渡されている。
![Analytics-Js-Cross-Domain-Conversion-Next-Page-gclid-_gac_UA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/a36c07ac-f611-93cb-feec-62ac09c75c12.png)
`クロスドメイン先URL:https://myfirsraccount.firebaseapp.com/?***_gac=***.test`

- **CookieをもとにクリックIDをGoogle広告へ送信**

OK! 
![Analytics-Js-Cross-Domain-Conversion-Conversion-Page-gclid-_gac_UA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/0110828f-7a3a-4e87-3794-633918b904a9.png)
`コンバージョンポイントのURL:https://myfirsraccount.firebaseapp.com/form_clientId.html`

```https://www.googleadservices.com/pagead/conversion/1010802458/
Parameters:
  label: ******
  gac: UA-******:test
  ...
```

##実装方法
以下タグの設置（「自動タグ設定」は既に有効とする）
- (1)[Googleタグマネージャーの「Googleアナリティクス設定」変数で「自動リンクドメイン」を設定](https://support.google.com/tagmanager/answer/6164469?visit_id=637105416874820058-195501965&rd=1)（コードに直接書く場合は「[オートリンクプラグイン](https://support.google.com/analytics/answer/1034342?hl=ja)」のコードを記載する）
![cross-domain-tracking-auto-link-domains.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521810/010c962e-a634-da71-f1f5-c9128b536630.png)


`※{{allDomain}} = masatoemata.github.io,myfirsraccount.firebaseapp.com (定数)`

- (2)Googleタグマネージャーの「Google アナリティクス: ユニバーサル アナリティクス」タグを設定(これに(1)を組み込む)
- (3)Googleタグマネージャーの「Google 広告のコンバージョン トラッキング」タグを設定

ほか、「前提」を満たすようにする

#まとめ
Google広告のクリックIDをCookie化してクロスドメイン処理を行うために、以下いずれかの方法で実装する

**1. グローバルサイトタグ(gtag.js)の「グローバルスニペット(＋クロスドメイン用のコード)」＋「イベントスニペット」の設置**
→ URLパラメータ`gclid`からCookieに`_gcl_aw` がセットされてクロスドメインが行われる

**2. 「ユニバーサルアナリティクスタグ(analytics.js)」＆「自動リンクドメイン」（または「オートリンクプラグイン」）＋広告コンバージョンタグの設置**
→ URLパラメータ`gclid`からCookieに`_gac_UA-***` がセットされてクロスドメインが行われる

※「自動タグ設定」を有効にすることが前提
なお、アカウント・キャンペーン単位でコンバージョンリンカータグ計測を行うために広告アカウントをアナリティクスのプロパティとリンクする場合も、「自動タグ設定」が前提となる。
※「コンバージョンリンカータグ」は不要
基本的にanalytics.jsかgtag.jsの設置、およびそれにクロスドメイン用のコード・設定がされていれば、クロスドメインの広告コンバージョンは行われるようになる。したがって、Googleタグマネージャーの「コンバージョンリンカータグ」はそれらのタグが埋め込まれていないサイト＝古いタグ(ga.js)が設置されたサイトなどで使うことが前提になる。


#疑問点
## Google広告とアナリティクスをリンクする意味
- 疑問の背景

ここまでの検証で、analytics.jsまたはgtag.jsを設置すればクリックIDがコンバージョンポイントまで引き継がれることは分かった。これで十分なように見えるが、公式ドキュメントの「[方法 3: Google アナリティクスを使用する](https://support.google.com/google-ads/answer/7521212)」ではGoogle広告アカウントとアナリティクスのプロパティをリンクするように説明されている。リンクすることで何が変わるのか？

- → Google広告主コミュニティで質問中

[【CV計測】 Googleアナリティクスと広告アカウントをリンクしたときの仕様を教えてください。](https://support.google.com/google-ads/thread/21105033?hl=ja)

- → 分かったこと（追記）

Google広告コンバージョンタグで計測するのではなく、Googleアナリティクスで作った目標を広告側にインポートするためにリンクする（ちなみに[プロパティをリンクしておくことでオーディエンスのインポートも可能になる](https://support.google.com/google-ads/thread/6574679?hl=ja)）

※公式ドキュメント
「[アナリティクスの目標とトランザクションをGoogle広告のコンバージョントラッキングにインポートする](https://support.google.com/analytics/answer/1034306?hl=ja&utm_id=ad)」
「[アナリティクスのリマーケティング用ユーザーリストについて](https://support.google.com/analytics/answer/2611268?hl=ja&utm_id=ad)」

## クリックIDに対応するCookieが`_gcl_aw`でも`_gac_UA-***`でもコンバージョンタグでハンドリングされるのか？
→ソースコードを見て以下の記事にまとめました。
[Google広告コンバージョンタグのソースコードでどうクリックIDを処理しているのか見てみる](https://qiita.com/MasatoEmata/items/e39227f9a1c1cd3b1473)


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

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