先给结论:不要试图让死链接检测工具在两种状态下得到同一个结果,而应把“设备或登录状态”当成地址的一个维度,分别抓取并保存证据,再决定这个地址是保留、改写还是退出索引。如果两种状态返回的最终URL相同但正文差异很大,检测工具报出的状态码只能说明服务端愿意响应,不能说明两种状态的链接价值一致。
同一地址在不同设备或登录状态下返回不同内容,至少有三种可区分的原因。第一种是服务端按 User-Agent 或 Cookie 返回不同模板,最终URL不变,但正文结构、导航甚至主要链接不同。第二种是发生重定向,例如未登录时跳转到登录页,已登录时停留在原地址。第三种是前端根据本地存储或接口返回渲染不同内容,检测工具拿到的初始HTML与浏览器实际看到的不一致。
判断方法很直接:用同一死链接检测工具跑两遍,一遍带移动端 User-Agent,一遍带桌面端;一遍不带 Cookie,一遍带一条已登录会话。对照时看三个字段——最终URL、状态码、响应正文中是否出现目标内容的关键词或主要链接。如果最终URL不同,问题属于重定向和访问控制;如果最终URL相同但正文不同,问题属于内容分发;如果状态码相同而正文里根本没有目标内容,问题属于前端渲染,检测工具的结果不能单独作为保留或退出的依据。
保留适用于两种状态返回的正文虽然不同,但都包含该地址承诺的核心信息,且差异只是展示层。例如商品页在登录后显示会员价,未登录显示原价,主体描述和规格一致。这种情况下可以保留原地址,但要在检测记录里注明“内容差异来自状态,不是链接失效”。
改写适用于未登录状态返回的内容明显更少、更泛,或者跳转到与主题无关的页面。此时继续保留原地址会让未登录访问者和部分抓取请求拿到低相关页面。改写的方式不是换一个死链接检测工具,而是调整服务端返回策略:对未登录请求也输出可索引的主体内容,把登录后才有的部分做成增强层。改完后重新抓取两种状态,确认最终URL一致、核心内容在两种状态下都出现。
退出只适用于该地址在两种状态下都无法返回与主题相关的实质内容,例如登录后也只是一个空壳页,或者所有状态都指向同一个无内容占位页。退出的动作可以是返回410,也可以是把入口链接改到真正承载内容的地址。需要提醒的是,用robots.txt限制抓取不等于可靠的索引移除,已经索引的地址仍可能出现在结果中;站点地图也不保证收录,退出决策不能靠提交或删除站点地图条目来完成。
假设有一个地址 /member/price,未登录时返回200,正文只有一句“请登录查看”;带登录Cookie时返回200,正文包含完整价格表。死链接检测工具两次都报200,如果只看状态码,会误判为“链接正常,无需处理”。
正确的对照记录应该写成:未登录状态最终URL为 /member/price,状态码200,正文不含价格表;登录状态最终URL相同,状态码200,正文含价格表。基于这份记录,下一步动作是检查未登录返回的正文是否包含该地址可以独立成立的信息。如果没有,就属于改写场景,而不是保留场景。改完后再次跑两种状态,只有未登录正文也出现可索引的主体内容,才能把这条地址从待处理清单里移出。
个别样本成立,不代表可以批量套用。当检测范围扩大到几千条地址时,会出现三类例外。第一类是登录态过期,原本返回完整内容的地址变成登录页,这不是链接失效,而是会话失效,需要先刷新会话再重跑。第二类是设备识别误判,某些移动端请求被返回桌面模板,导致正文对比失去意义。第三类是接口超时或限流,同一地址两次请求返回不同状态码,这属于抓取稳定性问题,不是内容分发问题。
处理这些例外的顺序是:先固定会话和User-Agent,再排除超时和限流,最后才判断内容差异。如果跳过前两步,直接把所有差异都当成“需要改写”,会把大量正常地址误判为问题地址。反过来,如果所有异常都归因于会话失效,也会漏掉真正按状态返回低质内容的地址。
一个可执行的动作是:在检测工具的输出里增加一列“对照状态”,标明该结果是未登录、已登录、移动端还是桌面端。只有同一地址的两种对照状态都完成抓取,才进入保留、改写或退出的判断。缺少任一状态的结果,只能作为待补证据,不能作为最终取舍依据。