Open1
Looker Studio で Zenn のアクセス解析ダッシュボードを作ってみた
やったこと
Zenn に Google Analytics (GA4) を連携して取得したアクセスデータをもとに、Looker Studio でお手製ダッシュボードを作った。
なぜやったか?
Zenn の管理画面上で見られる統計ダッシュボードで日別・投稿別の表示数は見られるものの、ページ別の表示数推移や流入元別の集計値など、より詳細な情報を見たかった。
一応 GA4 のコンソール上でも見られるが、インタラクティブにフィルターを切り替えるなどしてより柔軟かつ手軽にデータを見たかったため、自分で作ってしまうことにした。
やり方
1. Google Analytics に Zenn を紐づけてトラッキングする
「Zenn Google Analytics」などで調べればいくらでも情報が出てくるので割愛。
2. Google Analytics のデータを BigQuery に転送する設定を有効にする
これも調べればすぐ出てくるはず
3. 集計クエリの作成
分析軸:
- 日付
- 投稿名 or ページ名
- 流入元(direct, google, 旧twitter などの単位で)
集計軸:
- ページ表示回数
- ユニークユーザー数(日毎)
- 初回ユーザー数
ページに関連する情報:
- scrap, article の区別
- 投稿日
- 今回は、初回にアクセスのあった日で代用。
- 原稿プレビュー段階での表示もログが残るため、実際の投稿日とは一致しない。
WITH import_events AS (
SELECT
*,
(SELECT p.value.string_value FROM e.event_params AS p WHERE p.key="page_title") AS page_title,
(SELECT p.value.string_value FROM e.event_params AS p WHERE p.key="page_path") AS page_path,
FROM
`<project_id>.analytics_<GA4_ID>.events_*` AS e
),
-- page_path を整形し、ページ内リンクやクエリパラメータ付きの path をまとめた。
-- なお、トップページだけはタブ別(記事一覧、scrap 一覧、コメント一覧)に見られるようにクエリパラメータを残した。
-- ついでに、scrap か article かそれ以外(トップページなど)の区別も取得した。
normalize_page_path AS (
SELECT
*,
COALESCE(REGEXP_EXTRACT(page_path, r"^.*\/tatamiya\/([a-z]+)\/*"), "others") AS page_type,
REGEXP_EXTRACT(page_path, r"^.*(\/tatamiya\/[a-z]+\/[^#?\/]+|\/tatamiya$|\/tatamiya\?.*)") AS page_path_normalized
FROM
import_events
),
-- ページ名の名寄せ。標準化した page_path に対して、ページ名を一意に紐づける。
-- 記事タイトルを変えたりすると、同じ path でも別の記事名になってしまうことがあるため。
-- 標準化した page_path ごとに最も新しいページ名を取ってくることにした
page_title_table AS (
SELECT
page_path_normalized,
MAX_BY(page_title, event_timestamp) AS page_title,
MIN(event_date) AS publish_date
FROM normalize_page_path
GROUP BY page_path_normalized
)
-- metrics の集計
SELECT
event_date,
pt.page_title,
e.page_path_normalized,
e.page_type,
publish_date,
traffic_source.source AS traffic_source,
COUNTIF(event_name="page_view") AS count_pv,
COUNTIF(event_name="first_visit") AS count_first_visit,
COUNT(DISTINCT user_pseudo_id) AS count_uu
FROM
normalize_page_path AS e
JOIN page_title_table AS pt ON e.page_path_normalized=pt.page_path_normalized
GROUP BY event_date, pt.page_title, e.page_path_normalized, e.page_type, publish_date, traffic_source
↑ 上記をテーブル化し、毎日洗い替えするようスケジュールクエリを設定[1]
Looker Studio でダッシュボードの作成
こんな感じ
加えて、流入元、ページ種類でフィルタリング
Zenn 管理画面の統計ダッシュボードと数字が一致しないものの、傾向だけ分かればよいのでまーこれで十分だ。