蜘蛛池的主要任务是让搜索引擎蜘蛛顺着入口页爬到目标 URL。入口页本身往往只是一个中转,真正被“发现”的是跳转之后的目标页。也正因为如此,跳转方式选错了,蜘蛛可能在半路就停下,后面铺的链接再密也没用。
蜘蛛是怎么处理跳转的
主流搜索引擎蜘蛛遇到跳转时,会先记录状态码或页面里的跳转信号,再决定要不要继续请求新地址。这个过程消耗的是同一份抓取预算:一次跳转等于两次请求。跳转链越长,被放弃的概率越高。
301 永久重定向
最“干净”的跳转。蜘蛛一般会跟随,并把发现信号向新地址传递。用在入口页上,意味着入口页本身不再被当作落地页,而是被当作一个跳板。需要注意的是,如果入口页数量很大且都做 301 到同一批目标页,容易形成明显的批量模式。
302 / 307 临时重定向
蜘蛛通常也会跟随,但语义是“临时”。有些实现会在多次抓取后又变回 200,这种反复会让蜘蛛降低对该地址的信任度。如果你希望入口页长期稳定地指向某个目标,302 不是好选择;如果目标页还在调整,302 反而更合适。
meta refresh
放在 HTML head 里的 <meta http-equiv="refresh">。因为需要先把 HTML 抓下来再解析,所以比 3xx 多一次解析成本。延迟时间设为 0 或 1 秒时,多数蜘蛛能处理;设成几十秒,蜘蛛通常不会等。
JS 跳转
location.href 这类跳转依赖渲染。蜘蛛愿意渲染时能跟到,不愿意渲染时链路就断在入口页。把 JS 跳转和 3xx 混用、或者把跳转写在异步回调里,都会增加不确定性。
跳转链的长度
入口页 → 中间页 → 目标页,这种两跳以上的结构,每一跳都在消耗预算,也在增加“某一跳失败就全断”的风险。多数情况下,一跳到位比多跳更稳。如果确实需要中间层,至少保证每一跳都是可被抓取的静态响应。
容易被忽略的坑
- 跳转目标不可达:跳过去是 404、超时或需要登录,蜘蛛下次就不太愿意再跟。
- 用 JS 拼接跳转地址:地址在运行时才生成,蜘蛛拿不到完整 URL。
- 跳转前先检查 UA 或 Referer:识别错一次,可能整段链路对蜘蛛都不可见。
- 同一入口页在不同时间跳向不同地址:蜘蛛重复抓取时得到矛盾结果,容易判定为异常。
- 跳转页返回 200 又同时带 meta refresh:语义混乱,部分蜘蛛会直接当作普通页面处理。
实践上的取舍
- 要长期稳定地指向目标页,优先 301;只是临时调整,用 302。
- 能用 3xx 就不优先用 meta refresh,能用静态跳转就不优先用 JS 跳转。
- 跳转链尽量控制在一跳,最多两跳。
- 跳转目标页要能正常返回 200,且内容与入口页主题别差得太远。
- 上线后翻服务器日志,确认蜘蛛确实请求了跳转后的地址,而不是只停在入口页。
跳转方式不决定收录,但它决定蜘蛛有没有机会看到你的目标 URL。把这一段修顺,是成本最低、见效最快的一步。