改版换域名、合并栏目、调整 URL 结构,这些操作几乎都会留下重定向。只跳一次通常没问题,麻烦的是跳转一层套一层:老的入口指向一个中间地址,中间地址再跳去最终页。对访客来说只是多等一会儿,对抓取来说则要多消耗几次请求,而且中间环节一旦失效,整条链路就断了。
多重跳转的常见来源
- http 到 https、带 www 到不带 www、尾斜杠的有无,这几件事分开配置,一次访问就连着跳两三次;
- 栏目改版时把 A 指向 B,后来又改成指向 C,但 A 的规则没有同步更新,中间就卡着一层;
- 旧域名整站跳新域名,新域名上又做了一次路径重写,实际是两跳;
- 路径大小写不一致,同一地址的大小写版本各配置了一条跳转;
- 短链、投放链接或历史文章中引用的地址指向了某个中转页。
自查怎么做
- 用命令行逐步跟踪,不要只看最终结果。查看每一跳返回的状态码和 Location,确认中间经过了几层。
- 在浏览器开发者工具的 Network 面板勾选保留日志,刷新一次页面,观察这一次访问里出现了几个文档请求。
- 翻服务器访问日志,统计 301、302 的占比和跳转目标,找出反复出现的中间地址。同一个中间地址被大量请求,基本可以判断它上面挂着一堆旧链接。
- 抽样站点地图和主导航里的地址,重点看老栏目、老专题、曾经改过路径的页面。
自查不必全站铺开,先挑改动过的部分和老页面,通常问题就集中在那里。
处理原则
- 一步到位。让老地址直接指向最终地址,不要在中间留一层过渡页,中间层越少越不容易出问题。
- 合并规范跳转。http 到 https、非 www 到 www 这类固定规则,尽量在一次跳转内完成,而不是先跳协议再跳域名。
- 检查是否存在循环。A 跳 B、B 又跳回 A 这种,浏览器和抓取最终都会放弃,日志里往往表现为同一地址反复出现。
- 跳转目标别一律丢到首页。尽量指向内容最接近的页面,用户和抓取都能少走冤枉路。
- 该 404 就 404。目标内容确实不存在时,返回 404 比长期指向一个临时页更清楚,也让状态含义保持一致。
- 区分 301 与 302。永久和临时含义不同,用错会让后续判断变得混乱。
容易忽略的两点
- 站内链接直接写最终地址,不要写会触发跳转的旧地址,否则每点一次就多一跳。
- 检查跳转链经过的页面有没有被 robots 规则或 noindex 拦住,避免链路在中途被掐断。
日常维护习惯
把跳转规则当成配置一样记录下来,标明生效时间、来源地址和目标地址。做过多次迁移的老站点,建议每隔一段时间抽查一次。已经不再被任何链接引用的旧规则可以清理掉,规则越积越多时,后面的规则容易覆盖前面的,排查起来也更费劲。
跳转本身不是问题,多个跳转叠在一起才是。把链路尽量压到一跳,既省下抓取请求,也让访客少等一会儿。