先给结论:当旧地址找不到内容与意图都等价的页面时,优先把最有价值的旧地址一对一映射到最接近的现存页面并保留可抓取;其余旧地址按“有无可用替代”分流为410或保留软着陆页,而不是全部塞向首页。判断依据来自爬虫实际抓到的状态码、页面主题相似度和旧地址的外部引用情况,而不是迁移完成这件事本身。
“没有完全等价目标”通常有三种不同情况,处理方式并不一样。第一种是内容被合并,旧页面主题被新页面覆盖大部分;第二种是内容被删除,站内已无任何相近主题;第三种是旧地址本身是参数页、分页或筛选页,从未有过独立内容。
区分方法很直接:打开旧地址当前返回的状态码,再打开你打算指向的目标页,比较两者的主标题、正文核心对象和用户完成的任务。如果目标页只覆盖了旧页的一部分,这属于部分等价;如果目标页讨论的是另一个对象,这属于不等价。把每个旧地址标成“完全等价 / 部分等价 / 不等价 / 无内容页”四类,再决定动作。这一步不做,后面所有重定向都会变成拍脑袋。
一对一301适合旧页与新页满足以下条件:新旧页面向同一搜索意图,核心对象一致,新页能独立回答旧页原本回答的问题。满足时,301是最省力的选择,爬虫会把旧地址的抓取需求转移到新地址。
不成立的条件同样明确:新页只是分类页或首页,用户点进去还要再找一次;新页主题只是相关而非相同;旧页有独立的外部链接指向,而新页无法承接该链接对应的语境。这几种情况下强行301,用户和爬虫都会落到一个答非所问的页面,反而让旧地址的价值被稀释。
可以用一个假设例子说明取舍:假设旧地址是一篇讲某型号设备故障排查的文章,新站只保留了一个该设备的产品总览页。若总览页包含故障排查章节,可以301;若总览页只介绍参数和购买信息,就属于不等价,此时更合理的做法是新建一个承接页,或在总览页内补出对应章节后再301。
410删除适用于内容确实不再提供、且没有可承接主题的页面。它向爬虫明确表示该地址已永久消失,有助于让旧地址逐步退出抓取队列。代价是丢失该地址可能积累的外部引用价值,且一旦以后想恢复内容,需要重新建立。
保留一个说明页并返回200适用于旧地址仍有外部流量或用户会直接访问的情况。页面应说明原内容已迁移或下线,并给出最接近的现存入口。代价是它仍是一个可被抓取的页面,若内容单薄,可能被视为低价值页面;因此说明页要有实际信息,而不是一句“页面不存在”。
301到最接近的上级页面只应在该上级页面确实能覆盖旧页意图时使用。把它当作万能兜底,会让大量旧地址集中指向同一页面,爬虫抓到的是一堆指向同一目标的重复信号,用户也得不到答案。
处理方案上线后,不要只看“旧地址返回了301”就结束。需要回到服务器日志或抓取记录,观察爬虫对旧地址的访问频率、返回状态码分布,以及它是否开始抓取你指定的目标页。如果旧地址仍被频繁抓取且状态码异常,说明映射可能没生效或存在拦截。
这里有两个容易误判的点。其一,robots.txt里禁止抓取旧地址,并不等于该地址会从索引中移除,抓取限制和索引移除是两件事,前者不能替代410或301。其二,提交站点地图不保证收录,站点地图只是告知存在哪些地址,不能保证爬虫一定抓取或保留。
如果某段时间旧地址抓取量归零,也不能单独证明处理正确。合理解释至少包括:爬虫降低了整体抓取频率、该地址本身流量低、日志采样不完整、或抓取被其他规则拦截。要结合目标页是否获得对应抓取、旧地址是否仍出现在站内链接中来交叉判断。
按下面顺序操作,每一步的结果决定下一步:
判断标准始终是:这个旧地址对用户和爬虫是否还有可承接的价值。有,就给它一个真正对得上的目标;没有,就明确让它退出。把这两类混在一起处理,才是迁移后旧地址问题反复出现的根源。