蜘蛛在站内移动靠的是链接。只要页面上还挂着一条指向已删除地址的链接,蜘蛛就会顺着走过去,然后拿到一个 404。单次 404 不会有什么戏剧性的后果,但如果这类链接散落在导航、侧栏和列表页里,抓取路径就会不断出现断头路,抓取预算被反复消耗在同一批不存在的 URL 上。
蜘蛛拿到 404 之后发生了什么
服务器的 404 响应本身是明确的信号:这个地址没有内容。蜘蛛通常会把该 URL 标记为不存在,不再为它安排后续抓取。已抓取的页面不会因为页面上存在一个死链就整体被判定为低质,但这条链接不会再把任何抓取通道传递下去。
如果服务器返回的是 410,含义更彻底——资源已被永久删除。相比之下,410 往往能让蜘蛛更快地把 URL 从队列里清掉;404 也可能只是暂时找不到,蜘蛛偶尔会再回来确认一次。两种都可以用,关键是别把 404 的响应写成 200。
还有一种容易被忽略的情况:页面已经删了,但服务器把请求重写到某个通用模板并返回 200,页面上写着“内容不存在”。这就是软 404。蜘蛛看到的是正常页面,会照常抓取、照常收录,只是收录的是一张空壳。
死链是怎么拖慢抓取的
- 预算被占用:每次抓到 404 都要走一遍请求与响应流程,这部分开销换不回任何有效内容。
- 路径断掉:本来可以通过这条链接到达的深层页面,现在少了一条入口。
- 日志变吵:404 频繁出现会掩盖真正的抓取异常,排查时更难看出问题在哪。
- 反复触发:如果 Sitemap 或站内多处仍然写着这个 URL,蜘蛛会在不同时间重复验证。
处理顺序:先改链接,再收 URL
- 站内仍有价值的对应关系:把旧地址 301 到内容最接近、最相关的一个页面,而不是统一丢到首页。整站统一跳首页很容易被当成软 404,用户体验也不好。
- 内容确实不再需要:让它返回 404 或 410,不要为了看起来干净而返回 200。确定永久删除的用 410 更干脆。
- 临时下架、稍后会恢复:尽量保留原 URL 可访问,或者给出明确的恢复预期,不要长期用 302 打游击。
- 清理指向死链的入口:优先处理主导航、面包屑、侧栏和正文里的链接,这些位置被抓取的概率最高。
- 检查 Sitemap:已删除的 URL 应从清单里移除,避免蜘蛛按图索骥反复去撞 404。
从日志里确认死链是否真的收干净了
处理完之后不要只看页面,去看服务器日志。筛选出返回 404、410 的请求,重点看两件事:一是请求频率是否在下降,二是 Referer 指向哪里。如果某个 404 地址还在被稳定地请求,通常说明站内或站外仍有链接指向它,或者 Sitemap 里还留着这条记录。把来源页找出来改掉,比单纯在日志里屏蔽这个 URL 更有意义。
几个常见的处理误区
- 所有 404 一律 301 到首页:短期看似减少了死链,实际会把大量无关入口压缩到一个页面上,抓取路径反而更混乱。
- 死链页面用 JS 跳转:蜘蛛渲染需要额外成本,而且跳转前的状态码仍然可能是 200。
- 只改正文链接,忘了分页和筛选参数:列表页翻旧了也会留下大量失效地址。
- 删了页面却保留 Sitemap 条目:这是最容易被忽略的重复抓取来源。
死链本身不是灾难,长期没人管的死链才是。把入口改掉、把状态码写对、把清单清干净,蜘蛛的抓取路径自然就顺了。