GA4においてもページ/セッション(セッションあたりのページビュー数)を確認することは可能であり、それぞれBigQuery・レポート・探索における確認方法を解説する。
BigQueryからデータを抽出しLookerStudioで連携することでよりページ/セッションの分析をしやすくすることもできるため、SQLのコードについても記載する。
ページ/セッションとは
ページ/セッションとは、1訪問(セッション)あたりに何ページ閲覧(アプリの場合も同様に閲覧した画面ビュー数)したかをカウントした指標のことで、サイトが1回の訪問でどれくらい閲覧されたかを図る指標として最適な指標となる。サイトの「回遊率」といってもよい。計算式としては「ページビュー数÷セッション数」となる。この際、同じ画面を繰り返し表示されても、集計され計算対象になる。
ページ/セッションの分析視点
一般的な分析方法として、どの切り口から「ページ/セッション」をモニタリングしていくかを決める必要がある。最も大きな視点ではサイト全体と月単位でページ/セッションの推移をモニタリングしていく。これは主にサイトの回遊率に大きな変動が起きていないかをチェックするためであり、ページビューやセッション数など他の指標と共に推移を追っていく。また、1つドリルダウンして日次でページ/セッションの推移をモニタリングすることで変化が起こったタイミングを捉えることができる。
サイト全体で月次や日次でページ/セッションの変化をモニタリングすることは主にサイト全体に変化があったかを図るものであり、施策に対して結果どうなったのかを図る上で適切な指標となる。例えば、記事の下部に他の記事へ遷移させるための関連記事カードを設置したことで、ページ/セッション数が増加すれば関連記事カードを設置した施策はうまくいった施策として判断できるだろう。
ページ改善を検証するページ/セッション
ページ/セッションをページ単位にドリルダウンすることでページごとにページ/セッションの改善がされたかを検証することが可能になる。つまり、ページの回遊率が改善されたかをページごとに確認することができ、ページを相対的に比較すれば、どのようなページの回遊率が高いのかの傾向が掴める。
この際、気を付けるべき点としてはページは「ランディングページ」をディメンションとしてページ/セッションを計測する必要がある。その理由としては、その「ページを起点」として、どれくらいページ遷移が発生したかを計測することで、そのページのページ/セッションが改善されたかをより正確に計測することができるため。
サイトテーマに興味関心が高いユーザーを分析するページ/セッション
ランディングページを起点としてページ/セッションを記事単位で相対比較することで、どのページがサイトテーマに興味を持って読み進めてくれるユーザーなのかを分析することができる。つまり、そのランディングページで離脱してしまったユーザーが多いページよりもページ/セッションが高いページの方が、サイト全体に興味を持ってくれている可能性が高いわけである。そのため、コンテンツの追加などにどのようなテーマのページを追加していくべきか、ページ/セッションが高いページを参考にすることができるということになる。
日次のページ/セッションを取得するクエリ
WITH
PagePerSession AS (
SELECT
ymd,
_ssuu,
_pv,
ROUND(_pv / _ssuu, 2) AS _PagePerSession
FROM (
SELECT
ymd,
COUNT(DISTINCT ssid) AS _ssuu,
COUNTIF(event_name = 'page_view') AS _pv,
FROM (
SELECT
ymd,
CONCAT(user_pseudo_id, '-', CAST(ga_session_id AS STRING)) AS ssid,
event_name
FROM (
SELECT
PARSE_DATE("%Y%m%d", event_date) AS ymd,
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id,
event_name
FROM
`<project>.<dataset>.events_*`
WHERE
_TABLE_SUFFIX BETWEEN '20240401' AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
)
)
GROUP BY
ymd
)
ORDER BY
ymd ASC
)
SELECT
*
FROM
PagePerSession
ChatGPTによるクエリ解説
### 全体構造
– **CTE (Common Table Expression)**: `WITH`句を使用して`PagePerSession`という名前の一時的なテーブルを定義しています。これにより、複雑なサブクエリの結果を簡単に再利用することができます。
– **最終選択**: `PagePerSession`から全てのカラムを選択し、結果を表示しています。### サブクエリの説明
1. **最内部のサブクエリ**:
– 日付、ユーザーID、セッションID、イベント名を選択しています。
– `event_date`を日付型に変換し、`ymd`としています。
– `ga_session_id`はイベントパラメータから抽出しており、セッション識別子を形成するために使用されます。
– ユーザーIDとセッションIDを組み合わせてユニークなセッション識別子(`ssid`)を生成しています。2. **中間サブクエリ**:
– 日付(`ymd`)とセッション識別子(`ssid`)、イベント名(`event_name`)をグループ化の対象としています。
– セッション数をカウントするために`COUNT(DISTINCT ssid)`を使っており、これはユニークなセッションの数を示します。
– ページビューのイベントだけをカウントするために`COUNTIF(event_name = ‘page_view’)`を使っています。3. **最外部のサブクエリ**:
– 各日付に対して、セッション数とページビュー数を使用してページビュー/セッションの比率を計算しています。
– `ROUND(_pv / _ssuu, 2)`で計算されるのは、セッションごとの平均ページビュー数で、これを2桁の小数点以下まで丸めています。### 最終的な出力
– `PagePerSession`からの選択により、各日におけるページビュー/セッションの比率が計算され、これが日付ごとに並べられます。
ランディングページの日次ページ/セッションを取得するクエリ
CREATE TEMP FUNCTION date_from() AS ('20240401'); -- 開始日
WITH
LP_PagePerSession AS (
SELECT
ymd,
landing_page,
COALESCE(_ssuu, 0) AS _ssuu,
COALESCE(_lp_pv, 0) AS _lp_pv,
COALESCE(_PagePerSession, 0) AS _PagePerSession
FROM (
SELECT
s.ymd,
s.landing_page,
_ssuu,
_lp_pv,
ROUND(_lp_pv / _ssuu, 2) AS _PagePerSession
FROM (
SELECT
ymd,
page_location AS landing_page,
SUM(entrances) AS _ssuu
FROM (
SELECT
PARSE_DATE("%Y%m%d", event_date) AS ymd,
REGEXP_REPLACE((SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'), r"\?.*", "") AS page_location,
(SELECT value.int_value FROM UNNEST(event_params) p WHERE p.key = 'entrances') AS entrances
FROM
`<project>.<dataset>.events_*`
WHERE
_TABLE_SUFFIX BETWEEN date_from() AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND
event_name = 'page_view'
)
GROUP BY
ymd,
page_location
) AS s
LEFT JOIN (
SELECT
lp.ymd,
lp.landing_page,
SUM(p.page_views_count) AS _lp_pv
FROM (
SELECT
f.ymd,
f.user_pseudo_id,
f.ga_session_id,
l.page_location AS landing_page
FROM (
SELECT
PARSE_DATE("%Y%m%d", event_date) AS ymd,
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id,
MIN(event_timestamp) AS first_event_timestamp
FROM
`<project>.<dataset>.events_*`
WHERE
_TABLE_SUFFIX BETWEEN date_from() AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND
event_name = 'page_view'
GROUP BY
ymd,
user_pseudo_id,
ga_session_id
) AS f
INNER JOIN (
SELECT
PARSE_DATE("%Y%m%d", event_date) AS ymd,
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id,
REGEXP_REPLACE((SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'), r"\?.*", "") AS page_location,
event_timestamp
FROM
`<project>.<dataset>.events_*`
WHERE
_TABLE_SUFFIX BETWEEN date_from() AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND
event_name = 'page_view'
) AS l
ON
f.ymd = l.ymd
AND
f.user_pseudo_id = l.user_pseudo_id
AND
f.ga_session_id = l.ga_session_id
AND
f.first_event_timestamp = l.event_timestamp
) AS lp
INNER JOIN (
SELECT
PARSE_DATE("%Y%m%d", event_date) AS ymd,
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id,
COUNT(*) AS page_views_count
FROM
`<project>.<dataset>.events_*`
WHERE
_TABLE_SUFFIX BETWEEN date_from() AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND
event_name = 'page_view'
GROUP BY
ymd,
user_pseudo_id,
ga_session_id
) AS p
ON
lp.ymd = p.ymd
AND
lp.user_pseudo_id = p.user_pseudo_id
AND
lp.ga_session_id = p.ga_session_id
GROUP BY
lp.ymd,
lp.landing_page
) AS p
ON s.ymd = p.ymd AND s.landing_page = p.landing_page
ORDER BY
ymd ASC,
_PagePerSession DESC
)
)
SELECT
*
FROM
LP_PagePerSession
探索でページ/セッション確認
探索でページ/セッションを確認するには、ディメンションに日付、ランディングページごとに確認したければ「ランディング ページ + クエリ文字列」を置き、指標には「セッションあたりのページビュー数」を置く。
レポートでページ/セッションを確認
GA4のデフォルトレポートには「ページ/セッション」を確認できるレポートはないが、「ライブラリ」機能を活用することで「ページ/セッション」レポートを作成することができる。GA4のレポートはユニバーサルアナリティクスのレポートと異なりカスタマイズして作成することができるため、デフォルトで表示されているレポートに拘る必要はない。
BigQuery + Looker Studioでページ/セッションを可視化
BigQueryからページ/セッションの可視化に必要なデータをSQL(上記で提示した)で抽出しLooker Studioと連携することで、より高速にページ/セッションの分析が可能になる。