会員ログの活用法 第9回

同じ記事を別の日に読み返す会員の割合

記事を読んだ会員の6割は、同じ記事を別の日にもう一度開いている。

よくある状況

記事の報告では、閲覧数と訪問者数が並びます。閲覧数が訪問者数より多いと、同じ人が何度も見ているようには見えますが、それが誰なのかは分かりません。

一度読んだ記事を、別の日にもう一度開くのは、手元に置いて参照しているからかもしれません。診療の合間に確かめる、同僚に説明するときに見直す、といった使われ方です。そうした記事は、新着とは別の価値を持っています。

会員IDの付いたアクセスログで、会員ごと・記事ごとに読んだ日を数えると、同じ記事を2日以上読んだ会員が分かります。

読み返した記事の本数ごとに、会員の人数が分かるグラフ

記事を読んだ会員645人のうち、64%(415人)が少なくとも1本は別の日に読み返している。7本以上読み返している会員も、6人に1人(109人)いる。

このグラフの数え方

  • 対象:2026年4〜9月に、ログインして記事を1本以上読んだ会員(645人)
  • 「読み返した」:同じ記事を、2日以上の別々の日に開いたこと。同じ日に何度開いても1日と数える
  • 言えないこと:読み返す理由(参照のためか、読み切れなかったのか)までは分からない

架空のサンプルデータで集計した例です。

これが分かると

  • よく読み返される記事を、マイページやメニューから開きやすい場所に置けます。
  • 読み返しの多い会員は、記事を仕事で使っている会員として、別の案内を考えられます。
  • 記事の評価に、新着のときの閲覧数だけでなく、読み返される数を加えられます。

ここに挙げた使い方は一例です。サンプルの数字は架空のもので、実際の結果や施策の効果を約束するものではありません。

試してみる

ここから先は、システム担当者に渡してください。集計SQLで出た結果を、AIプロンプトと一緒にAIへ貼ると、上のようなグラフと読み取りが返ってきます。

集計SQL件数と割合だけを出します
with r as (
  select a.member_id, a.content_id,
         count(distinct a.accessed_at::date) as days
  from access_log a
  join content c on c.content_id = a.content_id
  where c.content_type = '記事'
    and a.member_id is not null
    and a.accessed_at >= '2026-04-01' and a.accessed_at < '2026-10-01'  -- 期間。実際には集計する期間に差し替える
  group by a.member_id, a.content_id
)
select case
         when re = 0 then '0本'
         when re = 1 then '1本'
         when re <= 3 then '2〜3本'
         when re <= 6 then '4〜6本'
         else '7本以上'
       end as reread_articles,
       count(*) as members
from (
  select member_id, sum(case when days >= 2 then 1 else 0 end) as re
  from r
  group by member_id
) t
group by 1
order by min(re);
AIプロンプト集計結果を貼るだけです
次の表は、会員サイトで記事を読んだ会員を、同じ記事を別の日にもう一度読んだ記事の本数で分けた集計です。
reread_articles=読み返した記事の本数、members=会員数です。
個人を特定できる列は含めていません。

1. reread_articles ごとの members を棒グラフにして、画像で描いてください。各区分に、全体に占める割合を添えてください。
2. 次の点を読み取って、3行程度で教えてください。
   ・1本以上読み返している会員は何割か
   ・たくさん読み返している会員はどれくらいいるか
   ・読み返される記事を、どう扱うとよいか

(ここに集計結果を貼る)
社内用SQL会員IDの一覧が出ます。社外のサービスやAIには貼らないでください
-- 社内用:会員IDの一覧が出ます。社外のサービスやAIには貼らないでください
select member_id, count(*) as reread_articles
from (
  select a.member_id, a.content_id
  from access_log a
  join content c on c.content_id = a.content_id
  where c.content_type = '記事'
    and a.member_id is not null
    and a.accessed_at >= '2026-04-01' and a.accessed_at < '2026-10-01'  -- 期間。実際には集計する期間に差し替える
  group by a.member_id, a.content_id
  having count(distinct a.accessed_at::date) >= 2
) t
group by member_id
order by reread_articles desc;

SQLとプロンプトは、準備編の汎用テーブルを前提にした例です。実際のテーブル名・列名に合わせて書き換えてください。動作や結果を保証するものではありません。

使う表: content(コンテンツ)/access_log(アクセスログ) (表の形は準備編)

試せなかったら

アクセスログに会員IDが残っていないと、この問いには答えられません。
アクセス解析では、別の日に別の端末で読み返すと別の訪問者になり、「同じ人が読み返した」と分からないからです。

writeWiredでは、会員IDの付いたアクセスログとメール・フォームの記録が最初から同じ場所に揃っています。会員サイトCMSとしてのwriteWired

次に読む

会員ログの活用法 一覧へ