如何检查网站死链:页面内容相同但响应头不同会影响哪些判断

📍 WDQWDWQD987AAAAA:216.73.216.56
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /a92e11f01370.html
📄

如何检查网站死链:页面内容相同但响应头不同会影响哪些判断

页面内容相同、响应头不同时,检查死链不能只看“页面打开后显示什么”,而要先判断响应头是否让抓取工具把该地址归入不可索引、临时失败或永久失效。若正文一致但一个地址返回 200、另一个返回 404 或 410,应以状态码和重定向链为准,而不是以肉眼看到的正文为准;若正文一致但一个返回 200、另一个返回 301 再到 200,则要按最终地址判断死链归属。这个区别会直接影响下一步:是修链接、改跳转,还是只调整内部链接指向。

先区分“内容相同”与“响应结论相同”

两个地址的可见正文完全一样,并不等于它们对检查死链给出同一结论。响应头里的状态码、Location、Content-Type、X-Robots-Tag 以及缓存相关字段,都会改变工具和搜索引擎对该地址的处理方式。常见情形是:同一套模板把相同正文输出到多个路径,但其中一个路径返回 200,另一个返回 404;此时后者仍是死链,正文相同只是干扰项。

另一个常见情形是 200 与 301 并存。旧地址返回 301 指向新地址,新地址返回 200,正文与旧地址原本内容相同。对用户来说两个地址都能看到内容,但对死链检查来说,旧地址不是“死链”,而是“已重定向”;真正要确认的是最终地址是否稳定返回 200,以及站内链接是否仍大量指向旧地址。若最终地址又返回 404,那么这条重定向链的终点才是死链。

两种条件下的不同选择

条件一:正文相同,但状态码一为 200、一为 404/410

选择依据是:状态码表达的是该地址本身是否可用,正文只表达“如果返回成功,用户会看到什么”。404 和 410 都表示该地址不可用,区别在于 410 更明确地表示已移除;但两者都不应因为正文看起来正常而被当成有效页面。此时应把返回 404/410 的地址列为死链,并检查是谁在链接它。

实施动作:先确认该 404/410 是否由服务器配置、路由规则或内容下线造成,再决定修复方式。若该地址本应存在,修复服务器或路由后重新请求,确认返回 200;若该地址本应废弃,则把站内指向它的链接改到有效地址,或设置 301 指向最终有效地址。动作结果会影响下一步:如果修复后返回 200,就继续检查同一模板下是否还有其他地址返回 404/410;如果修复后仍返回 404/410,就要回到服务器配置或内容源排查,而不是继续改正文。

条件二:正文相同,但一个返回 200、另一个返回 301 再到 200

选择依据是:301 表示地址已永久迁移,检查死链时应追踪重定向链,而不是在第一个响应处停止。若最终地址返回 200,旧地址不应被计为死链;若最终地址返回 404/410,或重定向链出现循环、跳转到无关地址,则旧地址应视为需要处理的坏链。正文相同可能只是因为旧地址仍能通过重定向展示同一内容,并不说明旧地址本身应继续被链接。

实施动作:记录从起始地址到最终地址的完整跳转链,确认每一跳的状态码和 Location。若最终地址有效,下一步是把站内链接直接指向最终地址,减少不必要的跳转;若最终地址无效,下一步是修复最终地址或改指向其他有效页面。这个动作的结果会影响后续检查范围:当站内链接都指向最终地址后,再检查是否还有旧地址被外部链接或站点地图引用。

响应头不同时,哪些判断必须重新做

第一,死链归属判断。内容相同但状态码不同,死链应归到返回 404/410 的地址,或归到重定向链终点失效的地址,而不是归到“看起来有内容”的地址。

第二,索引判断。200 通常表示可返回内容,但不等于一定被索引;X-Robots-Tag: noindex 或页面内的 robots meta 仍可能阻止索引。反过来,返回 404/410 的地址即使正文相同,也不应被当作可索引页面。robots.txt 的抓取限制不等于可靠的索引移除,因此不能用它替代对状态码和 noindex 的核查。

第三,站点地图与内部链接判断。站点地图不保证收录,若站点地图里同时存在返回 200 和返回 404/410 的地址,应分别处理:有效地址保留,失效地址移除或改为最终有效地址。内部链接同理,不能因为目标页面正文相同就保留指向 404/410 的链接。

第四,安全与协议判断。HTTPS 不保证安全无漏洞或排名,因此不能因为地址是 HTTPS 就忽略响应头异常。若两个地址协议不同、正文相同但一个返回 200、另一个返回 404/410,仍应按状态码判断死链,而不是按协议判断。

一个注明假设的短例子

假设某站有 /old-page 和 /new-page 两个地址,正文相同。检查时发现:/old-page 返回 301,Location 指向 /new-page;/new-page 返回 200。此时不应把 /old-page 计为死链,而应把站内链接改为直接指向 /new-page。改完后再次请求,确认 /new-page 仍返回 200,且没有新的 404/410 出现。若改完后发现 /new-page 变成 404,则说明问题不在旧链接,而在最终地址本身,下一步应排查 /new-page 的内容源或路由配置。

反过来,假设 /old-page 返回 200,/new-page 返回 404,正文相同。此时应把 /new-page 列为死链,检查它是否被内部链接、站点地图或外部来源引用;若它本应有效,修复后重新请求并确认返回 200;若它本应废弃,则把引用改到 /old-page 或其他有效地址。

例外与适用条件

有些响应头差异不直接决定死链结论。例如缓存头、内容编码、语言头不同,但状态码和最终地址都有效时,通常不影响“是否死链”的判断,只影响缓存、展示或内容协商。需要单独核查的是状态码、重定向链、X-Robots-Tag 和 robots meta,因为它们会改变地址是否可访问、是否可索引。

另外,不同搜索引擎对 404、410、301 和 noindex 的支持与处理细节可能不同,必要时应分别核查目标搜索引擎的说明。请求量、抓取量或某项统计归零不能单独证明处理正确,因为服务器日志缺失、抓取预算变化、robots.txt 限制或统计工具配置变化都可能造成类似现象;应结合状态码复测和最终地址确认来判断下一步。

图1 图2

nginx