网站死链检测,灰度只测新流量为何漏掉旧页面
📍 WDQWDWQD987AAAAA:216.73.217.111
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /5c94ff1bd71a.html
📄
网站死链检测,灰度只测新流量为何漏掉旧页面
把灰度流量只切给新入口或新用户,旧页面被访问的概率会大幅下降,死链自然测不出来。要暴露全量发布时的例外,灰度必须按“页面类型和来源”分层抽样,而不是只按流量比例随机放量。下面以你手上的一份旧内容清单为例,说明怎么把灰度结果转成可执行的处理方案。
灰度漏掉旧页面死链的三个可区分原因
同样是灰度期间没报死链,原因可能完全不同,处理动作也不一样。
- 样本没覆盖:灰度只放给新访客,旧页面只有老用户从收藏夹、站内搜索或外链进入,这些路径在灰度里几乎没有流量。证据是灰度日志里该路径的请求数接近零,而不是返回 200。
- 访问了但没触发跳转:旧页面本身能打开,但它依赖的旧接口、旧资源或旧跳转规则只在特定参数下才暴露失败。证据是带参数访问和裸访问的响应不同。
- 入口已断,页面还在:页面文件仍可访问,但指向它的导航、列表或合作方链接已被移除,用户根本走不到。这类问题在流量统计里表现为访问量归零,但归零不能单独证明处理正确,也可能只是入口被临时下线或统计口径变了。
先分清是哪一种,再决定是补抽样、改跳转,还是清理入口。
把一份旧内容清单转成灰度可验证的样本
假设你手上有一份 300 条旧内容清单,其中一部分来自已终止的合作关系,一部分是旧系统生成的页面。按下面顺序处理:
- 按来源给每条打标签:站内导航、站内搜索、外部链接、用户收藏、站点地图。标签决定它在灰度里会不会被真实访问到。
- 每个标签下抽 5 到 10 条,组成灰度样本。样本量按你能承受的失败影响来定,不必追求统计显著。
- 对样本逐条记录三件事:HTTP 状态、最终落地地址、是否仍出现在任一入口列表里。
- 把“状态正常但入口已断”和“状态异常”分成两组,前者需要决定保留还是退出,后者需要修。
这个动作的结果直接决定下一步:如果样本里出现状态正常但入口已断的页面,说明你的问题不在死链本身,而在内容退出策略,灰度再放量也测不出来。
保留还是退出:用两个条件做取舍
旧内容不是一律删除。判断依据可以简化为两个条件:是否还有外部引用,是否还有站内替代页面。
- 有外部引用、无站内替代:保留页面,修正它指向的失效资源,并把它重新挂回一个可见入口。
- 无外部引用、有站内替代:让旧地址 301 到替代页,然后从入口列表移除,避免用户再次走到死路。
- 两者都无:可以退出,但退出前确认它没有被站点地图或内部搜索索引继续暴露。
这里要注意一个边界:robots.txt 的抓取限制不等于可靠的索引移除。如果旧页面已经进入索引,仅靠 robots 限制抓取,页面仍可能以无描述的形式出现在结果里。需要移除索引时,应使用对应搜索引擎各自提供的移除方式,并分别核查支持情况。
灰度放量前必须单独核查的例外路径
全量发布时的例外,往往集中在灰度不会自然覆盖的路径上。放量前把这几类单独跑一遍:
- 带历史参数的旧地址,例如带旧分类 ID 或旧分页参数的链接。
- 从外部合作方域名跳入的地址,这类地址不会出现在你的站内导航里。
- 站点地图中仍保留的旧地址。站点地图不保证收录,但保留失效地址会持续把抓取引向错误页面。
- 移动端或旧版页面模板单独使用的资源路径。
假设某条旧地址在灰度中请求数为零,可能的原因包括:入口已下线、灰度用户没有该路径的访问权限、统计只记录了成功响应。这三种解释对应三种不同动作,不能只凭零请求就判定该地址可以安全退出。
放量后如何确认例外已被处理
全量发布后,不要只看整体错误率。按灰度时建立的标签分组对比:
- 如果只有“外部链接”组出现新的 404,说明退出动作影响了站外引用,需要补跳转而不是回滚全部改动。
- 如果“站内搜索”组出现异常,检查索引是否仍在返回已退出的页面。
- 如果各组都没有新增异常,但访问量整体下降,先排查入口调整,而不是直接判定死链已清完。
把每次灰度样本的标签和结果留档,下一次处理旧内容退出时,可以直接复用同一套分层方法,而不必重新猜测哪些页面会被真实访问到。