分析追踪:隐私优先的事件收集
本文解释了我们如何在尊重隐私并避免机器人流量的前提下追踪用户行为。
问题:理解用户行为
我们需要了解:
-
用户访问了哪些页面
-
他们查看了哪些产品
-
流量来自何处(谷歌广告、自然搜索、社交媒体)
-
哪些营销活动带来了转化
但我们必须避免:
-
追踪机器人和爬虫
-
存储个人身份信息
-
违反隐私法规
解决方案:客户端 + 服务器端追踪
客户端:JavaScript 追踪
访客ID:存储在 Cookie 中的随机 ID(365 天)
会话ID:存储在 sessionStorage 中的随机 ID(直到浏览器关闭)
营销活动参数:从 URL 中提取并存储在 sessionStorage 中
追踪的参数:
-
gclid- 谷歌点击 ID(搜索广告) -
gbraid- 谷歌广告点击 ID(购物广告) -
wbraid- 谷歌广告点击 ID(iOS) -
fbclid- Facebook 点击 ID -
srsltid- 谷歌自然搜索结果 ID -
utm_source,utm_medium,utm_campaign,utm_term,utm_content
存储:参数存储在 Cookie 中(30 分钟),用于 WhatsApp/电话点击归因
服务器端:数据丰富化
服务器使用以下信息丰富事件:
GeoIP 数据:来自 IP 地址的国家、地区、城市
User-Agent 解析:浏览器、操作系统、设备类型
时间戳:服务器时间(UTC)
机器人检测:过滤已知的机器人 User-Agent
事件类型
页面浏览:用户访问页面
产品查看:用户查看产品页面
加入购物车:用户将产品加入购物车
结账:用户开始结账
购买:用户完成购买
WhatsApp 点击:用户点击 WhatsApp 按钮
电话点击:用户点击电话号码
数据流
sequenceDiagram
participant User
participant JS as JavaScript
participant API as /api/analytics
participant Firehose as Kinesis Firehose
participant S3
User->>JS: 访问页面
JS->>JS: 提取 URL 参数
(gclid, utm_* 等)
JS->>JS: 存储在 sessionStorage 中
JS->>API: POST 事件 + 参数
API->>API: 使用 GeoIP 丰富数据
API->>API: 解析 User-Agent
API->>API: 过滤机器人
API->>Firehose: 发送丰富化后的事件
Firehose->>S3: 存储在分析存储桶中机器人检测
我们使用多种信号过滤机器人流量:
User-Agent 模式:已知的机器人字符串(Googlebot, Bingbot 等)
行为模式:速度过快、请求过多
缺少 JavaScript:机器人通常不执行 JS
排除 Cookie:tv_exclude=true 会停止所有追踪
隐私保护
无 PII:我们从不存储姓名、电子邮件、电话号码
匿名化 IP:存储前移除 IP 地址最后一段
无跨站追踪:Cookie 仅为第一方
选择退出:用户可以设置排除 Cookie
数据保留:事件在 90 天后删除
条件化像素加载
我们仅在相关时加载追踪像素:
谷歌广告像素:仅当存在 gclid、gbraid 或 wbraid 时
LinkedIn 像素:仅当存在 msclkid 时
Facebook 像素:仅当存在 fbclid 时
好处:更快的页面加载,更少的追踪开销
流量来源检测
我们从 URL 参数中检测流量来源:
谷歌广告:gclid, gbraid, wbraid → utm_source=google_ads
谷歌自然搜索:srsltid → utm_source=google_search
Facebook:fbclid → utm_source=facebook
LinkedIn:msclkid → utm_source=linkedin
直接访问:无参数 → utm_source=direct
转化追踪
我们追踪整个漏斗中的转化:
产品查看 → 加入购物车 → 结账 → 购买
每个步骤包括:
-
访客 ID(用于归因)
-
会话 ID(用于会话分析)
-
营销活动参数(用于投资回报率计算)
-
产品 SKU(用于产品分析)
潜在客户触点追踪
当用户联系我们(WhatsApp、电话、电子邮件)时,我们捕获:
联系方式:WhatsApp、电话、电子邮件
营销活动参数:来自 Cookie(30 分钟窗口期)
产品上下文:他们当时在哪个产品页面
好处:将线下转化归因于线上营销活动
速率限制
分析端点设有速率限制:
限制:每个 IP 每 10 分钟 100 个请求
好处:防止滥用和机器人洪水攻击
存储
事件通过 Kinesis Firehose 存储在 S3 中:
格式:JSON 行(每行一个事件)
分区:按日期(年/月/日/小时)
压缩:Gzip
保留期:90 天
查询
事件通过 AWS Athena 查询:
模式:在 Glue Data Catalog 中定义
查询:对 S3 数据的 SQL 查询
用例:营销活动投资回报率、产品受欢迎程度、流量来源
参考资料
技术概念
AWS 服务
-
Kinesis Firehose - AWS 文档
-
Athena - AWS 文档
相关文章
- 多服务器架构 - 分析系统运行之处
总结
我们的分析系统在尊重隐私的同时追踪用户行为:
客户端:
-
✅ 从 URL 中提取营销活动参数
-
✅ 存储在 sessionStorage 中(会话范围)
-
✅ 存储在 Cookie 中(30 分钟用于归因)
-
✅ 将事件发送到 API
服务器端:
-
✅ 使用 GeoIP 和 User-Agent 丰富数据
-
✅ 过滤机器人流量
-
✅ 发送到 Kinesis Firehose
-
✅ 存储在 S3 中(按日期分区)
隐私:
-
✅ 不存储 PII
-
✅ IP 地址匿名化
-
✅ 仅使用第一方 Cookie
-
✅ 提供选择退出选项
-
✅ 90 天保留期
条件化加载:
-
✅ 仅当存在 gclid 时加载谷歌广告像素
-
✅ 仅当存在 msclkid 时加载 LinkedIn 像素
-
✅ 仅当存在 fbclid 时加载 Facebook 像素
这种方法在洞察力、隐私和性能之间取得了平衡。