站点改版、栏目合并、URL 结构调整之后,页面上很容易留下一条一条的跳转。单次 301 本身没问题,问题是跳转叠了好几层,或者几条规则绕成环。对访问者来说只是多等一会,对蜘蛛来说,每多一跳就多一次请求,还可能在中途因为超时或规则冲突提前放弃。
跳转链是怎么长出来的
常见来源有这几个:
- 栏目改名只改了新链接,旧链接又指到另一个旧链接;
- http 到 https、带 www 到不带 www 各自有一条规则,先后叠加;
- 页面迁移到新目录后,老地址先跳到中间页,再由中间页跳到最终地址;
- 移动端与 PC 域名互跳,规则写反或多写一层;
- 规则里同时存在通配与精确匹配,先命中的那条把请求带到了别处。
这些都不算严重故障,但会让抓取效率变低,也让日志里的状态码变得难以解读。
自查:先看清楚整条链路
用请求工具逐跳看
对重点地址用 curl 或类似工具加“不自动跟随跳转”的参数,观察 Location 头和状态码,一条一条跟下去,数清楚总共跳了几次。批量地址可以写个简单脚本,把结果汇总成表格。
看日志里的状态码分布
在访问日志中统计 301、302、307、308 的出现次数和来源地址,按路径前缀分组。如果某个前缀下大量请求都返回跳转响应,说明那里规则集中,值得优先处理。注意区分蜘蛛请求与真实用户请求。
用站内爬虫跑一遍
爬取工具通常会把跳转链列出来,标出超过两跳的地址。跑的时候把范围限制在自己站点,避免爬到外部域名上。
怎么改比较稳妥
- 先合并规则,再改目标。搞清楚每条规则的匹配顺序,避免新旧两条规则同时生效。
- 让跳转一步到位。旧地址直接指向最终地址,不要经过中间页。
- 协议与域名归一放在最前面。http→https、www 归一这类规则只保留一层,后面的路径规则基于最终形态来写。
- 检查是否有环。A 跳 B、B 又跳回 A,浏览器会直接报错,蜘蛛也拿不到内容。
- 保留必要的参数。带查询参数的旧地址如果直接跳到首页,参数里承载的信息就丢了,能带到最终地址的尽量保留。
- 改完更新站内链接。跳转只是兜底,导航、正文、站点地图里应该直接写最终地址。
几个容易忽略的点
跳转与状态码要一致
永久迁移用 301 或 308,临时调整用 302 或 307。混用会让搜索引擎和缓存各自判断,缓存时间长短不一,排查起来更乱。
分页与筛选地址
文章分页、列表筛选这类地址如果也套上跳转规则,容易越滚越多。这类地址建议单独梳理,能不加规则就不加。
子域与出站跳转
子域名之间的互跳,以及跳到第三方页面的情况,最好单独记一份,改版时一并检查,别等到用户反馈打不开才回头找。
维护节奏
不需要天天查。改版上线后、栏目调整后、换域名或换证书后各跑一次,平时按月看一遍日志里的跳转分布即可。把规则写在一处并注明日期与原因,下次调整时能省不少时间。
跳转是过渡手段,不是长期方案。能让地址直接可用,就别让它绕路。