可行边界通常只有三层:在响应层做重定向或状态码修正、在抓取层用 robots.txt 与站点地图控制发现路径、在内容层用替代页承接流量。只要模板不能动,就不要指望通过改页面结构来解决问题;能动的只是服务器配置、路由规则和外部信号。判断某次调整是否成立,要看它是否同时满足两个条件:不依赖模板渲染,且不把状态码与真实资源状态搞混。
最常见的场景是:手工挑几个失效地址,加一条重定向规则,用死链检查工具复测,状态码变成 200 或 301,看起来问题解决了。但全量跑一遍之后,失效地址数量并没有明显下降,甚至出现新的异常。这不是工具不准,而是样本和全量面对的条件不同。
原因之一是规则匹配方式。单条规则可以精确写死一个路径,全量场景下 URL 往往带参数、带大小写变体、带尾斜杠差异,精确匹配覆盖不到这些变体。原因之二是状态码来源被混淆。有些遗留系统对不存在的资源也返回 200,只是页面内容为空或是一段错误提示;此时工具报告“正常”,但真实状态是失效。前者是覆盖范围问题,后者是信号可信度问题,两者需要的调整动作完全不同。
要判断问题出在“覆盖不够”还是“状态码不可信”,可以各取一组样本分别验证。
只有先确认状态码能真实反映资源状态,后续的统计和清理动作才有意义。否则工具给出的数字只是服务器返回值的汇总,不是失效资源的数量。
这是遗留系统里最常动的一层,通常通过服务器配置或反向代理规则实现,不触碰模板。
这一步的结果会直接决定下一步:如果重定向后状态码稳定且目标页与原内容相关,就可以进入抓取层收敛;如果重定向后仍出现 200 空页,说明响应层没有真正解决问题,继续做站点地图或内容替代都是徒劳。
robots.txt 可以限制抓取,但它不是索引移除手段。被 robots.txt 禁止抓取的地址仍可能因为外部链接而出现在结果中,只是抓取方无法获取内容来判断。因此不要用 robots.txt 来“清理”失效地址,它只适合阻止对无价值路径的持续抓取。
站点地图同样不保证收录,它只是提交候选地址的渠道。在遗留系统里,站点地图往往由程序生成,如果生成逻辑仍包含已失效路径,提交它只会扩大问题暴露面。可行的做法是确认站点地图只包含返回正常状态码的地址,并接受它不保证收录这一事实。不同抓取方对站点地图和 robots.txt 的支持细节需要分别核查,不能按一套规则推断全部行为。
模板不能改,意味着无法在失效页面上加提示模块。此时可行的替代是准备一个独立于原模板的承接页,由响应层把失效地址重定向过去。承接页需要满足两点:与原内容主题相关,且能独立访问,不依赖原模板的导航或样式。
假设有一批产品页因系统下线而失效,模板无法修改。可以准备一个说明页,列出这些产品的替代型号或下线说明,把失效地址 301 到该页。这里的数字只用于说明比较方法:如果 100 个失效地址都指向同一个通用首页,用户无法判断自己该看什么;如果按主题分成若干承接页,每个页面覆盖一组相关地址,用户获得的信息更具体。这个假设不构成任何效果承诺,只是说明分组与不分组在信息传递上的差别。
不要为了降低工具报告里的失效数量,把大量不相关地址统一重定向到首页。这会让状态码看起来正常,但用户和抓取方都无法获得有效信息,属于把信号掩盖掉而不是修复。也不要在未确认状态码可信之前,依据工具统计批量删除或批量重定向,因为统计本身可能建立在错误的状态码之上。
另外,请求量或抓取量下降不能单独证明处理正确。它可能来自抓取方调整了抓取节奏、robots.txt 生效、站点地图未更新,或者外部链接减少。要判断处理是否有效,应回到状态码与响应体是否一致这个基础证据上,而不是只看数量变化。
把边界收在一句话上:模板不可改时,能调整的是响应行为、抓取路径和承接内容,不能调整的是页面本身的呈现逻辑;任何调整都要先确认状态码可信,再决定是改覆盖范围还是改信号定义。