在蜘蛛池里,入口页通常不是最终的内容页,中间会夹着一层甚至多层跳转。跳转方式选得对不对,直接决定蜘蛛能不能顺着走下去、会不会在中间停下来。下面把常见的几种跳转方式拆开讲,并说明各自的适用场景和容易踩的坑。
先分清你要解决哪一类跳转
实际运维中,跳转至少有三层含义:一是入口页把蜘蛛导向目标页;二是目标页地址本身发生了变化,需要做永久或临时重定向;三是站内导航里用链接还是用脚本触发。三者的处理方式并不一样,混在一起谈就容易出错。
几种常见跳转方式的特点
301 永久重定向
服务器返回 301 时,蜘蛛一般会把原有的索引和信号逐步迁移到新地址,旧地址从索引里淡出。适合域名更换、URL 结构整体调整这类一次性的动作。要注意迁移是渐进的,短期内两条地址可能同时存在,不必急着删旧页。
302 与 307 临时重定向
302 和 307 表示暂时换到另一个地址。蜘蛛通常会继续抓取原地址,只是暂时跟到新地址。如果长期挂着 302,蜘蛛可能反复在两个地址之间来回确认,抓取效率被稀释。把 302 当 301 长期用,是入口页里最常见的浪费之一。
meta refresh
写在 HTML head 里的 meta refresh,蜘蛛需要先抓取页面、解析 HTML 才能发现目标地址。它比服务器端跳转多一次解析成本,延迟设得太短容易被判为强跳转,太长则蜘蛛可能提前结束本次抓取。一般建议 1 到 3 秒,并且页面上保留一个可点击的普通链接作为兜底。
JavaScript 跳转
window.location 这类跳转依赖渲染。搜索引擎能分配的渲染资源有限,入口页数量一多,很多地址可能停在已抓取未渲染的状态,目标页迟迟不出现。如果确实要用,尽量把目标地址同时写进一个普通的 a 标签里,让不执行脚本的抓取也能看到路径。
点击与表单触发
需要用户点击按钮、提交表单才发生的跳转,蜘蛛基本不会执行。这类路径对蜘蛛来说是断路,不适合作为入口页到目标页的唯一通道。
场景与方式的搭配
- 域名整体更换、URL 规则重构:用 301,一次性做完整站映射。
- 临时活动页或测试页:用 302,测试结束就撤掉。
- 无法修改服务器的静态托管:用 meta refresh,并配可点击链接。
- 需要统计点击或做中转:服务器端 302 比 JS 更稳妥,服务器日志里能直接看到蜘蛛行为。
- 入口页到目标页:优先用普通超链接,跳转只当作补充。
常见误区
- 把 302 当长期方案,导致蜘蛛反复确认原地址。
- 301 链太长,A 跳到 B、B 跳到 C、C 再跳到 D,每多一跳就多消耗一次抓取预算。
- 跳转目标指向 404 或 410,蜘蛛跟过去就是白跑一趟。
- JS 跳转和 meta refresh 混用,蜘蛛可能只执行到第一层就停下。
- 跳转后的内容与入口页描述明显不一致,容易被判为异常。
排查与自检
- 用命令行请求头看一下返回码,确认是 301 或 302,而不是 200 页面里藏着 refresh。
- 翻服务器日志里蜘蛛对原地址的访问频次,判断它是否还在反复抓旧地址。
- 顺着跳转链完整走一遍,确认全程最多两跳,终点返回 200 且内容正常。
- 查看页面源码,确认是否保留了可点击的普通链接。
- 观察一段时间后,看新地址的被抓取量是否在上升,旧地址是否在减少。
跳转的本质是告诉蜘蛛下一步去哪。能不用跳转就用普通链接,必须用跳转就选最简单的服务器端方案,并且保证终点是活的。
把跳转方式当成入口页设计的一部分,在搭建之初就把规则定下来,比事后一批批去排查要省事得多。