GA4のPVを信じるのをやめて、BigQueryで実ユーザー数を数え直した話
以前の記事で、GA4のPVの大半がボットだったという話を書いた。今回はその続きで、「じゃあ実際に読まれた数はいくつなのか」を、BigQueryにエクスポートしたイベントデータから数え直した。
GA4の管理画面だけでは、この絞り込みができない
GA4のレポート画面でも国別・流入元別の絞り込みはできる。ただ、複数条件を掛け合わせて「日本から、直接アクセス以外で、特定の記事に来た人」のような細かい条件を見ようとすると、画面上のディメンション組み合わせだけでは足りなくなる。
計測基盤を作った記事で触れた通り、GA4はBigQueryへの日次エクスポートが無料で設定できる。今回はこのエクスポート先に直接SQLを投げて、条件を自分で組み立てることにした。
まず全体のPVを疑ってかかる
最初に、国別のページビュー数を出した。
SELECT geo.country AS country, COUNT(*) AS pv
FROM `プロジェクトID.analytics_XXXXXXXXX.events_*`
WHERE event_name = "page_view"
GROUP BY country
ORDER BY pv DESC
結果は米国が最多で、日本は4分の1程度だった。ここで「米国からのアクセスが多い」と早合点すると、前回の記事と同じ失敗を繰り返す。まず疑うところから始める。
日本のアクセスだけを、流入元まで絞り込む
次に、国を日本に絞った上で、流入元(traffic_source)を出した。
SELECT traffic_source.source AS src, traffic_source.medium AS med,
COUNT(DISTINCT user_pseudo_id) AS users
FROM `プロジェクトID.analytics_XXXXXXXXX.events_*`
WHERE geo.country = "Japan"
GROUP BY src, med
ORDER BY users DESC
ここで初めて、数字の中身が見えてきた。日本からのユニークユーザーは、直接アクセス・Google自然検索・Threads経由の3種類にほぼ集約されていた。直接アクセスには自分の確認作業が混ざっている可能性が高いので、実質的な「初めて読みに来た人」はさらに絞られる。
Threads経由だと分かる目印
流入元が l.threads.com になっている行があった。これはThreadsの投稿に貼ったリンクを踏んだときに付くドメインで、ページURLに fbclid というパラメータが付いているアクセスとも一致していた。
SELECT event_date,
REGEXP_EXTRACT(
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location"),
r"getcclab\.com(/[^?]*)"
) AS page
FROM `プロジェクトID.analytics_XXXXXXXXX.events_*`
WHERE event_name = "page_view"
AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = "page_location") LIKE "%fbclid%"
ORDER BY event_date
これで、「Threadsに投稿した記事に、実際に何日後・何件のクリックがあったか」が具体的な記事URL付きで分かるようになった。GA4の画面上の「参照元/メディア」レポートでも似たことは見えるが、記事URLと日付を一度に並べて見るには、SQLで抜き出した方が早い。
数えてみて分かったこと
- 総PVの見た目に対して、日本の実ユーザーはかなり少なかった
- そのうちの一定数はThreads経由で、投稿から記事への導線自体は機能していた
- 直接アクセスの中には、自分自身の確認作業が混ざっている
数字を「増えた・減った」で見るのをやめて、「誰が・どこから来たか」まで割ってから判断する、という当たり前のことを、ようやく手元のSQLでできるようになった。次にやることは、このクエリを定期的に流して、自分のアクセスやローカル環境からのアクセスをあらかじめ除外しておく設定だ。