站内出现重定向本身很正常,改版、换域名、统一 www、上 HTTPS 都会用到。问题往往出在“一条链接要跳好几次”:蜘蛛每跟一次跳转都要重新发一次请求,链路越长,花在路上的成本越高,真正要抓的内容反而被推后。
蜘蛛跟重定向的大致过程
蜘蛛请求一个 URL,如果拿到 301、302、307、308 这类状态码,会读取 Location 头,再对新地址发起请求。多数爬虫对跳转次数有上限,常见做法是跟到几跳之后停止,并把这条链路标记为可疑;具体上限各家不同,也不会公开。可以确定的是:跳得越多,被中途放弃、或只能抓到中间页面的概率越大。
另一个容易忽略的点是,蜘蛛记住的往往是链路的起点。站内还在大量链向旧地址,等于持续把蜘蛛送到一条绕路的入口上,抓取预算就被重复消耗。
常见的几种链路形态
- 协议与域名叠加:http 跳 https,再跳 www,最后补一个结尾斜杠,一条链接跳三次。
- 移动站与主站互跳:m 站没有做好对应关系,蜘蛛在两端来回跳。
- 改版遗留:旧栏目整体 301 到新栏目,新栏目内部又做了一次 301。
- 短链与跳转服务:站内用了自建短链,蜘蛛先走一次短链域名。
- 前端跳转:用 JS 或 meta refresh 做跳转,蜘蛛拿到的是一个空壳加一段脚本。
什么时候值得动手修
不是所有重定向都要清掉。一次性的、指向明确最终地址的 301,保留没有问题。需要处理的是这几类:链路长度超过一跳、中间跳是 302 却长期存在、同一批链接指向多个不同终点、以及大面积内部链接还指向旧地址。
排查顺序可以这样走
- 先看抓取日志里 3xx 的比例和涉及哪些目录,判断是零散问题还是成片问题。
- 挑几个样本链接,完整跟一遍,记录每一跳的状态码和终点。
- 找出每一跳的来源:是服务器配置、程序设置,还是页面里的内部链接写错了。
- 把中间跳去掉,让起点直接 301 到终点,一跳到位的链路最省事。
- 统一入口规范:http/https、是否带 www、结尾斜杠,三件事只保留一种写法。
- 回头改内部链接和 Sitemap,让它们直接写最终地址,不再走旧地址。
站外链接和短链
站外来的链接跳几次,自己能改的有限,但至少可以保证落地页不再二次跳转。自建短链如果只用于活动推广,建议在活动结束后让短链直接 301 到内容页,而不是层层套娃。
重定向不会凭空带来什么好处,它的作用只是告诉蜘蛛“这个地址换地方了”。把一个地址准确地指到另一个地址,任务就完成了,剩下的跳转都是额外成本。
一个简单的自查习惯
每次调整域名、协议、目录结构之后,抽十分钟跟一遍典型链接:从首页到栏目页再到内容页,看每一跳是否必要。链路越短、终点越稳定,蜘蛛把时间花在内容上的比例就越高,这比事后反复提交新地址更省力。