【GA4】参照元/メディアを仕組みから完全に理解する

# 本記事で理解出来ること
- 参照元/メディアとは？
    - 参照元
    - メディア
- 参照元/メディアの判定がどのように行われているか
    - utmパラメータ
    - リファラー
- スコープごとの参照元/メディア
    - 最初のユーザーの参照元/メディア
    - セッションの参照元/メディア
    - 参照元/メディア
- BigQuery生データと参照元/メディアの対応、それらが記録されるタイミングとデータの引継がれ方
- page_viewイベントのイベントパラメータに記録されている`source`,`medium`と`traffic_source.source`,`traffic_source.medium`の違い


本記事では、GA4の「参照元/メディア」について仕組みの部分まで詳細に理解することを試みる

# ざっくりまとめ
- 参照元/メディアは流入元を意味するもので、どの媒体(参照元)からどうやって(メディア)流入したかを意味する。
- utmパラメータが設定されていたらその値を、設定されていなかったらリファラーにて自動判定する。
    - どちらも使えない場合にdirect/noneが計測される。
- 前に何も付かない参照元/メディアはキーイベントが起こったセッションの参照元/メディアの値が適用される
- BigQueryテーブルでは`traffic_source.source`,`traffic_source.medium`が参照元/メディアに該当する
-  page_viewイベントのイベントパラメータに記録されている`source`,`medium`と`traffic_source.source`,`traffic_source.medium`には値の違いがあるため注意



# ▼参照元/メディアとは？
参照元/メディアは二つの要素からなる。参照元とメディアである。それぞれについて見る

### 参照元
どの媒体(誰)からの流入なのか ex)google,bing

### メディア
その媒体の中でのどこからの流入なのか ex) organic,refferal
➡google / organicであれば、Googleという媒体の中でも自然検索にて流入したという意味

# ▼参照元/メディアの判定ロジック

結論：**utmパラメータ > リファラー**の順で決めている
utmパラメータが設定されていればその値を使い、参照元とメディアを設定する。
設定されていなければリファラーの値を使用し自動で参照元とメディアを判定する。

### utmパラメータ

URLの末尾にgoogleが指定する`utm_source`などのパラメータを含めるとその情報を元に流入元を判断するように出来る。
utmパラメータの`utm_source`に対応するのが「参照元」であり、`utm_medium`は「メディア」に対応する。

https://support.google.com/analytics/answer/10917952?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

### リファラー
リファラーは、ページに訪れる前のページの情報である。もう少し言うとHTTPリクエストに含まれる情報である。また、この値はブラウザにて`document.refferer`で確認できる値である。


### 事例を元に参照元/メディアの判定ロジックを理解する

ページ`https://www.example.com`への流入を考える

#### ➀以下のようなutmパラメータが設定されている場合
`https://www.example.com/?utm_source=your-site&utm_medium=email`

以上のページにユーザが訪れた場合の参照元/メディアの判定は以下
utm_source=your-site ➡ 参照元はyour-site
utm_medium=email ➡ メディアはemail
つまり、参照元/メディアは`your-site/email`となる

#### ➁utmパラメータが設定されておらず、google検索にて流入した場合

計測しているページのリファラーを確認する(document.refferer)
➡`https://www.google.com/`
リファラーの値によって、googleからの流入であることが自動で判定される。
この時点で参照元は`google`であると決まる

続いて、メディアを判定する。
リファラーの値が存在するためrefferalかorganicかに絞られる。
googleが持っている検索エンジンリストのようなものに`https://www.example.com`が存在するためこの流入は、自然検索からの流入であると判定する。
よってメディアを`organic`と決める。

つまり、参照元/メディアは`google/organic`となる

#### ③utmパラメータが設定されておらず、ブックマークから流入した場合
計測しているページのリファラーを確認する。
➡ブックマークから流入したためリファラーの値が存在しない
➡参照元,メディアともに自動で判定出来ないため`direct/none`だと判定

# ▼スコープごとの参照元/メディア
参照元/メディアはスコープごとに３つ分かれる。
- 最初のユーザーの参照元/メディア
- セッションの参照元/メディア
- 参照元/メディア

### 3つのディメンションの違い

https://support.google.com/analytics/answer/11080067?hl=ja#zippy=%2C%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

