收錄跟着最後返回 200 的那個地址走
搜尋引擎拿到一個 URL,第一件事是看服務器的响應。如果返回 3xx,它會顺着 Location 繼續往下走,直到遇到一個返回 200 的頁面。索引里留下来的,通常是這個最终地址。明白了這一点,很多“我明明提交的是 A,收錄的却是 C”的疑問就能自己解释。
這里要把抓取和收錄分開看:跳轉被跟随,只說明這一串路径被抓過,並不等于末端頁面一定進了索引。末端頁面還得自己過關——能抓取、内容够用、没有被 noindex。
301 和 302 在收錄上的差別
301 表示永久搬走,信号倾向于传到新地址,舊地址會随着時間從索引里淡出。302 表示临时,舊地址一般仍保留在索引里,新地址是否被單獨收錄則不一定。
所以判断标准很简單:這次變更是永久的,就用 301;只是维護、活動、灰度這類短期跳轉,用 302。麻烦的是把 302 長期挂着——索引里舊地址不走,新地址又進得慢,最後两個地址同时出現,反而更难處理。
跳轉類型寫错,往往不是抓取失敗,而是让索引里同时留下两個版本。
鏈式跳轉是最容易被忽略的一环
A 跳到 B、B 再跳到 C,這種结构在老站里很常见。每多一跳,抓取成本就多一层,中間任何一环出错,末端頁面都可能發現不了。建议按下面的顺序收尾:
- 先把鏈條拍平,能直连的直接 A→C,不再经過中間頁;
- 检查有没有循环跳轉,A 跳到 B、B 又跳回 A,這種會直接卡住;
- 確認中間地址是否還需要保留,不保留的直接 301 到末端;
- 改完後重新提交一次,观察新地址的抓取情况。
跳到不相關頁面,不如干脆返回 404
舊产品下线後统一跳首頁,看着省事,但落地頁和原頁面主题差得遠,用戶点進去一头雾水,搜尋引擎也不容易判断该保留哪個。如果确實没有内容接近的替代頁,返回 404 或 410 往往更干净,索引清理得也更早。
同样是跳轉,方式不同结果也不同
- HTTP 3xx:最稳,服務端完成,不依赖渲染;
- meta refresh:带延迟時間,容易被当成頁面内容處理,能不用就不用;
- JS 跳轉:需要渲染才生效,抓取成本更高,稳定性也差一些;
- 按钮、表單、彈窗跳轉:基本不會被当成重定向,只能算頁面内的交互。
结论不复杂:能用 3xx 解决的,就不要用別的办法代替。
落地頁也要自己检查一遍
- 落地頁返回的是 200,而不是另一個 3xx;
- 落地頁没有被 robots.txt 挡住;
- 落地頁没有 noindex;
- 落地頁内容和舊頁主题接近,用戶能找到想找的東西。
改版或換域名之後的收尾顺序
- 舊地址保留 301,時間留足,別急着撤;
- sitemap 里只放新地址,別再混入舊的;
- 站内連結全部換成新地址,减少無谓跳轉;
- 持續看舊地址的抓取和点击,確認還有訪問;
- 观察索引里舊地址的數量是否在慢慢减少。
几件不要做的事
- 長期用 302 代替 301;
- 跳轉目标又是一個 3xx,形成新的鏈條;
- 跳到一個被 noindex 或 robots 禁止抓取的地址;
- 让新地址再跳回舊地址,形成閉环。
重定向本身不复杂,复杂的是它留下的尾巴。把路径缩短、狀態碼寫對、落地頁检查一遍,收錄的走向通常就會跟着清楚起来。