核心原则:区分【本地存储(前端,不送服务器)】和【后端日志存储(全站统计)】;隐私合规优先,不强制采集,区分登录 / 未登录用户
两个目标:
1)个人搜索历史:给当前用户做个性化推荐(下拉框展示他自己之前搜过的词)
2)全站搜索日志:用来统计热门词、挖掘关联词、优化站内搜索(不绑定个人身份最佳)
一、两套采集方案分开实现
方案 A:前端本地存储 → 用于【当前访客个人搜索历史推荐】
适用:未登录访客,不用后端存用户个人记录,合规压力最小,中小企业官网首选
- 存储载体:
localStorage(推荐) / Cookie
- 存储内容:仅关键词、搜索时间;不存 IP、手机号、姓名等个人信息
- 逻辑流程:
- 用户点击搜索,提交关键词;
- 前端先做清洗:过滤空词、乱码、超长字符、黑名单词;
- 读取本地已有搜索历史数组;
- 去重:如果这个词已经存在,删除旧记录,把这条放到数组最前面;
- 控制条数上限(例如最多保存 8 条),超过就删掉最老的;
- 设置过期时间:例如 30 天,超过时间自动清除;
- 写回 localStorage;
- 用户再次点击搜索框,读取这个数组,展示【你的搜索历史】。
- 用户可控:提供清除搜索历史按钮,点击直接清空 localStorage。
- 局限:换浏览器 / 无痕模式 / 清除缓存后,历史直接丢失;不会上传到服务器。
示例存储结构(localStorage 里)
[
{"word":"感应淬火设备","time":1759888000},
{"word":"除尘设备","time":1759800000}
]
方案 B:后端日志采集 → 用于【全站数据分析、热门词挖掘】
目标:拿到所有用户的搜索行为,统计高频词、无结果词、共现词,不是为了追踪单独某个人
✅ 推荐做法:匿名日志,尽量不绑定用户身份
- 用户提交搜索,前端把关键词发给后端搜索接口;
- 后端收到请求,先清洗过滤;
- 写入搜索日志表,推荐字段清单:
表格
| 字段 |
是否必填 |
说明 |
| search_word |
✅ |
用户搜索词 |
| search_time |
✅ |
搜索时间戳 |
| has_result |
✅ |
是否检索到内容:1 = 有结果,0 = 无结果 |
| click_id |
⭕ |
用户点击的文档 / 产品 ID(有点击才记录) |
| device_type |
⭕ |
PC / 移动端 |
| session_id |
⭕ |
会话 ID,临时标识一次访问,不关联实名信息,会话过期失效 |
❗不建议:直接记录 IP、手机号、账号、cookieid 和搜索词永久绑定(隐私风险高)
登录用户可选增强(个性化跨设备历史)
用户登录状态下,征得同意后,可把搜索词存入该账号下的搜索历史表;
- 用户可以在个人中心查看、一键清空;
- 退出登录 / 换设备登录,可同步历史记录;
- 必须在隐私政策写明:收集搜索历史用于个性化搜索推荐,用户有权删除。
二、采集触发时机(什么时候记录?非常重要)
❌ 不要:输入框每敲一个字符、联想下拉点一下就记录,会产生大量脏数据
✅ 推荐触发规则,二选一:
- 点击搜索按钮 / 回车提交搜索(最稳妥,推荐企业官网)
用户主动提交,才算一次有效搜索,才写入历史。单纯 hover 下拉联想不算。
- 可选增强:点击下拉推荐词发起检索,同样记录。
过滤规则(记录前必须执行,减少脏数据)
- 空关键词、仅空格 → 丢弃,不记录
- 字符过短(少于 2 个字符)、超长(>50 字符)丢弃
- 黑名单词(违规词、垃圾广告词)直接拦截,不入库
- 重复短时间高频提交(10 秒内同一词多次搜索,只记录一次)
三、隐私合规要点(国内网站必看)
- 未登录用户个人搜索历史优先放前端 localStorage,不上传服务器;
- 隐私政策中说明:网站会收集站内搜索行为数据,用于优化搜索功能、热门推荐;
- 用户控制权:
- 本地:清除搜索历史按钮
- 登录账号:个人中心可查看、删除全部搜索记录
- 不要把搜索词和手机号、实名信息做关联存储;
- 不主动把搜索日志对外共享给第三方。
四、简易版 vs 进阶版选型
✅ 简易版(中小企业官网,低成本,推荐)
只做前端 localStorage 保存个人搜索历史;后端仅记录匿名搜索日志(只存词、时间、有无结果,不带用户身份)
- 开发量小、合规风险低;
- 可实现:下拉展示用户本地搜索历史 + 后台统计全站热门词。
✅ 进阶版(流量大、会员系统网站)
简易版基础上增加登录用户账号绑定搜索历史,跨设备同步;后端统计会话、点击行为,挖掘共现词。
五、常见坑
- 采集联想输入每一次 keydown,日志暴涨,大量无效数据;
- 不做过期清理,localStorage 无限堆积;
- 没有清除按钮,隐私投诉风险;
- 日志绑定 IP 长期存储,合规风险;
- 不做脏词过滤,后台日志出现大量乱码、垃圾词。
六、日志使用边界提醒
- localStorage 的本地历史:只用来渲染下拉推荐,不会传到服务器;
- 后端匿名搜索日志:只用于数据分析、挖掘热门词,不做用户画像追踪。
|