问题出现得很突然,日志倒是留得挺全。为了提速加了 Speculation Rules,对站内链接做 prerender。统计后台的 PV 涨了 90%,CrUX 里的 LCP 分布也变好看,实际转化没动。
刚开始盯着「规则把全部内链都列进 prerender,命中率很低但开销大」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。预渲染会执行页面脚本,统计代码被提前触发。还有一种是CrUX 采集的是真实用户指标,预渲染页面的加载被算进样本。
另外,没有用 document.prerendering 判断,统计与广告都被提前加载。
上来先确认规则命中的范围
curl -s https://www.example.com/ | grep -A5 'speculationrules'
再往下把 prerender 限制在高概率链接上
{"prerender":[{"where":{"href_matches":"/post/*"},"eagerness":"moderate"}]}
接着统计代码加预渲染判断
if (document.prerendering) document.addEventListener('prerenderingchange', init);
剩下的就是对比开启前后的 PV 与转化
python ab_compare.py --metric pv,conversion --days 14
别只看报错消失,验证要多做一步。统计口径修正后 PV 回落到真实水平,预渲染命中率提升但资源开销下降,转化数据与 GA 对得上。
容易忽略的是,预渲染会真实执行前端代码,凡是有埋点、广告、AB 实验的页面,都要先加 prerendering 判断再上线。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
