先给结论:不要试图为每个旧地址找到唯一新页。更稳的做法是先判断旧地址属于“可归并的同类内容”还是“承载独立入口价值的页面”,前者用规则批量映射到栏目或聚合页,后者用逐条映射保留独立落地页。判断依据不是旧地址数量,而是旧地址背后是否还有外部链接、用户收藏或站内导航依赖。
历史地址通常分两种。一种是从旧系统导出的内容页,彼此内容高度相似,只是参数或路径不同;另一种是曾经被引用、被分享、被站内多个入口指向的页面。前者适合批量归并,后者需要逐条处理。
可以先用一个可区分证据来判断:看旧地址是否出现在站内其他页面的链接里,以及是否被外部站点引用。如果两者都没有,且正文内容已被新页覆盖,就属于可归并对象。如果至少有一项存在,就属于需要保留独立落点的对象。
这个判断动作的结果直接影响下一步:归并对象只需写规则,独立对象要单独建映射表。把两者混在一起处理,往往会出现“规则覆盖了重要页面”或“逐条处理拖垮工期”两种代价。
当旧地址数量达到几百条以上,且内容已被新站栏目或聚合页覆盖,逐条映射的维护成本会超过收益。这时应设计路径级规则,把一类旧地址指向同一新落点。
实施动作可以分三步:先导出旧地址并按路径前缀分组;再为每组指定一个新目标,通常是栏目页、标签页或搜索聚合页;最后在服务器或 CMS 的路由层配置重定向规则。规则要写成“旧前缀 → 新前缀”的形式,而不是逐条列举。
假设有一批旧地址形如 /old/news/123,新站对应栏目是 /news/,可以配置前缀映射,让所有旧新闻页落到新栏目。这里的前提是:这些旧页没有独立的外部引用价值。如果其中某几条被外部引用,应把它们从规则中排除,单独指向最接近的新内容页。
规则映射的代价是粒度粗:用户可能从旧地址进入栏目页而非具体文章,需要多一次点击。若该栏目本身有清晰导航和搜索入口,这个代价通常可接受;若栏目只是空壳,用户会直接离开,这时应改为逐条映射。
当旧地址数量有限,或其中一部分仍有外部链接、站内导航依赖、用户收藏习惯,就应逐条建立映射表。每条记录包含旧地址、新地址、映射类型和备注。
逐条映射的关键不是数量,而是目标页的选择。优先指向内容最接近的新页;如果没有对应内容,指向上一级栏目并确保该栏目能解释内容去向。不要把所有无对应页都指向首页,这会让用户和后续维护者都无法判断意图。
实施动作是先建立映射表,再在路由层按表生效。映射表要保留可读的备注,例如“原产品页已合并到新版产品总览”。这样后续新增或调整页面时,能快速判断某条映射是否还成立。这个动作的结果是:映射不再是黑盒,而是一份可审计的对照清单,下一步的维护和例外处理都有依据。
总会有旧地址既没有内容对应,也没有合适的栏目可归并。这时有三种处理方式,按优先级排列:
需要说明的是,返回说明页或首页并不等于问题已解决。请求量下降或抓取量归零,不能单独证明映射正确,因为用户可能只是不再访问,或外部链接已失效。要结合映射表备注和实际入口价值来判断。
另外,映射生效后要检查站内链接是否还指向旧地址。如果站内仍有大量旧链接,应先改站内链接,再依赖重定向,否则重定向会长期承担本可避免的跳转。
把判断条件整理成可执行顺序:先导出旧地址并标注是否有外部引用或站内依赖;再按“可归并”和“需独立”分组;可归并组写规则,需独立组写映射表;最后处理无对应页的例外。
这个顺序的结果是:规则和逐条映射各司其职,既不会因为逐条处理而拖慢整体,也不会因为规则过粗而丢掉重要入口。下一步的检查重点是映射表是否覆盖了所有需独立处理的地址,以及规则是否误伤了应独立处理的页面。