蜘蛛每跟一次跳转,都要多花一次请求
当一个 URL 返回 301 或 302,蜘蛛不会立刻把它当成最终页面。它会先记录跳转目标,再发起一次新的请求。跳转一次还好,如果一条链上有三次、五次跳转,蜘蛛就要连续走完这几步,才能看到真正的页面内容。这个过程会占用抓取预算,也会拉长单次抓取的时间。
更麻烦的是,跳转链往往不是刻意设计的,而是在域名迁移、协议升级、目录结构调整中慢慢堆积出来的。蜘蛛每次回访都要重新走一遍,损耗是持续发生的。
几种重定向类型,蜘蛛的理解不一样
- 301 永久重定向:表示旧地址永久换到新地址,蜘蛛通常会把信号和后续抓取逐步转移到目标 URL。
- 302 / 307 临时重定向:表示临时跳转,蜘蛛可能仍会保留原 URL 的抓取,不一定会立刻替换。
- 308 永久重定向:和 301 类似,但明确要求保持请求方法,蜘蛛一般按永久跳转处理。
如果只是为了把用户从 http 带到 https,或者从旧域名带到新域名,应该用 301 或 308,而不是 302。用错类型,蜘蛛可能长期在两个地址之间反复确认,落地页的抓取稳定性会受影响。
跳转链通常从哪里来
常见的堆积点有几类:
- http 到 https 的协议跳转,再加上 www 与非 www 的跳转,容易形成两跳。
- 旧域名整体迁移到新域名,但内链和 Sitemap 里还保留旧地址。
- URL 改版后,旧目录 301 到新目录,新目录又 301 到带参数的最终地址。
- CDN 或负载均衡层配置了额外跳转,源站也有一层跳转。
- 登录、地区选择、语言切换等中间页,用跳转把蜘蛛带向默认页。
这些跳转单独看都有理由,叠在一起就会拉长路径。蜘蛛从入口到落地页的每一步都要重新解析、重新请求,服务器也要多响应几次。
落地页的取舍:尽量让内链直接指向终点
最直接的做法,是让站内链接和 Sitemap 里的 URL 都指向最终地址。比如 https 已经全站可用,内链就不要再用 http;确定使用 www 域名后,非 www 地址只保留跳转,不再出现在导航和文章正文里。这样蜘蛛从内链进入时,一次请求就能到达落地页。
跳转可以用,但最好不要让蜘蛛连续跟两次以上。一跳到达最终 URL,是更省抓取预算的结构。
Sitemap 里提交的也应该是最终 URL,而不是会跳转的旧地址。如果 Sitemap 里混入大量跳转地址,蜘蛛会先抓这些地址,再跟着跳到目标,额外消耗抓取次数。对于已经确认不再使用的旧 URL,可以用 301 指向最相关的目标页,而不是统一跳到首页或某个不相关的页面。
检查跳转链的几个入手点
- 用命令行或抓取工具查看单条 URL 的响应状态和 Location 头,确认跳转次数。
- 从服务器日志里筛选 3xx 状态码,看看哪些地址在被蜘蛛频繁请求。
- 抽查内链和 Sitemap 中的 URL,确认它们是否直接返回 200。
- 检查 CDN、反向代理和源站配置,避免同一层重复设置跳转。
- 对于跳转链,优先合并成一次 301,再确认目标页可正常访问。
服务器稳定性与跳转后的响应
跳转本身不复杂,但跳转后的落地页必须稳定。如果蜘蛛跟完跳转,落地页返回 5xx 或超时,这次抓取就白跑了,还可能影响后续回访节奏。带宽和连接数紧张时,跳转请求也会占用一部分并发。把跳转链缩短,等于减少了蜘蛛和服务器之间的往返次数,对两边都更轻。
另外,跳转响应不宜过慢。有些站点在跳转前做复杂判断、查数据库或等待外部接口,蜘蛛拿到的只是一个慢响应。更合理的做法是让跳转层尽量轻,把内容判断放到落地页之后。
小结
重定向不是不能用,但要控制长度和类型。内链和 Sitemap 尽量指向最终 URL,旧地址用一次 301 指向最相关的目标,避免多层跳转和跳转环。蜘蛛每次少走一步,落地页被发现和抓取的机会就更稳定一些。