301重定向:用对是传递,用错是黑洞
先把状态码家族认全重定向不止301一个,认全了才不会用错:301永久重定向,告诉浏览器和搜索引擎「地址永久变了,以后去新家」——权重传递靠它;302临时重定向,「暂时搬一下,老家还在」——权重不转移;307临时重定向但保持原请求方法;308永久重定向且保持方法;303要求客户端改用GET访问。日常99%的场景只需要记住一条:永久搬家用301,临时跳转用302,别用反——该用301的地方用了302,权重就悬在空中不传递。
什么时候必须上301三类场景:整站换域名,旧域名的每个页面301到新域名对应页面;站内URL结构调整,旧路径逐条301到新路径;清理重复页面,多个重复URL统一301到一个规范地址,让权重集中而不是内耗。共同原则:一一对应——旧页A跳新页A,别把所有旧页面全跳到首页,那种「一锅端」式跳转,用户失望、搜索引擎也读不懂。
怎么配:以Nginx为例的正确姿势Nginx里推荐用return指令做301:return加301加完整的目标地址(协议、域名、路径用变量拼齐),一条规则清晰明了。配置时的两个检查点:协议写对——http与https别搞混,整站https的时代目标地址必须是https;域名规范统一——带www与不带www选一个作为规范地址,另一个301过去。改完配置先做语法检查再重载服务,这条流程纪律在重定向配置上尤其重要。
错在哪:三个真实的翻车现场现场一:规则写错导致全站打不开——有站长的301规则里多写了一条不该有的条件语句,整站直接无法访问,排查半天才发现是配置里「多了一行」。启示:改配置要留备份,改动一处一处来,出问题能立刻回滚。现场二:跳转「无效」——配置看着对却就是不跳,最后发现是缓存设置错误,浏览器和CDN把旧响应缓存住了。启示:调试301时清浏览器缓存、给CDN发刷新,别对着缓存的旧结果调配置。现场三:循环跳转——A跳B、B又跳A,浏览器报「重定向次数过多」。启示:新规则上线前画出跳转链路图,确认没有环。
用WordPress的,有更省心的路内容站大量301需求(改链接结构、清理旧文章)不必手写服务器配置:Redirection这类成熟插件支持在后台直接管理跳转规则、记录404并一键生成跳转,新手友好且可控。原则不变:规则要一一对应,改完用工具实测跳转链路与最终状态码。
验收标准:三个都过才算配好其一,访问旧地址,浏览器地址栏最终停在新地址;其二,用工具查旧地址返回的状态码是301(而不是302或404);其三,抓包看重定向链路无循环、无多余跳转。三条全过,这批301才算交付——毕竟它搬运的是你的流量和权重,值得验收得严格一点。