站点从 /blog/文章名 改成 /文章名,301 规则只写了外链入口,站内模板里的旧地址没动,蜘蛛顺着正文内链一路撞 404,两天报了四千条。
原因不止一个,得分开看。改版只处理了 URL 规则,没有同步替换数据库里的内链;主题的固定链接设置改了,旧文章正文里的绝对地址还是旧的;缓存插件里存着改版前的页面副本。
上来先统计正文里的旧前缀数量
SELECT COUNT(*) FROM wp_posts WHERE post_content LIKE '%/blog/%';
批量替换正文内链
UPDATE wp_posts SET post_content = REPLACE(post_content, '/blog/', '/') WHERE post_status = 'publish';
接着清掉页面缓存
curl -X PURGE https://www.example.com/p/1024
等前面都确认过,再抽查内链是否还有旧地址
curl -s https://www.example.com/p/1024 | grep -c '/blog/'
命令输出我都留了记录,免得改完记不清原来的值。
改完先别撤,确认这几项。替换后正文里的旧地址归零,404 报错在一周内回落到日常水平,栏目页权重开始正常传递。
这里还有个坑。改固定链接一定要连数据库正文一起改,光写 301 只能救外链,救不了站内自己指错的路。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
