你有没有过这样的经历:打开一个购物网站,随便看看就关了,结果第二天首页推荐的全是刚才看过的商品?这背后不光是算法聪明,关键是数据库里记下了你在页面上待了多久。
停留时长不是简单计时
很多人以为,用户点开页面开始计时,关闭就结束。但实际复杂得多。比如你打开一个文章页面,去切微信聊了十分钟,回来继续看——这段时间算不算?如果全算,数据就失真了。
合理的做法是结合“活跃状态”判断。通过前端定时上报心跳,比如每30秒发一次请求告诉服务器:“我还在这儿”。如果连续两次没上报,就认为用户已经离开。这样记录下来的停留时间才靠谱。
数据库怎么存这些数据
假设你用的是MySQL,可以建一张行为日志表:
CREATE TABLE user_behavior_log (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
page_url VARCHAR(500) NOT NULL,
session_id VARCHAR(100),
enter_time DATETIME NOT NULL,
leave_time DATETIME,
duration_seconds INT DEFAULT 0,
is_active TINYINT DEFAULT 1,
INDEX idx_user_time (user_id, enter_time),
INDEX idx_page_time (page_url, enter_time)
);
每次用户进入页面,插入一条记录,带上线时间。等检测到用户离开或心跳中断,再更新 leave_time 和 duration_seconds。后台定时任务处理未闭合的会话,避免数据堆积。
举个真实场景
你运营一个技术博客,发现某篇教程页面平均停留超过8分钟,但跳出率也高。查数据发现,很多用户前30秒就没了心跳——其实是打开后直接关掉,根本没读。这时候你意识到,得把“有效阅读”和“标签页挂着”区分开。
于是你在前端加了个逻辑:只有滚动到内容区域,才算真正开始计时。再结合数据库里的新字段 is_scrolled(布尔值),分析时就能过滤出真实互动用户。
别小看这个数字
电商页面平均停留从1分20秒提到1分45秒,转化率可能涨5%。新闻App里,单篇文章停留超2分钟的用户,次日留存明显更高。这些决策依据,都来自数据库里一条条看似不起眼的行为记录。
你不需要一上来就搞复杂模型。先把基础数据记准,用好SQL的 GROUP BY 和 AVG 统计各页面平均时长,再按时间段、设备类型拆解,很快就能发现哪些内容真能留住人。