| ディメンション名 | 意味 |
|----------------|------------------------------|
| ユーザの参照元/メディア | その**ユーザの最初のセッション**の参照元/メディア |
| セッションの参照元/メディア | **セッションの最初**の参照元/メディア |
| 参照元/メディア | **キーイベントが行われたセッション**の最初の参照元/メディア |

「参照元/メディア」はキーイベントが行われたセッションに限定している点に注意

### 事例を元にスコープごとの参照元/メディアを理解する
1人のユーザが初訪問から三回のセッションを記録した例を考える。

```
セッション⑴ from Google検索 (参照元/メディア：google/organic)
session_start, page_view

セッション⑵ from ブックマーク (参照元/メディア：direct/none)
page_view, click

セッション⑶ from ブックマーク (参照元/メディア：direct/none)
page_view, click , purchase (キーイベント)
```

この場合、
ユーザの最初の参照元/メディア：`google/organic`
セッションの最初の参照元/メディア：➀`google/organic`➁`direct/none`③`direct/none`
参照元/メディア：`direct/none` (キーイベントを記録した際のセッションの最初の参照元/メディア)
となる。

# ▼BigQuery生データと参照元/メディアの対応、それらが記録されるタイミングとデータの引継がれ方

### 参照元/メディアとBigQueryにエクスポートしたGA4データとの対応

`traffic_source.source`,`traffic_source.medium`というカラムが対応する。
セッションの参照元/メディアなどのディメンションには上記のカラムが使われていると予想する

### 参照元/メディアが記録されるタイミングとデータの引継ぎ
結論：session_startイベント発生時に`traffic_source.source`,`traffic_source.medium`が取得されるイメージ。
そして、セッション内にて起こった全てのイベントに対し`traffic_source.source`,`traffic_source.medium`が紐づけられる

# ▼page_viewイベントのイベントパラメータに記録されている`source`,`medium`とBigQueryの`traffic_source.source`,`traffic_source.medium`の違い

結論：
`traffic_source.source`,`traffic_source.medium`はsession_start時に記録されセッション内で引き継がれる値。
一方page_viewイベントのイベントパラメータに記録されている`source`,`medium`はpage_viewごとに記録されるそのページのURLに含まれるutmパラメータの値である。
つまり、**記録されるタイミングに違いがあり値としても異なる**場合がある。

#### 事例を見る
1人のユーザが同じセッション内にて以下のような行動を行ったとする。

```
⑴ページ`https://www.example.com?utm_source=hoge`にてsession_start
⑵clickイベント
⑶リロード(`https://www.example.com?utm_source=hoge`にてpage_viewが記録される)
⑷パラメータを以下URLのように手動で変えた上でリロード
`https://www.example.com?utm_source=fuga`➡page_viewイベントが記録される
```

この際の`traffic_source.source`とイベントパラメータ`source`の違いを見ると以下のようになる

 No |イベント名 | traffic_source.source | イベントパラメータ`source` |
|------------------|------------|----------------|------------------------------|
| 1| session_start |hoge||
| 2 | click |hoge||
|3 | page_view |hoge|hoge|
|4 | page_view |hoge|fuga|

# ▼おまけ
## チャネルグループとの違いは?
参照元とメディアを文字列にて分類しなおしたのがチャネルグループ
分類の仕方は自分でカスタムできる

https://support.google.com/analytics/answer/9756891?hl=ja

## Google公式 流入元についての説明ページ

https://support.google.com/analytics/answer/15612152?hl=ja&sjid=17622308077861674479-NC&visit_id=638810164033621135-1217188070&ref_topic=15598441&rd=1

## direct/noneで流入したときの自動補完

https://and-aaa.com/report/ga4-source-medium

direct/noneから流入したとき、以前にページを訪問していればその時の参照元で置き換えられる。
つまり、一回目のセッションでgoogle/cpcが記録されて入れば、次回以降ブックマークなどにて流入してもdirect/noneではなく、google/cpcとなるらしい。

以下のような記載がある。そのため、direct流入の値が何かしらで補完されていることは間違いなさそうだ。
しかし、この記述だけではUTMパラメータを設定している場合のみ補完される可能性もありそうだ。詳細については調査が必要そうだ。

 `Sessions initiated by direct entrance are attributed to the UTM values for that user.`

https://support.google.com/analytics/answer/11080067?hl=en#zippy=%2Cin-this-article