GoogleAnalyticsで外部サイト認証をしたユーザがどこから来たのか（リファラーを）知りたい

# 認証を挟むと本当の流入先がわからなくなる問題

例として、facebook認証でアカウント作成ができるWebサービスがあるとします。
アカウント作成をコンバージョン達成とみなす場合、アカウント作成したユーザが何のサービス(関連サイトもしくはGoogle検索など)を経由してコンバージョン達成したのかが気になります。
これをGoogleAnalyticsで取得したいと考えた場合、**リファラーをチェックする**のが常套手段と思われます。

次のように遷移したセッションがあった場合、`page_b`の参照元(リファラー)は **google** となっているはずです。

> Googleから流入　> example.com/page_a > example.com/page_b


しかし、次のような認証を挟んだ遷移があるとします。

> Googleから流入 > example.com/page_a > facebook.comでfacebook認証 > example.com/page_b

この時、 認証のためにfacebook.comに遷移しているため、 `page_b`の参照元は**facebook**となってしまいます。

`page_b`にたどり着いたユーザがどこからやってきたのかを調べようとした場合、
その多くがfacebookからの流入ということになり、
残念ながら本当の流入先の情報が得られていない状況となってしまいます。

この状況を回避し、上記の場合をgoogleからの流入と認識させるためには、設定対応が必要です。

# 設定方法

## 参考
だいたいこちらを拝見して解決したのですが、色々追加で調べたこともあったりしたのでまとめました。

- [Googleアナリティクス コミュニティ | 自サイトドメインからの流入の計測](https://www.ja.advertisercommunity.com/t5/%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88/%E8%87%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%8B%E3%82%89%E3%81%AE%E6%B5%81%E5%85%A5%E3%81%AE%E8%A8%88%E6%B8%AC/td-p/10840#)


## ざっくりとした流れ

facebook認証から戻ってきたタイミングで、リファラーの値をfacebookから~~除外設定されているものに差し替えます。~~

=> 単純にリファラーを削除するだけのほうがスマートに解決できそうです。
詳しくは[コメント](http://qiita.com/beta_chelsea/items/5d41803601689a5d2047#comment-69f8f69981f609d73415
)を参照してください。



## 1. 参照元除外設定を確認/追加

~~analyticsにアクセスし、 `管理 > (対象の)プロパティ > トラッキング情報 > 参照元除外リスト` を選択。
除外したいドメイン名を設定します。もしかしたらもう自サイトドメインが登録されているかもしれないです。
何もなければ流入先としてありえない値として、とりあえず `example.com` など入れるとよさそう。値が有効なドメインでないと登録できず、適当な文字列は登録できないので注意。~~

こちらのステップは省略可能です。
詳しくは[コメント](http://qiita.com/beta_chelsea/items/5d41803601689a5d2047#comment-69f8f69981f609d73415
)を参照してください。


## 2. facebook認証から戻ってきたタイミングのURLを工夫する

特定のURLパラメータなどで、facebook認証完了後のページがわかるようにします。
例: /page_b?signin=facebook


## 3. analytics.jsの参照設定を変更する

2のパラメータがついているタイミングで、analyticsに送信するreferrerの値を1で除外したものに差し替えます。
こうすることで、 

> facebook.comでfacebook認証 > example.com/page_b?signin=facebook

と遷移したとき、`page_b`のリファラーは除外されてノーリファラー( `(direct) / (none) ` 扱い)となり、同一セッションの直前のデータを引き継いでくれます。

```js
if (window.location.pathname.match(/signin=facebook/)) {
  ga('set', 'referrer', 'http://example.com');
}
   
ga('send', 'pageview');
```

## 補足
ただ、これでリファラーがわかるようになるのは設定以後なので、
それ以前にfacebookログインしてfacebookからの流入扱いされているユーザはしばらくそのまま扱われるかも...?　（この辺り、まだ不勉強です）


# 色々調べたanalticsのアレコレ(注釈)

## analyticsはドメインが同じなら参照元を引き継ぐ

example.com/page_a > example.com/page_b の遷移はドメインが同じなので、analyticsは参照元を送信せず、 page_b は page_a の参照元を引き継ぐという挙動になっているようです。
そして、 page_a の参照元を引き継いでいるので google が参照元の扱いとなります。

- [analytics.js のフィールド リファレンス - 参照URLを常に送信](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference?hl=ja#alwaysSendReferrer)

> デフォルトでは、トラフィックの参照元の関連付けに使用される HTTP 参照 URL は、参照元サイトのホスト名が現在のページのものと異なる場合にのみ送信されます。

- [Googleアナリティクスでは同一ドメイン間のページ遷移で前のページにタグが入っていないと参照元がノーリファラーになっちゃうよ問題 - テストのブログ](http://ummmummm.hatenablog.com/entry/2016/04/22/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%A7%E3%81%AF%E5%90%8C%E4%B8%80%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%96%93%E3%81%AE%E3%83%9A%E3%83%BC%E3%82%B8%E9%81%B7)

## 認証のための遷移はセッションが切り替わってしまうのか

セッションの有効期限が切れていない場合でも、別の流入先と見なされれば切り替わるようです。

- [アナリティクスでのウェブ セッションの算出方法 - アナリティクス ヘルプ](https://support.google.com/analytics/answer/2731565?hl=ja)
    - 「キャンペーンの切り替わりによる有効期限」を参照

> アナリティクスでは、ユーザーのキャンペーン ソースが変わるたびに新しいセッションが開始されます。現在のセッションが終わっていない（最後のリクエストから 30 分経過していない）場合でも、キャンペーン ソースが変わると最初のセッションが終了して、次の新しいセッションが開始されます。

## ノーリファラーなら参照元を引き継ぐの？

下記のような表記になっているので、更新されない=引き継ぐと認識しました。

- [アナリティクスでのウェブ セッションの算出方法 - アナリティクス ヘルプ](https://support.google.com/analytics/answer/2731565?hl=ja)
    - 「ノーリファラー」を参照

> キャンペーン ソースがノーリファラーの場合は、検索エンジンや参照元サイト、キャンペーンなどの現在のキャンペーン ソースが更新されることはありません。


# まとめ

公式ドキュメントとかコミュニティがしっかりしているので、そっちを読んでもらったほうがよさそう。