收录跟着最后返回 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 禁止抓取的地址;
- 让新地址再跳回旧地址,形成闭环。
重定向本身不复杂,复杂的是它留下的尾巴。把路径缩短、状态码写对、落地页检查一遍,收录的走向通常就会跟着清楚起来。