データ分析とインテリジェンス

[GA4+BigQuery] ページ別スクロール数/率

ざっくりみるならこれでよし

スクロールのイベント条件は「ユーザーが各ページの最下部まで初めてスクロールしたとき(垂直方向に 90% の深さまで表示されたときなど)」。参照:[GA4] 自動的に収集されるイベント

ページタイトルを使って直接割合を集計するとエラーになる(理由は後述)。なのでいったん日別・ページ別にpage_viewとscrollのイベント数を集計する。

スクロール数でも率でもあとは必要に応じてここから作ればいい。その際page_view=0は除外する。精査はしていないがざっくりみたいなら多分これで大丈夫。


SELECT 
DATE(timestamp_micros(event_timestamp), 'Asia/Tokyo') as date
,(select value.string_value from unnest(event_params) p where p.key = 'page_title') page_title
,sum(case when event_name='scroll' then 1 else 0 end) as cnt_scroll
,sum(case when event_name='page_view' then 1 else 0 end) as cnt_pv
FROM以降は割愛

スクロール数/率

  • イベント名を絞り込む
  • page_viewとの結合キーは「user_pseudo_id,page_title,ga_session_id」

イベント名を絞り込む

page_viewとは別のイベントに入っているので「event_name='scroll'」を指定。

page_viewとの結合キーは「user_pseudo_id,page_title,ga_session_id」

スクロールの集計だけならこれでもいいけど、使いまわしが効かない。なのでちゃんとやるならpage_viewのイベントにscrollしているかのフラグを作るのが一番よさそう。

確認できている範囲では「1セッション内では1ページに対してscrollは1イベントしか発生しない」らしい。データを比較するとsession_idはあってもどのpvなのかを特定するキーが見当たらない。なのでイベントが複数発生はしないだろうと思われる。その前提であれば結合キーは「user_pseudo_id,page_title,ga_session_id」の3つになる。

ただ本当に例外なくそうなのかまでは確認できていない。1page_viewの中でページをいったり来たりしていたらイベントが複数発生するかもしれない。その場合はフラグを作る際に影響が出る。

[GA4+BigQuery]日別にページ別のpvを見たかったのでクエリを書いてついでに自動更新のデータマートを作ってデータポータルで可視化したで実際に書いてみたので参考になれば。

scrollはあるのにpage_titleで見るとpage_viewがない問題

上記のクエリで直接cnt_scroll/cnt_pvを計算したいのだが、scrollはあるのにpage_titleがないケースで分母が0になりエラーが起きる。なのでwithの中にひとまず書いてから集計する必要がある。

page_viewが発生したあと日をまたいでscrollが発生したからなのかと思ったが、ページ名を見ると全て日本語ではない。なので可能性としてはページが翻訳されたケースだろうか。

page_locationで集計してからpage_titleをjoinすればできそうだが直接集計できないのは面倒だ。

他の人でも起きているのかは不明。とはいえたいしたデータ量でないこのサイトで起きているので一般的に起きている現象だろうと思われる。誰かやってみてください。

カテゴリー:データ整備