常见问题

入口页用 301/302 跳转到目标 URL:搜索蜘蛛会跟到第几跳

入口页用 301 或 302 跳转时,搜索蜘蛛是在 HTTP 层跟着 Location 继续请求,这和页面里的普通链接不是一回事。本文梳理跳转链长度、跨域跳转、循环跳转对 URL 发现的影响,并给出控制跳数、排查落点状态码的实操建议。

常见问题

入口页用 301/302 跳转到目标 URL:搜索蜘蛛会跟到第几跳

先区分两种跳转

很多人在排查 URL 发现问题时,会把两件事混在一起:一种是页面 HTML 里写了链接或 meta refresh,另一种是服务器直接返回 301、302、307、308 这类状态码。前者需要搜索蜘蛛先把页面 HTML 抓下来、解析出链接;后者是请求发出后,服务器在 HTTP 层就把地址换掉了,搜索蜘蛛还没拿到任何 HTML。

这两条路径对目标 URL 的发现影响不一样。meta refresh 需要页面被解析,服务器跳转则主要取决于搜索蜘蛛愿不愿意继续跟下一跳。

搜索蜘蛛遇到 3xx 的基本逻辑

当搜索蜘蛛请求入口页,服务器返回 301 或 302,响应头里带着 Location,搜索蜘蛛通常会把这次跳转理解为该 URL 的新地址,然后对 Location 指向的 URL 再发起一次请求。这个过程可以重复,但不会无限重复。

  • 301 一般被理解为永久跳转,搜索蜘蛛更倾向于把原 URL 的信号归到目标 URL;
  • 302、307 属于临时跳转,处理上更保守,原 URL 可能仍会被反复抓取;
  • 每一跳都会消耗抓取资源,跳数越多,留给真正内容页的抓取预算就越少。

多跳跳转:搜索蜘蛛会跟到第几跳

搜索引擎没有公开最多跟几跳的硬性数字,但实践里,短链(一到两跳)基本都能跟到终点;跳数一多,比如五跳以上,不同引擎、不同站点的表现会明显分化:有的继续跟,有的停在某一跳,有的干脆放弃整条链。

更麻烦的是,跳转链中间任何一跳出问题,后面就断了。常见情况包括:

  • 中间某一跳返回 404 或 410,整条链断在这里;
  • 中间某一跳返回 5xx,搜索蜘蛛可能过段时间重试,也可能降低对该路径的抓取频率;
  • 跳转链里混入登录页、验证页、地区选择页,最终落点不是你想让搜索蜘蛛看到的内容;
  • 跳转链形成环,A 跳到 B、B 又跳回 A,搜索蜘蛛跟几圈后会放弃。

跨域跳转要单独看

如果入口页 302 到另一个域名下的目标 URL,搜索蜘蛛会跨域跟过去,但这不等于两个域名之间有什么信任传递。跨域跳转只解决能不能发现这个 URL,不解决这个 URL 会不会被收录。而且在批量入口页同时跳向同一个目标域名时,这种模式更容易被当成异常。

跳转后,浏览器和搜索蜘蛛看到的不完全一样

用户访问时,浏览器会跟着跳,地址栏最终停在目标 URL。搜索蜘蛛这边,它记录的是原 URL 跳转到目标 URL 这个事实;目标 URL 是否被当成独立 URL 处理,取决于跳转类型以及该 URL 自身的返回状态。

关键点在于:如果目标 URL 自己返回 noindex、被 robots.txt 屏蔽,或者返回 404,那么跳转只是把它暴露出来,并不会让它进入索引。

用 301/302 做 URL 发现,怎样更稳

  1. 已经确定不再使用的入口 URL,优先用 301;临时活动页、临时落地页用 302,别长期用临时跳转代替永久跳转。
  2. 把跳转链控制在 1 到 2 跳,不要在中间叠加统计跳转、地区跳转、短链跳转。
  3. 不要用跳转完全代替页面里的普通链接。如果入口页本身能正常返回 200 并放链接,就让搜索蜘蛛按普通链接发现目标 URL,链路更清晰。
  4. 跳转目标必须是可抓取的 200 页面,且没有被 robots.txt 或 noindex 拦住。
  5. 监控入口页的状态码变化,尤其是批量入口页共用同一套跳转规则时,一个配置错误会影响整批 URL。
跳转能帮搜索蜘蛛走到目标 URL,但走得到不等于收得下。发现和收录是两件事。

排查清单

  • 用 curl 或抓包工具逐跳查看 Location,确认总跳数;
  • 检查最终落点 URL 的状态码、robots 规则和 noindex 标记;
  • 对比服务器日志,看搜索蜘蛛是停在中间某一跳,还是跟到了终点;
  • 确认是否存在循环跳转、跨域跳转比例过高、跳转目标集中度过高的问题。

如果日志里显示搜索蜘蛛对入口页的请求很多,但对最终目标 URL 的请求很少,通常先排查三件事:跳转链是不是太长、中间有没有失败跳转、目标 URL 本身是否可抓取。把这些排掉,再谈其他优化才有意义。