蜘蛛每次访问入口页,服务器都会回一个 HTTP 状态码。这个三位数字比日志里的 UA 更诚实:它直接说明服务器愿不愿意把内容交出去。把几天日志里的状态码做个分布统计,往往比逐条翻抓取记录更快发现问题。
2xx:返回正常,但不等于有效
200 是最常见的返回,要留意两种“假正常”:
- 200 但正文为空:页面能打开,抓到的却是一段空白模板或 JS 壳,蜘蛛拿不到链接,这次抓取就白费了。
- 软 404:内容其实不存在,却仍然返回 200,并展示“暂无内容”。蜘蛛会把它当正常页反复回访,既浪费抓取预算,也让入口页整体显得低质。
验证方法很简单:随机抽几个入口 URL,用抓取工具看返回体里到底有没有可跟的链接和一点实际文字。
3xx:跳转方式决定蜘蛛跟不跟
301 与 302 的差别
301 表示永久迁移,蜘蛛通常会把原地址替换成新地址;302 是临时跳转,蜘蛛一般保留原 URL 并继续回访。如果入口页本来只做链接分发的中转,用 302 更贴合语义,也能避免一堆中转地址被写进索引。
跳转链不要太长
每多一跳,蜘蛛就多花一次请求,跟丢的概率也更高。入口页到目标页尽量控制在一到两跳,同时避免出现 A→B→A 的回跳,那会让蜘蛛在循环里打转。
4xx:明确拒绝与死链
- 403 / 401:通常是 WAF、IP 黑名单或鉴权拦住了。要区分是只拦蜘蛛,还是拦所有人。
- 404:普通死链,蜘蛛会反复确认,清理或改 301 更好。
- 410:明确告知已删除,蜘蛛一般比 404 更快放弃,批量下线资源时可以用。
- 429:说明请求太密被限流。此时应降频或扩容,而不是继续往里塞链接。
5xx:自己的问题,先修服务
500、502、503、504 都属于服务端异常。偶发可以忽略,如果日志里 5xx 占比持续偏高,蜘蛛会主动降低来访频率,恢复需要时间。503 可以配合 Retry-After 头告诉蜘蛛多久后再来,比直接超时更友好。
用状态码分布做日常巡检
- 统计近 7 天蜘蛛请求的状态码占比,2xx 应占绝大多数。
- 把 3xx 的跳转链画出来,找出多跳与回跳。
- 把 4xx、5xx 的 URL 单独列一份清单,逐条确认原因。
- 对长期 200 但零链接、零正文的页面做替换或下线。
状态码只说明“这次请求发生了什么”,不代表内容会被收录。把状态码修干净是基础工作,不要指望改几个返回码就能带来收录变化。
建议把状态码统计固定成每周一次的动作,和抓取量放在一起看。抓取量下滑时,先看是不是某一类状态码突然变多——多数异常在数字上会先露头。