做蜘蛛池的人常会问:入口页上不写超链接,直接 301 跳到目标 URL,搜索蜘蛛还能不能把目标链接发现?答案是能,但“能发现”和“值得这么做”是两回事。这两种方式在抓取路径、配额消耗和出错时的表现都不一样。
301 跳转是怎么被搜索蜘蛛识别的
搜索蜘蛛抓取入口页时,服务器返回的状态码是 301,并在 Location 响应头里给出新地址。爬虫会把 Location 里的 URL 放进待抓取队列,按自己的调度节奏再去抓那个地址。整个过程不需要页面里有任何可见链接。
换句话说,跳转本身就是一条链接关系,只不过它写在 HTTP 头里,而不是写在 HTML 里。
页面内超链接和 301 跳转的差别
- 发现数量:一个入口页里可以放几十上百个超链接,一次抓取就能发现一批 URL;301 一次只能指向一个地址,想批量发现就得准备同样多的入口 URL。
- 语境信息:超链接的锚文本、周围文字、页面主题能给爬虫提供一些语境,301 只有目标地址,没有锚文本。
- 配额消耗:301 需要多一次 HTTP 请求(先请求入口页,再请求目标页),而超链接在抓完入口页后就完成了发现。量大的时候,跳转带来的额外请求会明显占用抓取配额。
- 容错表现:跳转链越长,中间任何一环超时、被 robots 拦截、返回 5xx,整条链就断了;页面内多个超链接之间互不影响。
容易被忽略的几种“伪跳转”
不是所有跳转都等价:
- 302 / 307 临时跳转:同样能被跟随,但语义是临时。长期用临时跳转代替 301,搜索引擎在合并信号时会更保守。
- meta refresh:写在 HTML 里,需要先解析页面。延迟时间设得太长(比如 5 秒以上)时,部分爬虫可能直接放弃。
- JavaScript 跳转:依赖脚本执行,能不能被发现取决于爬虫是否渲染页面,稳定性不如服务端跳转。
- 跳转链:A→B→C→目标,每多一跳就多一次请求,也更容易在中间环节丢失。建议最多一跳直达。
什么情况适合用 301,什么情况不要用
适合的场景:目标 URL 换过域名或目录结构,需要把老地址的信号导过去;或者入口页本身没有内容展示需求,只做一个纯入口。
不适合的场景:需要在同一个入口页里批量发现很多目标 URL;目标站还在频繁更换地址;入口页上的链接主要是给人点的,用户看到自动跳转体验很差。
几个实操提醒
- Location 里尽量用绝对地址,避免相对路径带来解析偏差。
- 确认跳转目标本身允许被抓:如果目标 URL 被它所在站点的 robots.txt 禁止,爬虫即使拿到了 Location 也不会去抓。
- 用日志验证:看入口 URL 的访问记录里有没有紧接着出现目标 URL 的抓取请求,以及两次请求的间隔,可以判断跳转到底有没有被跟随。
- 别把跳转当成绕开规则的手段。搜索蜘蛛对跳转目标和普通链接的判断逻辑差不多,一样会看目标页的质量和可访问性。
无论是页面里的超链接还是 301 跳转,本质上都只是把 URL 递到爬虫面前。是否抓取、是否收录,最终取决于目标页本身的质量、可访问性和站点整体情况,没有任何方式可以保证结果。