服务器返回的状态码,是蜘蛛每次请求页面时得到的第一句回答。它不决定页面内容好不好,但很大程度上决定了搜索引擎怎么对待这个已经存在的 URL:是把索引换到新地址,是继续保留旧地址,还是让它慢慢退出索引。
很多站点把状态码当成技术细节交给开发随手写,结果就是一次改版之后,索引里新旧地址长期并存,或者临时页面在没有任何通知的情况下直接消失。
抓取和收录是两件事,状态码先影响的是抓取
蜘蛛请求一个 URL,只要服务器正常响应,它就算抓取成功。但收到的是 200 还是 301,后续动作完全不同。状态码改变的是“这个地址代表什么内容”的判断,进而影响索引里该保留哪一条记录。
- 200:正常内容,索引可能保留或更新这个地址。
- 301 / 308:内容已经永久搬到别处,索引倾向于转移到目标地址。
- 302 / 307:只是临时变化,原地址通常继续保留在索引里。
- 404 / 410:内容不存在,索引会逐步移除。
- 503:临时不可用,蜘蛛会稍后再来。
301:真正的搬家信号
301 表示原地址永久失效,内容和它对应的索引记录应该转移到新地址。它是最常被用错的信号之一,几个细节值得注意:
跳到相关且稳定存在的页面
旧页面下线后统一跳到首页或栏目首页,短期看似省事,但如果旧页面本身有搜索需求,跳到一个泛泛的首页,用户和搜索引擎都拿不到原本的内容。更稳妥的做法是跳到内容最接近的现存页面,找不到对应的就让它返回 404。
避免链式跳转
A 跳 B、B 再跳 C,会让蜘蛛多走一步,也容易让索引落在中间地址上。改版时最好把所有旧地址一次性指到最终地址。
同时更新站内链接
跳转只是兜底。内链、导航、站点地图里如果还留着旧地址,蜘蛛会反复走跳转,占用抓取机会,也不利于新地址被稳定识别。跳转和链接更新应该一起做,不要只做一半。
302:临时跳转,原地址大概率留在索引里
302 的语义是“暂时这样”,所以原地址通常继续保留在索引中。它适合短期的活动引导、A/B 测试、临时维护期的入口调整,不适合长期使用。
常见问题是把 302 当成 301 来做永久搬家。这种情况下,原地址可能长期占着索引位置,新地址难以稳定接过流量,出现新旧两个地址都能搜到、内容还一样的局面。如果确认是永久变更,应该改成 301。
404 和 410:内容真的没了
404 表示页面不存在,410 表示页面曾经存在但已永久删除。两者都会让索引逐步移除这个地址,410 的语义更明确一些,但实际处理速度受抓取频率、站点整体质量和外链数量影响,不会有统一的时间表。
需要处理的是软 404:服务器返回 200,页面里却写着“商品已下架”“内容不存在”。这种页面在技术上算抓取成功,容易被当成薄内容继续留在索引里。判断方法不复杂:批量抓取几个可疑 URL,看返回码和页面主体是不是一致。
状态码和页面内容不一致,是收录问题里最容易被忽略的一类。技术上返回 200,用户和搜索引擎看到的却是空页面。
页面只是临时下线,该怎么选
- 几小时的维护:返回 503,并给出预计恢复时间,索引一般不受影响。
- 商品短期缺货但会恢复:保留页面和内容,不要直接改成 404。
- 页面已经确定不要了:返回 404 或 410,让索引自然清理。
- 页面还要留着但不希望被搜到:用 noindex,同时保证页面可以正常访问。
自查顺序
- 找出返回 200 但正文为空、或提示内容不存在的页面,先处理软 404。
- 检查跳转链,把多级跳转压成一级,直接指向最终地址。
- 确认长期变更用的是 301,短期调整才用 302。
- 核对内链和站点地图里的地址,是否还指向旧 URL。
- 对已经删除且无替代内容的页面,允许它正常返回 404。
状态码不能保证页面一定被收录,它只是让搜索引擎对“这个地址现在是什么状态”有清晰判断。真正麻烦的往往不是状态码本身写错,而是状态码和实际意图不一致——服务器说的和运营想的不是一回事。