入口页能不能把搜索蜘蛛带到目标 URL,第一步不是看链接怎么写,而是看搜索蜘蛛请求这个入口页时,服务器回了什么状态码。状态码不对,后面的链接解析、抓取排队都无从谈起。
搜索蜘蛛拿到不同状态码之后的反应
200:正常返回,链接才有机会被解析
只有返回 200 且内容完整时,搜索蜘蛛才会解析页面里的 a 标签,把目标 URL 放进待抓取队列。注意是“放进队列”,不代表马上抓,也不代表一定会被收录。
301 / 302:跳转会被跟随,但中间多一层损耗
搜索蜘蛛一般会跟随跳转,继续请求跳转后的地址。如果入口页本身只是一个中转站,跳转链每多一层,抓取配额和时间就多消耗一份。301 表示永久,搜索引擎倾向于把信号收敛到新地址;302 表示临时,入口页仍被当作独立 URL 对待,容易被反复回访。
还有一点容易被忽略:如果入口页 301 到目标 URL,等于告诉搜索引擎“入口页是目标 URL 的旧地址”,这跟“入口页用来分发链接”的目的并不一致。
403 / 401 / 429:直接被拦在门外
403 表示服务器拒绝,搜索蜘蛛看不到页面内容,也就不会解析任何链接。429 是请求过多,通常说明入口页被限流,搜索蜘蛛会降低抓取频率,严重时长时间不再回访。
404 / 410 / 5xx:入口页本身失效
404、410 说明入口页已经不存在,搜索引擎会逐步把它从索引中移除,之前积累的抓取记录也会衰减。5xx 是服务器错误,短期会被视为临时故障,长期频繁出现同样会导致抓取频率下降。
meta refresh 与 JS 跳转
这两种方式不产生 HTTP 状态码,搜索蜘蛛的处理意愿明显弱于 3xx 跳转。能用真实跳转或直接列出链接解决的,就不必绕这一层。
跳转链的长度,直接影响发现效率
- 一跳(入口页 200,直接列出目标链接):最理想。
- 两跳以内:可以接受,但每层都会消耗抓取预算。
- 三跳以上:搜索蜘蛛可能中途放弃,或者只抓到链路的某一段。
如果跳转是循环的,或者最终落到一个 404,这次访问基本等于浪费。
用日志判断状态码是否在拖后腿
- 在服务器日志里筛出搜索蜘蛛的 UA。
- 看入口页那一行的状态码分布:是不是大量 302、403 或者 5xx。
- 看跳转后的地址是否也被抓过,两次抓取之间隔了多久。
- 对比目标 URL 是否出现在日志里,出现了几次。
- 如果入口页抓取正常、目标 URL 却长期零抓取,问题多半在链接解析之后的环节,而不是状态码。
几个容易忽略的坑
- CDN 或 WAF 对搜索蜘蛛返回 403,但你自己用浏览器访问却是 200,这种情况很常见,需要单独用 UA 测试。
- HTTPS 证书错误、域名解析不稳定,会让搜索蜘蛛拿到连接失败,日志里甚至不落一条记录。
- 入口页返回 200,但内容是空的或者完全靠 JS 渲染,链接依然不会被发现。
- robots.txt 里对搜索蜘蛛做了限制,状态码再正常也没有用。
- 入口页频繁在 200 和 5xx 之间摇摆,比稳定返回一个错误更伤抓取节奏。
小结
状态码是入口页能否发挥作用的门槛,不是保证。200 加可解析的链接加稳定响应,是基本盘;301/302 要控制层数,403、429、5xx 要尽快修。修完之后用日志观察两到四周,再判断目标 URL 的发现是否恢复,比立刻下结论更靠谱。
搜索蜘蛛发现 URL、抓取 URL、把 URL 放进索引,是三件不同的事。状态码只影响前两件,第三件取决于目标 URL 自身的内容质量。