现场是这样的。栏目改版把 /seo/ 整体挪到了 /search/seo/,旧地址做了 301。三个月后发现百度抓取里旧地址还有两万多条,列表页排名全掉,新目录几乎没收录。
中间走过弯路,把「旧地址 301 逐跳经过两次跳转,抓取预算在链路里被消耗」当成主因,改完现象没变。
排查方向其实有限,先把可能性排一排。模板里的栏目链接是从缓存表读的,改版后缓存没重建,输出的还是旧路径;正文里的手工内链写死在旧目录,编辑时没人回改;分页与标签页仍按旧前缀拼接,形成大量 301 到 301 的链。
上来先统计站内还指向旧目录的链接
SELECT ID FROM wp_posts WHERE post_content LIKE '%/seo/%' AND post_status='publish';
再往下清掉对象缓存与模板缓存再验证输出
wp cache flush --allow-root
接着把旧目录 301 收敛成一次跳到最终地址
rewrite ^/seo/(.*)$ /search/seo/$1 permanent;
批量替换正文中的旧路径并抽查落地页
wp search-replace 'https://www.lu0.cn/seo/' 'https://www.lu0.cn/search/seo/' --dry-run
怎么算真的好了,看的是同一批现象。两周后抓取日志里旧目录请求占比从四成降到不足半成,新目录的索引量开始回升,列表页排名回到改版前。
补一句。改版时最容易被漏掉的是缓存层和数据表里的存量链接,模板改对了但库里的旧地址还在往外吐。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
