站点改版、栏目合並、URL 结构調整之後,頁面上很容易留下一條一條的跳轉。單次 301 本身没問题,問题是跳轉叠了好几层,或者几條規則绕成环。對訪問者来说只是多等一會,對蜘蛛来说,每多一跳就多一次請求,還可能在中途因為超时或規則冲突提前放弃。
跳轉鏈是怎么長出来的
常见来源有這几個:
- 栏目改名只改了新連結,舊連結又指到另一個舊連結;
- http 到 https、带 www 到不带 www 各自有一條規則,先後叠加;
- 頁面迁移到新目錄後,老地址先跳到中間頁,再由中間頁跳到最终地址;
- 移動端與 PC 域名互跳,規則寫反或多寫一层;
- 規則里同时存在通配與精确匹配,先命中的那條把請求带到了別處。
這些都不算嚴重故障,但會让抓取效率變低,也让日誌里的狀態碼變得难以解讀。
自查:先看清楚整條鏈路
用請求工具逐跳看
對重点地址用 curl 或類似工具加“不自動跟随跳轉”的參數,观察 Location 头和狀態碼,一條一條跟下去,數清楚總共跳了几次。批量地址可以寫個简單脚本,把结果匯總成表格。
看日誌里的狀態碼分布
在訪問日誌中統計 301、302、307、308 的出現次數和来源地址,按路径前缀分组。如果某個前缀下大量請求都返回跳轉响應,說明那里規則集中,值得優先處理。注意区分蜘蛛請求與真實用戶請求。
用站内爬虫跑一遍
爬取工具通常會把跳轉鏈列出来,标出超過两跳的地址。跑的时候把范围限制在自己站点,避免爬到外部域名上。
怎么改比較稳妥
- 先合並規則,再改目标。搞清楚每條規則的匹配顺序,避免新舊两條規則同时生效。
- 让跳轉一步到位。舊地址直接指向最终地址,不要经過中間頁。
- 协议與域名归一放在最前面。http→https、www 归一這類規則只保留一层,後面的路径規則基于最终形態来寫。
- 检查是否有环。A 跳 B、B 又跳回 A,浏览器會直接报错,蜘蛛也拿不到内容。
- 保留必要的參數。带查询參數的舊地址如果直接跳到首頁,參數里承载的信息就丢了,能带到最终地址的尽量保留。
- 改完更新站内連結。跳轉只是兜底,導航、正文、站点地图里應该直接寫最终地址。
几個容易忽略的点
跳轉與狀態碼要一致
永久迁移用 301 或 308,临时調整用 302 或 307。混用會让搜尋引擎和缓存各自判断,缓存時間長短不一,排查起来更乱。
分頁與篩選地址
文章分頁、列表篩選這類地址如果也套上跳轉規則,容易越滚越多。這類地址建议單獨梳理,能不加規則就不加。
子域與出站跳轉
子域名之間的互跳,以及跳到第三方頁面的情况,最好單獨记一份,改版时一並检查,別等到用戶反馈打不開才回头找。
维護节奏
不需要天天查。改版上线後、栏目調整後、換域名或換證书後各跑一次,平时按月看一遍日誌里的跳轉分布即可。把規則寫在一處並注明日期與原因,下次調整时能省不少時間。
跳轉是過渡手段,不是長期方案。能让地址直接可用,就別让它绕路。