在蜘蛛池入口页的搭建里,让入口页用链接指向目标 URL 是最常见的做法,但也有人干脆让入口页直接跳过去:访问入口页,浏览器自动跳到目标 URL。这样做省了写链接的功夫,问题是搜索蜘蛛会不会跟过去,把目标 URL 记进待抓取队列。
结论先说:301 和 302 这类 HTTP 跳转,主流搜索蜘蛛一般都会跟随。但“跟过去”和“当成链接发现”并不完全等价,中间有几个容易踩的地方。
301 和 302 的区别
301 表示永久跳转,蜘蛛会把入口页与目标 URL 之间的关系看得比较稳定,通常会把原 URL 的权重信号往目标上传递,后续也倾向于直接抓取目标 URL。302 表示临时跳转,蜘蛛会跟,但更保守:它可能在一段时间内仍然反复请求原 URL,确认跳转是否还在。对“让目标 URL 被发现”这件事,两者都能做到,差别主要在信号传递和后续抓取行为上。
需要注意的是,如果大量结构不同、内容雷同的入口页都 301 到同一个目标 URL,这种模式本身比较容易形成明显特征。不一定会立刻出问题,但入口页能起到的价值会被削弱。
meta refresh 和 JavaScript 跳转
除了 HTTP 状态码,入口页还可以用页面内的方式跳转:
- meta refresh 且延时为 0:多数搜索蜘蛛能识别,效果接近一次跳转。
- meta refresh 带几秒延时:识别率明显下降,部分抓取器会直接忽略延时较长的跳转。
- JavaScript 跳转(location.href 之类):取决于抓取器是否渲染页面。能渲染的会跟,不渲染的就只能看到一个空页面,发现过程不稳定。
如果目的是让目标 URL 尽可能稳定地被发现,优先用用户能点、蜘蛛能读的 a 标签 href 链接,把跳转当成补充手段。依赖脚本的路径,可靠性永远差一档。
跳转链上容易出问题的地方
- 跳转层数太多:入口页跳 A、A 跳 B、B 再跳目标,层数一多,蜘蛛可能中途放弃。一般控制在两三层以内。
- Location 写成相对地址或写错:响应头里的跳转地址最好写完整的绝对 URL,避免解析歧义。
- 目标返回非 200:跳到 404、410 或者需要登录才能访问的页面,跳转关系等于空转。
- 目标被 robots.txt 屏蔽:蜘蛛跟过去,发现被禁止抓取,仍然不会取回正文,也就不存在后续的收录判断。
- 响应头里带 X-Robots-Tag: noindex:如果无意中加在目标或跳转链中间某一步,前面的努力基本会白费。
- 跳转目标不是 HTML:跳到图片、二进制文件或者接口返回的 JSON,蜘蛛不会把它当成需要索引的页面来处理。
按这个顺序排查
- 先用抓取工具确认入口页真正返回的是 301/302,还是 200 加上一段跳转脚本,两者差异很大。
- 检查 Location 字段是否为绝对 URL、域名是否正确、能否直接访问到 200 页面。
- 数一下跳转层数,超过三层就动手简化。
- 确认目标 URL 没有被 robots.txt 或 X-Robots-Tag 拦住。
- 翻服务器日志,看搜索蜘蛛是否真的请求过目标 URL。如果只请求了入口页,说明跳转没被跟随,或者跟随之后被丢弃了。
跳转只是 URL 发现的一种路径。入口页被爬、目标被访问,都不等于目标会被收录或者获得排名。真正决定结果的,还是目标页面本身的内容质量、可访问性和站点整体情况。把精力放在稳定输出可抓取链接上,通常比反复试验跳转技巧更划算。