先明确一个结论:同一 URL 因设备或登录状态返回不同内容时,不能用一次抓取或一次测速结果代表整站表现。正确做法是固定同一个地址,分别以“匿名桌面端”和“已登录或移动端”两种条件取回响应,再对照状态码、重定向链、HTML 首屏内容和关键资源是否一致。只有确认差异来自服务端分流而非缓存干扰后,才能判断哪些旧逻辑该退出、哪些有价值的部分该保留。
第一种条件适用于内容差异由 UA 或视口判断驱动。此时匿名桌面端请求返回的往往是通用版或降级版页面,而已登录或移动端会拿到个性化区块、推荐位或另一套模板。判断依据不是页面“看起来不同”,而是响应头中的 Vary、重定向次数、以及首屏 HTML 中主内容容器是否属于同一组件。若主内容相同,仅推荐位或导航不同,速度问题通常出在附加资源;若主内容本身不同,则要分别测两套模板的加载链路。
第二种条件适用于差异由登录态或会话驱动。匿名请求可能命中公开缓存,返回较快;已登录请求绕过缓存,直连应用服务,返回较慢。这时对照的重点是缓存命中标记、后端响应时间占比,以及登录态下是否额外加载了权限校验脚本。假设某页面匿名访问首字节为 200 毫秒,登录后变为 900 毫秒,且差异集中在后端响应而非资源下载,那么优化方向应放在会话查询或权限接口,而不是图片压缩。这个例子只用于说明比较方法,不代表任何真实站点数据。
设备与登录状态之外,还要固定请求方法、请求头、Cookie 有无、DNS 解析结果和测试出口。建议用同一台机器、同一网络、同一时段完成两轮抓取,每轮至少重复三次,并保存原始响应头与完整 HTML。若两轮结果在多次重复间仍不稳定,优先怀疑 CDN 缓存键或边缘节点差异,而不是立刻修改模板。
Vary 是否包含 User-Agent、Cookie 等字段,它决定了缓存是否按条件分桶。一个实际动作是:先关闭页面缓存插件或 CDN 的页面缓存,再重复两轮抓取。若关闭后差异消失,说明此前看到的是缓存分桶造成的假象,下一步应先修缓存键规则;若差异仍在,说明服务端确实按设备或登录态返回不同内容,下一步才进入模板与接口层面的取舍。
当确认某条设备判断或登录判断已经过时,退出动作要分两步。第一步是停止对新请求应用旧分流,但保留旧模板文件与旧接口一段时间,用于对照回滚。第二步是在监控中观察两轮请求的主内容是否收敛为同一套。若收敛后匿名与登录请求的首字节差距明显缩小,说明退出有效;若差距没有变化,则瓶颈不在分流逻辑,继续删除模板只会增加风险。
需要保留的通常不是整套旧系统,而是其中仍被复用的部分:例如旧模板里的结构化数据输出、旧接口中的字段映射、旧重定向规则中仍被外部引用的路径。判断标准是它是否仍出现在当前响应中,以及是否有外部链接或客户端依赖它。仅因为“以前有用”而保留整套旧逻辑,会让对照条件重新变得不可控。
有些差异无法通过关闭缓存消除。例如登录态本身就会改变页面可访问范围,匿名请求返回 302 到登录页,这时两轮对照的不是同一份内容,速度比较没有意义。应先取得一个可匿名访问的等价地址,或在测试环境模拟登录态,再进行比较。
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。若对照过程中发现某个设备版本未被抓取,不要据此断定它已被移除;它可能只是被规则阻止、被缓存隔离,或从未被链接发现。HTTPS 同样不保证安全无漏洞或排名,它不能作为判断分流是否正确的依据。
不同搜索引擎对动态渲染和条件返回的支持情况须分别核查。对照结论只对当前测试条件成立,更换设备、登录状态或网络出口后需要重新取样。结尾一句:把两轮响应的原始证据留存下来,再决定退出哪条旧逻辑、保留哪部分有价值的内容,比只凭一次页面观感下结论更可靠。