蜘蛛池入口页经常承担“把蜘蛛带到目标页”的角色。入口页本身内容不多,于是很多人会用跳转把它和真正想被抓取的页面连起来。但跳转不是没有代价:蜘蛛每跟一层,就多一次请求,也多一次中途放弃的可能。理解不同跳转方式的行为差异,能帮你少浪费抓取预算。
蜘蛛遇到重定向时会怎么做
当蜘蛛请求一个入口页,服务器返回 301 或 302,并在响应头里给出 Location,蜘蛛通常会继续请求新地址。它并不“讨厌”重定向,但会把它当成一次额外的 URL 发现过程。链路越长,蜘蛛需要串行处理的请求越多,落在目标页上的抓取机会就越少。
301 表示永久移动,常被用来做域名合并、HTTPS 切换和路径迁移。302、307 表示临时跳转,蜘蛛一般也会跟随,但在判断规范 URL 时会更谨慎。对入口页来说,如果目标长期固定,用 301 比用 302 更清晰;如果只是短期活动或测试,才适合临时跳转。
几种跳转方式的差别
HTTP 301 / 302
这是蜘蛛最容易处理的方式。响应头里的 Location 明确,蜘蛛不需要解析页面内容,也不依赖脚本执行。只要目标地址可访问、返回正常状态,蜘蛛就能继续走。需要注意的是,跳转目标不要再次跳回原地址,否则会形成循环,蜘蛛很快会停止跟随。
meta refresh
meta refresh 写在 HTML 的 head 里,蜘蛛在解析页面时可能识别它,但支持程度和响应速度不如 HTTP 头。设置 0 秒跳转相对直接,设置几十秒延迟则可能让蜘蛛先放弃页面。更麻烦的是,如果入口页本身响应慢,meta refresh 还没被解析到,蜘蛛已经结束这次抓取了。
JavaScript 跳转
不执行脚本的蜘蛛看不到 JS 跳转的目标。即使部分搜索引擎会渲染页面,渲染也要排队,成本更高。如果入口页只靠 JS 跳转,又没有 HTML 链接兜底,蜘蛛很可能只看到一页空壳。可以保留一个可点击的普通链接,或者用 noscript 提供替代链接,但这只是补救,不是首选。
常见的跳转链问题
- 多层跳转:A 跳到 B,B 跳到 C,C 再跳到 D。每层都消耗请求,蜘蛛可能在 B 或 C 就停下。
- 跳转成环:入口页跳到目标页,目标页又跳回入口页,蜘蛛反复请求同一组地址。
- 跳转带参数:每次跳转都追加跟踪参数,导致同一个目标出现多个 URL,分散抓取。
- 跳转到 robots 屏蔽或 noindex 页面:蜘蛛跟过去却发现不能抓或不想收录,前面的跳转就白做了。
- HTTP 与 HTTPS、www 与非 www 来回跳:配置不统一时,蜘蛛可能在不同版本之间被反复引导。
入口页跳转的实用建议
- 能用 301 直达就不要用多级跳转,把层数控制在一到两层。
- 入口页和目标页都返回 200,避免跳转目标本身又是 3xx。
- 如果必须用 JS 跳转,至少提供 HTML 链接,并确保链接是蜘蛛可抓的普通链接。
- 定期用抓取工具或日志检查跳转链,看蜘蛛实际请求了哪些地址、在哪一步停止。
- 跳转目标要稳定,不要今天跳 A、明天跳 B,频繁更换会让蜘蛛重新判断。
- 把跳转链和 sitemap、内链结合起来看:如果目标页已经有正常入口,就不一定非要再绕一层跳转。
跳转链越短,蜘蛛越容易走到目标页。但走到不等于收录,目标页本身的内容质量、可访问性和重复度仍然决定最终结果。
蜘蛛池入口页的跳转不是越复杂越好。把每一次重定向都当成一次成本,尽量让蜘蛛用最少的请求到达你想让它看到的页面,剩下的交给页面本身。