搜索抓取

404、410、503 与软 404:蜘蛛遇到这些状态码时会怎么处理

蜘蛛抓取 URL 时最先拿到的是状态码,它决定了继续解析还是暂时离开。文章讲清 404、410、503、429 与软 404 的区别,说明哪些写法会让蜘蛛误判,以及如何通过日志和内链检查发现并修正这些问题。

搜索抓取

404、410、503 与软 404:蜘蛛遇到这些状态码时会怎么处理

蜘蛛抓取一个 URL 时,最先拿到的不是页面内容,而是服务器返回的状态码。这个三位数字决定了它接下来是继续解析页面、暂时离开,还是把这条 URL 标记成需要移除。很多看起来像“蜘蛛不来”的问题,实际原因是状态码给错了信号。

404 和 410 都表示“没了”,但语气不同

两者都会让蜘蛛把该 URL 从抓取队列里去掉,但表达的含义有差别:

  • 404:资源当前不存在。适合内容临时下线、地址写错、参数组合无意义的情况。蜘蛛会在一段时间内保持观察,如果长期返回 404,权重会被逐步释放。
  • 410:资源已永久删除,不会再回来。适合明确下架的内容。它比 404 更干脆,蜘蛛通常不再反复回访。

如果只是改版换址,正确做法是 301 而不是 404。用 404 代替跳转,等于把老 URL 积累的链接关系直接丢掉,同时让内链变成死链。

软 404:返回 200 的空壳页面

这是最容易被忽略的一类问题。页面内容已经不存在,但服务器依然返回 200,页面里写着“内容已删除”“该商品下架”,或者只剩导航和页脚。蜘蛛读到 200,会认为这是一个正常页面,于是照常解析、照常收录,甚至持续回访。

状态码写 200,页面却没有实质内容,蜘蛛既拿不到有效信息,又浪费了一次抓取机会。这类页面积累得多,会明显拉低整站的抓取效率。

常见的软 404 来源:筛选参数组合出来的空结果页、已下架的商品详情、被清空但没删模板的栏目页、登录后才能看但未做拦截的页面。处理方式是让这些 URL 真正返回 404 或 410,而不是停留在 200。

503 和 429:临时不可用时给出明确信号

服务器维护、短时过载、正在迁移,这类情况不应返回 200 空页,也不该直接 404。更合适的做法是:

  • 503:服务暂时不可用。配合 Retry-After 头告诉蜘蛛多久后可以再来,能减少无谓重试。
  • 429:请求过于频繁。适合对高频访问做限速时使用。

需要注意,503 只适合短时间使用。如果长期挂着 503,蜘蛛会逐步降低抓取频率,恢复后需要一段时间才能回到原来的节奏。

跳转状态码:别让蜘蛛在链上耗时间

301 是永久跳转,302、307 是临时跳转。内容确实换了地址用 301;只是活动页、临时 A/B 测试用 302。要避免的是跳转链:A 跳到 B,B 又跳到 C。蜘蛛每次都要多走一步,跳转层级越深,URL 被发现和被传递的效果越差。内链和 Sitemap 里应尽量直接指向最终地址。

怎么发现状态码问题

  • 看抓取日志:统计蜘蛛拿到的状态码分布,重点看 200 但内容很薄的那一批。
  • 用抓取工具批量请求站点主要 URL,比对返回码与页面实际内容是否一致。
  • 检查内链:站内链接指向的地址如果返回 404 或跳转,会直接浪费抓取预算。
  • 检查 Sitemap:里面列的 URL 应全部返回 200,不要把跳转地址或已删除页面留在清单里。

改完状态码,内链和 Sitemap 要同步更新

状态码修正往往只是第一步。如果一个栏目整体下线,除了让页面返回 410,还要把指向它的内链改成有效地址或移除,把 Sitemap 里的条目删掉,并在相关页面留下通往其他内容的出口。否则蜘蛛顺着旧链接反复撞墙,URL 发现的效率依然上不去。

状态码本身不复杂,难的是保持一致性:服务器返回什么、页面上实际有什么、内链和 Sitemap 指向哪里,这三者对齐了,蜘蛛的抓取路径才会顺畅。