会員ログの活用法 第12回

メールを開封したのに、サイトを利用していない会員

開封率が高くても、メールを開封した会員の半分は、そのあと7日以内にサイトを利用していない。

よくある状況

メール配信の報告では、開封率とクリック率が並びます。開封率が上がると、メールは読まれていると受け取られがちです。

ただ、開封は件名と冒頭を見たというところまでです。開封した会員がそのあとサイトを利用して、記事や製品のページを見たかどうかは、開封率からは分かりません。クリック率も数えているのはメールの中のリンクを押した回数で、リンクを押さずにあとからサイトを利用した会員は入りません。

会員IDでメールの開封記録とアクセスログをつなぐと、開封した会員のうち、そのあと一定の期間にサイトを利用しなかった人を、配信ごとに数えられます。

配信ごとに、開封後7日以内にサイトを利用していない会員の人数が分かるグラフ

どの配信も、開封した会員の5〜6割が、7日以内にサイトを利用していない。配信による差は大きくない。

このグラフの数え方

  • 対象:2026年4〜9月の12回の配信で、メールを開封した会員(配信ごとに数える)
  • 「利用していない」:開封してから7日以内に、ログインしてページを1回も閲覧していないこと。メールのリンクを使わずにサイトを利用した場合も「利用した」に数える
  • 割合の分母:その配信を開封した会員の人数
  • 言えないこと:開封は画像の読み込みなどで記録するため、実際に読んだかどうかとは一致しないことがある

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

これが分かると

  • 件名や配信時刻ではなく、本文からサイトへの導線を見直すきっかけになります。
  • 開封したのに利用していない会員だけに、別の切り口の案内を送れます。
  • 開封率だけで配信の良し悪しを決めない、という報告の前提をそろえられます。

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

試してみる

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

集計SQL件数と割合だけを出します
with opened as (
  select member_id, campaign_id, min(event_at) as opened_at
  from mail_event
  where event_type = 'open'
    and event_at >= '2026-04-01' and event_at < '2026-10-01'  -- 期間。実際には集計する期間に差し替える
  group by member_id, campaign_id
)
select o.campaign_id,
       count(*) as opened,
       sum(case when not exists (
             select 1
             from access_log a
             where a.member_id = o.member_id
               and a.accessed_at between o.opened_at and o.opened_at + interval '7 days'
           ) then 1 else 0 end) as not_visited
from opened o
group by o.campaign_id
order by o.campaign_id;
AIプロンプト集計結果を貼るだけです
次の表は、会員向けメールの配信ごとの集計です。
campaign_id=配信、opened=メールを開封した会員数、not_visited=開封してから7日以内に、ログインしてサイトを一度も利用していない会員数です。
個人を特定できる列は含めていません。

1. 配信ごとに opened と not_visited を並べた棒グラフを、画像で描いてください。各配信に「利用していない割合」を添えてください。
2. 次の点を読み取って、3行程度で教えてください。
   ・開封した会員のうち、利用していない人はおおよそ何割か
   ・割合が目立って高い配信、低い配信はあるか
   ・開封率だけで配信の良し悪しを判断してよいか

(ここに集計結果を貼る)
社内用SQL会員IDの一覧が出ます。社外のサービスやAIには貼らないでください
-- 社内用:会員IDの一覧が出ます。社外のサービスやAIには貼らないでください
with opened as (
  select member_id, campaign_id, min(event_at) as opened_at
  from mail_event
  where event_type = 'open'
    and event_at >= '2026-04-01' and event_at < '2026-10-01'  -- 期間。実際には集計する期間に差し替える
  group by member_id, campaign_id
)
select o.campaign_id, o.member_id, o.opened_at
from opened o
where not exists (
  select 1
  from access_log a
  where a.member_id = o.member_id
    and a.accessed_at between o.opened_at and o.opened_at + interval '7 days'
)
order by o.campaign_id, o.opened_at;

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

使う表: access_log(アクセスログ)/mail_event(メール送信と反応) (表の形は準備編)

試せなかったら

メール配信のツールとサイトのアクセス解析が別々で、同じ会員を同じIDで扱えていないと、この問いには答えられません。
配信ツールで分かるのは「誰が開いたか」、アクセス解析で分かるのは「何人来たか」で、その二つが同じ人かどうかをつなげないからです。

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

次に読む

会員ログの活用法 一覧へ