先给有条件的结论:如果旧地址仍能表达原页面的主题,优先做一对一的301指向最接近的新页面;如果旧地址只是参数、分页或已消失的临时入口,且没有任何新页面承接同一意图,应让它返回410,而不是全部塞回首页。这个判断成立的前提是你能拿到旧地址清单并判断其原意图;一旦旧地址数量极大、无法逐条判断,就必须换成分组规则加抽样复核,不能继续逐条手工指定。
映射的本质不是把旧地址救活,而是把访问者送到他原本想找的内容。判断依据可以看三条:旧地址的路径词是否仍描述同一业务;旧页面原来承接的咨询或浏览意图,是否在新站有对应栏目;该旧地址过去是否被外部引用。三条都成立,才值得做一对一301。只成立一条,通常说明它只是历史残留。
假设一个旧地址是 /product/list.php?type=12,新站把产品拆成了两个栏目,其中只有一个栏目覆盖原类型,那就指向这个栏目;如果原类型已被取消,新站没有任何页面承接,返回410比跳首页更诚实。跳首页会让访问者以为网站出错,也会让后续的路径分析失去意义。
实际动作是建一张三列表:旧地址、处理方式、目标地址或状态码。处理方式只允许三种——301、410、保留不动。填完后按处理方式分组,先发布301组,再发布410组。这样做的结果是,你能在发布后分别观察两组地址的访问情况,而不是把成功与失败混在一起。
如果分组后仍有一批地址无法判断,把它们标记为“暂不处理”,而不是随手指向首页。暂不处理意味着这些地址暂时返回404,后续可以补充判断,代价是短期体验较差,但不会制造错误映射。
反例是:旧站曾把大量不同内容都放在同一个动态入口下,例如所有文章都通过 /article.php?id=数字 访问,而新站的文章路径完全按栏目重写。此时旧地址之间没有可用的路径词差异,无法按前缀分组,一对一301也无从谈起。继续套用上面的映射表,只会得到一堆指向同一栏目的假映射。
这种情况下应改为按数据记录匹配:从旧数据库导出标题、发布时间或原分类,再与新站内容做对应。若旧数据已不可得,就只能对确有外部引用的少量地址做人工恢复,其余返回410。这个反例说明,映射方案取决于旧地址是否保留了可判断的语义,而不是取决于旧地址的数量。
发布301和410之后,分别观察两类地址的访问日志:301组是否把访问带到了主题一致的新页面,410组是否仍在被外部请求。若410组持续有访问,说明其中可能混有仍有价值的旧地址,应回到映射表重新判断,而不是直接改成301。若301组的目标页面跳出明显,也要检查目标页是否真的承接了原意图。
下一步动作是:把“暂不处理”的地址按访问量排序,只处理访问量靠前的一小批,其余维持现状。这样既控制工作量,也避免为了追求全部对应而制造错误跳转。