死链检查里最容易混淆的是三件事:链接能不能被访问、搜索引擎有没有抓取、页面有没有被索引。访问是服务器层面的响应,抓取是搜索引擎爬虫是否请求过这个URL,索引是搜索引擎是否把该URL作为可展示结果收录。一个URL返回404,说明访问失败;返回200,只说明访问正常,不代表一定被抓取或索引。死链检查的核心是把这三个状态拆开记录,而不是只看“打不开”或“搜不到”。
访问状态看HTTP响应码和响应内容。用命令行或抓取工具请求URL,记录状态码、最终跳转地址和页面标题。200表示正常返回,301或302表示跳转,404或410表示资源不存在,5xx表示服务器端出错。这里要区分“可能原因”和“已经定位的原因”:返回404可能是链接写错,也可能是页面被删除后没有做跳转,不能只凭一个状态码断定原因。
抓取状态看服务器日志或搜索引擎提供的抓取统计。日志里出现爬虫User-Agent对某个URL的请求,说明它来过;没有出现,只能说明在你看的日志时间范围内没来过,不能直接断定永远不抓。抓取和访问不是一回事:你能访问,爬虫可能因为robots.txt限制、服务器超时或链接层级太深而没有抓。
索引状态看搜索引擎结果页的收录查询或站点后台的索引报告。一个URL被抓取过,仍可能因为内容质量、重复页面或规范标签指向别处而不被索引。反过来,索引里出现某个URL,也不代表它当前一定能正常访问,可能抓取的是旧版本。
准备阶段先确定检查范围:是整站URL、某个栏目,还是外链指向的页面。范围不同,工具和判断标准不同。整站检查适合用爬虫工具批量跑,单条外链检查直接请求该URL即可。
实施阶段按下面顺序记录,避免把三种状态混在一列:
最关键的一步是给每个异常URL标注“卡在哪一层”。例如某URL返回200、日志里有抓取、但搜索结果里没有,那问题不在访问层,而在索引层,应检查页面是否有noindex、canonical是否指向其他URL、内容是否与已有页面高度重复。若某URL返回404、日志里也没有抓取,那它可能只是站内链接写错,先修链接,再观察抓取。
第一个误判是把robots.txt的抓取限制当成索引移除手段。robots.txt只控制爬虫能不能抓取,不保证页面从索引中消失;已经索引的URL仍可能出现在结果里。要移除索引,应使用页面级的noindex,并确认爬虫能抓到该页面才能读到这个指令。第二个误判是认为站点地图提交了就一定会收录。站点地图只是发现URL的线索,不保证抓取,更不保证索引。
验证时分别做两组检查:一组用请求工具确认访问状态,另一组用搜索引擎的URL检查或站点查询确认抓取与索引状态。两组结果不一致时,以“访问正常但未索引”“已索引但访问异常”这样的组合来描述,而不是笼统说“死链”。
把死链检查做成定期任务,每次只对比变化:新增404、从200变为404、从已索引变为未索引。对返回410的URL,如果确认不再提供内容,可以保留410而不是改成200空页面。对返回301的URL,检查跳转目标是否与当前内容相关,避免跳转到首页或无关页面。HTTPS只说明传输层加密,不代表页面没有漏洞,也不直接决定排名,不能把它当作访问或索引正常的依据。
不同搜索引擎对抓取和索引的处理要分别核查,不要用一家的结果推断另一家。下一步可以选一个已知异常的URL,按“访问状态—抓取记录—索引状态”三列做一张表,先确认它卡在哪一层,再决定是修链接、改服务器响应,还是处理索引指令。