能改的范围通常不在模板,而在请求到达模板之前的层:Web 服务器、反向代理、CDN 或应用路由。如果这些层你也没有权限,可行边界就只剩“标记与观察”,而不是“修复”。下面以你手里的一份死链清单为对象,逐步判断每条链接能走到哪一步。
把清单里的每条 URL 逐个问一个问题:这条请求的响应,是在进入模板之前就确定了,还是必须由模板渲染决定?前者通常可动,后者通常不可动。
/old-a/、/old-b/:可以在服务器或 CDN 层用规则整段处理。?id= 的旧详情页:要看应用是否仍能解析该参数,不能只看静态规则。分完组后你会发现,真正“无法处理”的往往只是第二类。第一类和第三类常有空间,只是空间不在你原本以为的地方。
这是遗留系统里最常保留的调整面。即使模板锁死,运维侧通常仍能加规则。可执行动作:对某个旧前缀配置 301 到对应新前缀,先只对一条 URL 生效,观察响应头中的状态码和 Location 是否按预期返回。
结果如何影响下一步:如果单条生效,说明这一层可用,可以把同前缀的规则批量扩展;如果单条不生效,先确认请求是否被更上层的 CDN 缓存拦截,而不是继续加规则。这里要区分两件事:返回 301 只说明服务器按你的规则响应,不等于该 URL 会从索引中消失,索引更新是另一回事。
边界条件:当旧 URL 与新 URL 不是一对一,而是一对多或语义已变时,整段重定向会把用户送到不相关页面。这种情况下,宁可让该组返回 410,也不要做错误的 301。
如果连服务器规则都动不了,很多人会转向 robots.txt 和站点地图。这里必须把预期放低。
robots.txt 的 Disallow 是抓取限制,不是索引移除。被禁止抓取的 URL 仍可能因外部链接出现在结果里,只是内容无法被读取。站点地图提交也不保证收录,它只是提供发现线索。这两项都不该被当作死链的“处理完成”。
可执行动作:把确认要下线的旧路径写进 robots.txt,同时把仍有效的新路径放进站点地图,然后分别核查两类 URL 的响应状态。结果如何影响下一步:如果旧路径仍返回 200,说明问题在响应层而非抓取层,回到上一节;如果旧路径返回 404 或 410 且已被禁止抓取,那这条的边界就到此为止,剩下的是等待,而不是继续操作。
模板不能改,但内容区、导航配置、菜单数据、友链模块有时是独立于模板的可编辑项。可执行动作:在站内搜索旧 URL 的引用位置,把指向死链的链接改为有效地址。这一步的收益常被低估,因为站内链接是死链被持续发现的来源之一。
边界:如果链接是模板硬编码输出的,内容区改动无效,此时不要反复尝试,直接归入“需运维层处理”的那一组。
假设清单里有三条 URL:A 是旧栏目前缀,B 是参数型详情页,C 是已删除的单篇。
三条的差别不在技术难度,而在请求被哪一层决定。判断清楚这一点,你才知道哪些动作值得做、哪些只是消耗时间。对暂不处理的条目,写明复查触发条件,例如应用层开放映射配置或运维层开放规则权限,这比笼统地“以后再优化”更有可执行性。