curl -s https://example.com/sitemap.xml | grep -o '<loc>[^<]*' | cut -c6- > old_urls.txt
while read u; do echo "$u $(curl -s -o /dev/null -w '%{http_code}' "$u")"; done < old_urls.txt
目录结构改版后两百个地址变了,当时只改了几个热门页面的 301,三个月后 Search Console 里还有一百四十个旧地址返回 404,谁也说不清原来对应哪一篇。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:改版前没有导出旧地址和新地址的对照表,规则是边改边补的。旧 URL 一旦返回 404,抓取工具几次之后就放弃,权重也跟着断掉。
「URL 变更清单」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:改版前把 sitemap 和抓取日志里的地址全量导出,存一份带日期的清单;每条旧地址标上新地址,没有对应的统一跳到一个说明页而不是首页;规则按清单批量生成,别手工一条条写;上线后每周跑一次全量旧地址,统计仍返回 404 的数量。
确认没问题再收工,清单里两百条旧地址逐条返回 301,404 数量一周内降到个位数。
