先给结论:不要追求“旧地址必须找到内容完全一样的新页”。更稳妥的做法是先给每条旧地址判定意图,再决定映射到最接近的新页、保留一个说明页,还是让它返回 410。下面的假设情境可以帮助你把这套判断落到可核对的动作上。
假设一个龙岩本地企业站改版,旧站有 /product/12.html、/news/45.html、/about/contact.asp 三类地址,新站只保留产品列表、文章列表和联系页。直觉上会想把它们分别跳到列表页,但这样做的结果可能相反:用户点进来看到的是列表,而不是原来的具体内容,跳出率反而更高。
更可靠的依据是旧地址当初承担的意图。产品详情页通常有明确的型号或服务对象,应优先找新站中同一产品线或同一服务项目的页面;如果新站确实取消了该产品,映射到产品总览并加一句说明,比硬塞到不相关页面更合适。文章页则要看主题是否被新站覆盖:覆盖了就映射到对应文章,没覆盖就映射到文章列表,而不是映射到首页。
联系页这类功能性地址,通常可以直接映射到新的联系页;但如果旧地址里带有表单提交参数,就要确认新站是否还接收同样的参数,否则用户提交后可能看到错误页。
旧地址到新页面的处理,可以分成三种结果,选择哪一种取决于旧地址是否还有真实访问需求、新站是否有对应内容,以及维护成本是否可接受。
这里的动作不是一次性配置完就结束。映射上线后,下一步应查看服务器日志中这些旧地址的请求量和来源,判断它们是否仍在被访问、是否还有外部链接指向。请求量归零不能单独证明映射正确,也可能是旧地址本来就没有流量、日志采样不全或跳转在更早环节被拦截。
为了让改版后的处理可核对,可以先用一张表记录每条旧地址的判定结果。表里至少包含旧地址、旧页面意图、新地址、处理方式、判断依据五个字段。下面是一个假设的片段:
/product/12.html:旧页面是某型号产品详情,新站仍有该型号,映射到 /products/model-a,处理方式 301,依据是型号名称和参数一致。/news/45.html:旧文章讲本地安装注意事项,新站没有同主题文章,映射到 /news/,处理方式 301,依据是新站文章列表能承接同类阅读需求。/about/contact.asp:旧联系页,新站有联系页,映射到 /contact,处理方式 301,依据是功能一致。/old-promo/:旧活动页已结束且无替代,处理方式 410,依据是活动不再举办、没有对应新内容。这张表的价值在于,它把“为什么这样跳”写清楚了。后续如果发现某个旧地址的跳出率异常,可以回到表里检查当初的判断是否仍然成立,而不是凭感觉再改一次跳转。
映射上线后,如果发现某个旧地址的请求量下降,不要立刻认定是跳转生效了。请求量下降还可能是因为:外部链接被撤掉、搜索引擎重新抓取后更新了索引、跳转被放在 JavaScript 里导致部分爬虫没有执行、或者日志只记录了部分状态码。
更可靠的验证方式是同时看三组证据:旧地址返回的状态码是否符合预期、新地址是否可正常访问且内容相关、用户从旧地址进入后是否继续访问站内其他页面。如果状态码正确但用户很快离开,说明映射的目标页可能不匹配意图,需要回到映射表调整目标;如果状态码错误,则先修跳转规则,再谈内容匹配。
对于龙岩网站设计项目,改版时旧地址往往数量不多,但每一条都值得单独判断。把映射当成一次内容盘点,而不是批量替换路径,后续维护会省去很多反复排查的时间。