GA4 ページの滞在時間を調べたい
GA4で各ページの滞在時間を調べるときに知ったことをまとめます。

エンゲージメントタイム
GA4では、滞在時間は計測されておらず、代わりに エンゲージメントタイム(engagement_time_msec) が計測されています。
セッション開始(ユーザーがサイトに来たとき)から計測が開始され、以下のタイミングで計測終了します。
- アプリをバックグラウンドにしたとき
-> アプリを終了させずに、別アプリいじる - ページから離れたとき
-> ページ遷移、タブを閉じる、別タブに切り替える、アプリを閉じる - サイト/アプリが異常終了したとき
計測された秒数(engagement_time_msec)は次に計測されるイベントにくっつけて送られます。
別ページに遷移したり、サイトを離れる場合は、user_engagementイベントが発火し、送られていない分のエンゲージメントタイムが送られます!
例
ユーザーが以下の行動をした場合、、、
- サイト訪問
- 8秒後、下方向へスクロールした
- 11秒後、次のページへ遷移した
- 6秒後、下方向へスクロールした
- 7秒後、サイトを離れた
| ユーザー行動 | イベント名 | エンゲージメントタイム(engagement_time_msec) |
|---|---|---|
| サイト訪問 | first_visit, page_view, session_start | なし |
| スクロール | scroll | 8 |
| 次ページへ遷移 | user_engagement | 11 |
| 次ページ表示 | page_view | なし |
| スクロール | scroll | 6 |
| サイト離脱 | user_engagement | 7 |
*本来、エンゲージメントタイムはミリ秒で記録されます
(ここまでは、ほぼ公式を日本語訳しただけになってしまった、、)
次のページへ遷移やサイト離脱時に、user_engagementイベントが発火しているのを見たことがなかったので、デバッグツールで確認しましたが、、発火されていなかったです、、、。
公式の説明と食い違っている挙動でした。以下が実際に計測したものです↓↓
(秒数は適当)
| ユーザー行動 | イベント名 | エンゲージメントタイム(engagement_time_msec) |
|---|---|---|
| サイト離脱 | user_engagement | 0.3 |
| サイト訪問 | page_view | なし |
| スクロール | scroll | 8 |
| 次ページへ遷移 | なし | |
| 次ページ表示 | page_view | 6 |
| スクロール | scroll | 6 |
| サイト離脱 | click | 7 |
user_engagementイベント
自動収集イベントの1つですが、具体的にどういうタイミングで発火しているのか、確認しておきます。
公式の定義([GA4] Automatically collected events - Analytics Help) によると、アプリが開かれている、またはWebページがユーザーの画面でアクティブになっている状態が1秒以上続いた場合user_engagementイベントが発火するとのこと。
実際の挙動を確認すると、ページ開いて1秒くらいでuser_engagementイベントが発火していました!ユーザーがアクティブになったよ〜ということを記録するイベントと思えば良さそうですね。
(やはり、エンゲージメントタイムの説明にあったuser_engagementの発火タイミングは間違っていそうです、、、。謎は深まった。。)
user_engagementイベントについて、同じく疑問を持って色々試してみている人もいました。
Demystifying user_engagement Event in Google Analytics 4 - Analytics Mania
↑このブログの人のイベント発火タイミングも今の実際の挙動とは異なっていました、、。
仕様変更が頻繁にあったりするのかもしれませんね。
エンゲージメントタイムを集計してみる
レポート
エンゲージメント > Pages and screens で各ページごとのAverage engagement time per sessionが確認できます。

comparison(比較対象)を追加して、会員登録済みユーザーとそれ以外を比較したり、filterで条件を絞り込んだりもできるので、だいたいの見たいものはレポートで賄えそうです。

探索
探索で集計してみます。詳しい条件で絞り込みたい場合等は、探索が必要です。
メトリクスにAverage engagement time per sessionが用意されているので、ディメンションにpage_locationを設定すれば、ページごとに1セッションあたりの平均エンゲージメント時間を取得できます。
例えば、会員登録したセッションについて、各ページのエンゲージメントタイムを知りたい場合、、
- セグメント
- 会員登録したセッションセグメント
- ディメンション
- page_location: ページのパス
- メトリクス
- Average engagement time per session: 1セッションあたりの平均エンゲージメント時間
- User engagement: エンゲージメント時間(秒)

まとめ
- user_engagementイベントの謎は深い
- エンゲージメント時間 ≒ 滞在時間
- エンゲージメント時間は、レポート/探索で簡単に取得できる
Discussion