很多人在搭蜘蛛池时,把精力放在域名、IP 和入口页内容上,跳转方式却随手一选,结果蜘蛛来了、入口页也抓了,但目标页始终没有动静。跳转方式决定了蜘蛛能不能顺着入口页走到目标页,也决定了这条路走得顺不顺。
蜘蛛面对跳转时的基本行为
搜索引擎蜘蛛抓到入口页的 HTML 后,会先解析页面里的可抓取链接。对 HTTP 状态码跳转(301、302、307 等),多数蜘蛛会直接跟随,但处理跳转链时有层数限制。对 JavaScript 跳转,则取决于蜘蛛是否渲染 JS 以及渲染队列的宽裕程度,不同搜索引擎、不同抓取阶段的差异比较大。而 meta refresh 属于 HTML 层跳转,兼容性相对稳定,但延时设置会影响蜘蛛的等待行为。
换句话说,跳转方式不是能用就行,它直接关系到蜘蛛能否稳定地把入口页和目标页串起来。
常见的几种跳转方式
直接链接
最朴素的方式,在入口页正文或导航里放一个指向目标页的普通链接。蜘蛛解析 HTML 时就能拿到目标 URL,不需要额外渲染,也不存在跳转链过长的问题。缺点是入口页和目标页之间是推荐关系而非跳转关系,用户看到的是入口页本身。
301 与 302
301 表示永久跳转,302 表示临时跳转。蜘蛛对两者的处理略有差别,但通常都会跟随。需要注意的是,如果入口页本身希望被收录,用 301 把它永久指向目标页,入口页可能逐渐被目标页替代。批量使用时还要留意跳转链不能套太多层,否则蜘蛛可能在中间某一层停下。
JavaScript 跳转
通过脚本或前端路由完成的跳转,对不执行 JS 的蜘蛛等于不存在。即便蜘蛛能渲染 JS,渲染队列通常也比普通抓取更慢、更稀缺。用这种方式时,最好同时提供一个 HTML 层的普通链接作为兜底。
meta refresh
写在 head 里的 HTML 跳转,把延时设为 0 时蜘蛛一般会立即跟随,比 JS 跳转更稳。但它仍属于可用却不该作为唯一手段的方式,部分抓取场景会忽略它。
选跳转方式时可以看这几个维度
- 目标页是否需要被索引:需要的话,优先用蜘蛛容易解析的方式,减少对 JS 的依赖。
- 入口页是否需要保留:入口页还想自己收录,就不要用 301 把它彻底交出去。
- 蜘蛛的执行能力:面向不同搜索引擎时,JS 跳转的覆盖情况不一样,别把全部入口页压在一种方式上。
- 跳转链长度:入口页到中转页再到目标页这种多跳结构,尽量压缩到一跳。
几个常见误区
- 所有入口页套同一套跳转模板,状态码、延时、目标地址格式全都一致,批量生成后痕迹明显。
- 用 302 做长期跳转,把临时当成永久用,蜘蛛可能反复回来确认。
- 跳转到被 robots 屏蔽或返回 404 的页面,蜘蛛跟过去之后直接失败。
- 入口页既放跳转,又放 canonical 指向目标页,两种信号互相干扰。
一些使用建议
- 入口页到目标页优先用普通链接或 meta refresh,把 JS 跳转当成补充而不是主力。
- 一个入口页尽量只对应一跳,不要为了显得自然额外加中转层。
- 跳转目标保持可达,定期抽查状态码,避免跳到失效页面。
- 不同批次的入口页可以混合使用跳转方式,但同一批次内保持相对一致,便于排查问题。
- 结合访问日志观察,看蜘蛛是否真的走完了入口页到目标页的路径,而不是只抓了入口页就走。
跳转方式本身不会带来收录,它只是把蜘蛛从入口页带到目标页的一条通道。通道通不通,比通道好不好看重要得多。