当旧站有几十条历史地址、新站页面却少于旧地址时,最危险的做法是给每条旧地址随便找一个“最像”的新页做301。更稳妥的起点是:先把旧地址按内容主题聚成组,再为每组指定一个能承接该主题的新页;确实没有对应新页的组,才让旧地址返回410或保留一个说明页。判断依据不是“旧地址能不能打开”,而是它过去承接的查询意图在新站是否仍有等价内容。
两种做法都成立,但条件不同。如果旧站页面本身就是独立主题,且新站有同等粒度的页面,一对一映射最省心;如果旧站是大量参数页、分页、标签页,而新站已经收束成少量栏目页,就应该做多对一映射。代价是:多对一会让部分长尾查询失去最贴近的落点,用户可能被送到栏目页后还要再点一次。
可以用一个假设例子判断粒度。假设旧站有 /tag/seo-1、/tag/seo-2、/tag/seo-3 三条标签分页,新站只有一个 /topics/seo 主题页。这三条旧地址的意图都指向同一主题集合,适合全部301到主题页。反过来,如果旧站有“建站推广方案报价”和“建站推广方案流程”两个独立页面,新站也分别有报价页和流程页,就不该为了省事把两者合并到首页。
不要直接打开重定向配置文件就写规则。先拿一份旧地址清单,按下面四列整理:旧路径、历史主题、新站是否有等价页、处理决定。整理时以“用户当初为什么点进来”为分组依据,而不是以URL里是否含相同单词为依据。
整理完这张表后,先处理“有”和“没有”两类。部分对应的组暂时留空,等前两类映射跑通再回来判断。这个顺序能避免一开始就陷入边界模糊的页面。
旧地址的主题在新站已经完全不存在,且未来也不打算恢复,410是更干净的选择。它的代价是:如果该地址仍有外部链接或用户收藏,访问者会直接看到失效结果,你需要确认这些流量对业务不重要。若旧地址仍可能被老用户访问,或者它承载的是品牌说明、服务范围这类仍然成立的内容,就保留一个简短说明页,并在页面上给出最接近的新入口。
这里有一个容易被忽略的判断点:某条旧地址的访问量降到零,不能单独证明它应该被410。访问量下降也可能来自旧站本身已经无法正常访问、统计代码缺失、或者用户早已改从站内搜索进入。先确认统计覆盖范围,再决定是否放弃这条地址。
选一组已经决定多对一的旧地址,在服务器或CDN层加一条301规则,然后用命令行请求该旧地址,观察返回状态码和最终落点。假设旧地址是 /old/a,目标是 /new/topic,请求后应看到301,随后落到新页并返回200。如果看到302、404或落到首页,说明规则顺序或匹配范围有问题。
这一步的结果会直接影响下一步:如果多对一规则能稳定生效,就按分组表批量补齐同组地址;如果出现循环或落到错误页,先停下来检查是否存在更宽泛的规则覆盖了这条路径,再继续扩展。不要在没有验证单条规则前就批量导入整张表。
映射上线不等于结束。你需要确认新页本身可以被正常访问、没有因为重定向规则被误伤,以及旧地址的链接在站内导航和站点地图中已经替换为新路径。如果旧地址仍出现在站内链接里,用户会先经过一次跳转,体验和抓取效率都会受影响。把站内残留的旧链接替换掉,是映射工作的一部分,不是额外选项。
最后,把分组表和处理规则一起存档。下一次改版时,这份表能直接回答“这条旧地址当时为什么这样处理”,避免重新猜测或重复劳动。