会員ログの活用法 第6回
会員でない訪問者の閲覧は、6割以上が以前からある記事。会員の閲覧は、新着記事や製品ページにも分かれている。
サイトの報告では、よく読まれたページのランキングが並びます。上位のページは、会員にも人気があるように見えます。
ただ、そのランキングには、会員と、検索などから来た会員でない訪問者が混ざっています。会員でない訪問者は、検索で古い定番の記事に着地することが多く、数が多いとランキングはその記事で埋まります。会員が本当に読んでいるページは、その下に隠れてしまいます。
会員IDがあると、一度でもログインしたことのあるブラウザ(クッキー)を会員のものとして分けられます。ログインしていないときの閲覧も、会員の側に数えられます。
ページの種類,会員の閲覧(%),会員でない訪問者の閲覧(%) 記事(以前),26.9,64.1 記事(新着),27.5,15.6 製品,15.0,0.0 申込,10.8,0.0 お知らせ,6.3,10.9 トップ・マイページ,13.5,9.4
このグラフの数え方
架空のサンプルデータで集計した例です。
ここに挙げた使い方は一例です。サンプルの数字は架空のもので、実際の結果や施策の効果を約束するものではありません。
ここから先は、システム担当者に渡してください。集計SQLで出た結果を、AIプロンプトと一緒にAIへ貼ると、上のようなグラフと読み取りが返ってきます。
with member_cookie as (
select distinct cookie_id
from access_log
where member_id is not null
and accessed_at >= '2026-04-01' and accessed_at < '2026-10-01' -- 期間。実際には集計する期間に差し替える
)
select case
when c.content_type = '記事' and c.published_at < '2026-04-01' then '記事(以前から)'
when c.content_type = '記事' then '記事(期間中の新着)'
else coalesce(c.content_type, 'トップ・マイページ')
end as page_type,
sum(case when mc.cookie_id is not null then 1 else 0 end) as member_pv,
sum(case when mc.cookie_id is null then 1 else 0 end) as non_member_pv
from access_log a
left join content c on c.content_id = a.content_id
left join member_cookie mc on mc.cookie_id = a.cookie_id
where a.accessed_at >= '2026-04-01' and a.accessed_at < '2026-10-01'
group by 1
order by 1;次の表は、会員サイトの閲覧を、ページの種類ごとに、会員と会員でない訪問者に分けた集計です。
page_type=ページの種類、member_pv=会員(一度でもログインしたことのあるブラウザ)の閲覧数、non_member_pv=会員でない訪問者の閲覧数です。
個人を特定できる列は含めていません。
1. member_pv と non_member_pv を、それぞれの合計に対する割合(%)に直し、ページの種類ごとに並べた棒グラフを、画像で描いてください。
2. 次の点を読み取って、3行程度で教えてください。
・会員でない訪問者は、どの種類のページを読んでいるか
・会員は、どの種類のページを読んでいるか
・全体のランキングだけで、会員向けの記事を評価してよいか
(ここに集計結果を貼る)SQLとプロンプトは、準備編の汎用テーブルを前提にした例です。実際のテーブル名・列名に合わせて書き換えてください。動作や結果を保証するものではありません。
使う表: content(コンテンツ)/access_log(アクセスログ) (表の形は準備編)
ログインした記録とアクセスログが、同じブラウザでつながっていないと、この問いには答えられません。
アクセス解析では、会員がログインせずに読んだページは会員でない訪問者と区別できず、会員の読み方が見えないからです。
writeWiredでは、会員IDの付いたアクセスログとメール・フォームの記録が最初から同じ場所に揃っています。会員サイトCMSとしてのwriteWired