Shopify 用 web-vitals 上报却收不到数据
现象#
接入 web-vitals 后自建接口一条记录都没有,Network 里 sendBeacon 返回 204 但服务端日志为空。
原因#
- 指标回调在页面隐藏时才触发,用户直接关标签或前端路由跳转会漏掉最后一次
sendBeacon发 Blob 未声明 type,服务端按表单解析导致读到空 body- 上报域跨域且未处理
OPTIONS预检,信标被静默丢弃 - 采集脚本在
DOMContentLoaded之后才执行,onLCP还没注册页面就结束了
处理步骤#
- 先用
onLCP(console.log, { reportAllChanges: true })在控制台确认能拿到值 - 上报改用
sendBeacon发Blob,type 设application/json - 在
visibilitychange变为 hidden 时补发一次,兜住提前关闭的会话 - 服务端从 POST body 读取,不要按 query string 取参数
- 用 Network 面板按 beacon 类型过滤,确认请求确实带着 payload 发出
验收标准#
服务端 24 小时内收到覆盖 5% 以上 UV 的样本,能按模板算出各自的 p75 LCP。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。