事情本身不复杂,线索都在日志里。WordPress 默认在 head 里输出 rel=shortlink,地址是 ?p=123 形式。换成固定链接后 canonical 指向新 slug,shortlink 还留着。GSC 里短链被收录两千条,和新地址同时存在。

第一反应是「旧外链和分享链接大量使用 ?p= 形式」,验证下来不成立。

原因不止一个,得分开看。主题没有移除 wp_shortlink_wp_head,短链一直输出。另一种情况是短链没有 301 到新地址,两套地址都返回 200。

不容易想到的是,sitemap 生成器把 shortlink 也当成了独立页面。

第一件事是确认 head 里有没有 shortlink

curl -s https://www.example.com/article/1 | grep -o 'rel="shortlink"[^>]*'

移除默认输出

remove_action('wp_head', 'wp_shortlink_wp_head', 10);

给 ?p= 加 301 到正式地址

RewriteCond %{QUERY_STRING} ^p=(\d+)$

提交移除已收录短链

site:www.example.com/?p=

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

这台环境是别人交接的,不少默认值被动过,只能一项项核。

怎么算真的好了,看的是同一批现象。head 里不再有 shortlink,?p= 请求全部 301,短链收录量两周内从两千降到两位数。

shortlink 本身无害,但没有跳转的短链会被当成第二套地址,和 canonical 抢同一篇文章。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189