很多站点为了换域名、做短链或统计点击,会把入口页的链接先指向一个跳转地址,再由跳转地址送到真正的目标 URL。这样做搜索蜘蛛还能不能发现目标页,取决于跳转类型、跳转层数和终点页面的状态码。
搜索蜘蛛怎么处理跳转
主流搜索引擎的抓取程序遇到 301、302、307、308 这类 HTTP 跳转,通常会继续请求 Location 头里的新地址,直到拿到 200 状态码的页面,或者直到跳转次数超过它内部的限制。也就是说,链路不是看一眼就走,而是会一路跟下去,但每一跳都会消耗抓取资源。
301 和 302 的区别
- 301 永久跳转:一般会被当作地址已经永久更换,信号倾向传递到新地址,蜘蛛也会较快记住新地址。
- 302 / 307 临时跳转:搜索引擎倾向继续保留旧地址,不会马上把旧地址替换掉,长期使用容易让旧地址被反复抓取。
- 链式跳转:A→B→C→D 这种多跳,每增加一跳就多一次请求,跳数太多时蜘蛛可能中途放弃,目标 URL 就发现不了。
入口页链接指向跳转地址的常见问题
1. 跳转层数太多
入口页链接一次跳转通常没问题,两层也算常见。三层以上就值得改,因为抓取预算被消耗在中间地址上,目标 URL 的发现速度会变慢。若入口页本身放了大量跳转链接,整体抓取效率会进一步下降。
2. 跳转地址本身被 robots.txt 阻止
如果 robots.txt 屏蔽了跳转中间地址,蜘蛛可能无法读取跳转,即使目标 URL 允许抓取也发现不了。排查时要连中间地址一起看,而不是只看目标 URL。
3. 跳转到 404、410 或 5xx
跳转到最终返回 404 的地址,目标 URL 自然无法被抓取,入口页上的这条链接基本无效。若最终地址返回 5xx,蜘蛛会当作抓取失败,可能过一段时间再试,也可能降低回访频率。
链接指向哪里,比链接写在哪里更重要。跳转链路上的任何一个坏节点,都会让后面的目标 URL 发现失败。
4. 跳转目标与入口页协议或域名不同
从 https 入口页跳到 http 目标,或跳到另一个域名,技术上蜘蛛都会跟,但要注意目标域名自身的可抓取性、证书有效性和 robots.txt 规则。跨域跳转不是禁止行为,只是增加了不确定性。
5. 用 JavaScript 或 meta refresh 做跳转
HTTP 跳转是蜘蛛最容易处理的。JavaScript 跳转和 meta refresh 依赖渲染能力,可能被延迟处理,甚至不处理。把关键目标 URL 的发现寄托在这类方式上,稳定性明显不如直接写超链接或使用 301。
入口页做跳转时的实用建议
- 能直链就直链。目标 URL 状态正常时,入口页直接写最终地址,链路最短,发现最稳。
- 需要统计点击时,优先用前端事件或参数,而不是把用户绕到跳转地址再绕回来。
- 必须跳转就用 301,链条控制在一跳以内,并把入口页的链接逐步替换成最终地址。
- 确保最终地址返回 200,且没有被 robots.txt、noindex 或登录墙挡住。
- 检查日志时,除了看目标 URL 的抓取记录,也要看中间跳转地址是否被请求,这能判断蜘蛛卡在哪一步。
- 跳转地址不要加 nofollow,否则蜘蛛可能连跳转都不跟。
- 旧域名的 301 尽量指向新域名的同内容页,不要统一跳到首页,否则目标 URL 的发现会变成首页发现。
怎么验证蜘蛛是否跟到了终点
可以在目标页上放一个独特标记,比如仅在蜘蛛 UA 下可见的一段文字,或者观察服务器日志中目标 URL 的请求来源。更直接的办法是看日志里中间地址的请求后面是否紧跟着目标地址的请求。如果只有中间地址被请求,目标地址长期没有记录,就要怀疑跳转链太长或终点不可抓。
最后提醒一点,跳转本身不会让目标 URL 更容易被收录,它只是把发现路径延长了一段。蜘蛛池入口页的价值是让目标 URL 被顺藤摸瓜地找到,链路越干净,结果越可预期。