结论先说:如果旧地址与新页面存在稳定的语义分组,优先做“规则映射”;如果旧地址是零散、无规律、数量有限,优先做“逐条映射”。判断依据不是旧地址有多少,而是能否从路径、参数或目录层级中提取出可复用的对应关系。反例也很明确:当旧地址携带了业务状态或用户身份参数,而新页面不再保留这些状态时,规则映射会把不同含义的请求压到同一页,此时应改为逐条映射并单独处理这些参数。
规则映射适合目录结构稳定、命名规律明显的站点。例如旧站把产品按类别放在 /old/product/类别/编号,新站改为 /products/类别/编号,此时可以用一条路径替换规则覆盖整组地址。它的优点是维护成本低,新增同类页面不必再登记;代价是规则写错时影响面大,必须先用少量样本核对。
逐条映射适合旧地址数量有限、路径无规律、或每条地址背后有独立业务含义的情况。它的优点是每一条都可以单独核对,缺点是旧地址越多,人工成本越高。实际操作中常见的是混合方案:先按目录分组做规则映射,再把无法归组的地址单独列出逐条处理。
这里有一个容易被忽略的前提:映射的目标不是让旧地址“有地方可去”,而是让访问者到达与原来意图最接近的新页面。如果只追求不出现 404,把大量旧地址统一跳转到首页,短期看似处理完了,长期会让从外部链接进入的用户失去上下文。因此,映射表应至少记录旧地址、目标地址、映射类型和负责人四项信息。
多个角色对同一事实有不同理解时,分歧通常出在“这条旧地址原来代表什么”。把分歧转成可核对的项目,可以按下面的顺序收集证据:
如果这四项指向同一个目标页面,映射基本成立。如果路径指向 A、锚文本指向 B、内容又接近 C,说明这条地址本身存在歧义,不应直接套规则,而应先确定它以哪个意图为主。这个判断动作会直接影响下一步:歧义地址进入人工复核队列,清晰地址才进入批量规则。
假设旧站有一组地址形如 /old/list?type=1&page=2,其中 type 表示栏目,page 表示分页。新站把栏目改成了独立路径,分页改为 /栏目/page/2。此时可以写规则把 type 的值映射到栏目路径,再把 page 拼到后面。这属于规则映射成立的场景。
但如果旧地址是 /old/detail?id=1024&from=share,而 from 只影响旧站的来源统计、不影响内容,新站又没有对应参数,那么规则映射可以忽略 from,只处理 id。反之,如果 from 在旧站会改变页面展示的模块,新站没有等价模块,就不能假装它不存在,应逐条确认这类地址的目标,或在目标页面上给出对应说明。这个反例说明:参数是否影响内容,是规则映射能否成立的关键条件。
不要直接在生产环境批量配置跳转。先产出映射表,至少包含旧地址、目标地址、映射类型(规则或逐条)、判断依据和状态。然后从每个规则分组中抽取若干条,逐条打开目标页面,确认内容主题一致、页面可正常访问、没有跳转链。抽样中发现一条不成立,就回到该分组重新检查规则,而不是只修补这一条。
验证完成后,再把映射表交给负责配置的人执行,并保留一份可回滚的记录。上线后仍需观察旧地址的实际访问情况:如果某条规则覆盖的地址持续出现访问,说明它仍被外部引用,值得单独确认目标是否合适;如果某些旧地址长期没有访问,也不能单独据此断定映射正确,因为可能只是入口尚未被触发。把访问情况与映射表对照,才能决定下一步是补充规则、修正目标,还是清理无效条目。