WordPress 6.5 用中文标题做固定链接,百度搜索结果里的 URL 显示成一长串 %E4%B8%AD 编码,点进去正常,GSC 里同一篇文章出现编码和原文两个地址。

一开始怀疑是「nginx 对编码路径的 try_files 匹配失败,重写后又跳回」,查了一圈,方向不对。

原因不止一个,得分开看。模板输出链接时做了 urlencode,站内链接和 sitemap 写法不一致。另一种情况是CDN 回源对已编码路径再编码一次。

还有一种情况,sitemap 里写的是解码后的中文原文,与页面实际地址不符。

第一件事是看 sitemap 里链接的写法

curl -s https://www.example.com/sitemap.xml | Select-String -Pattern "%E4|中文"

再往下对比编码地址的状态码

curl -s -o /dev/null -w "%{http_code}\n" "https://www.example.com/%E4%B8%AD%E6%96%87-slug/"

接着统一用原始中文地址输出内链

add_filter('the_permalink', function($url){ return urldecode($url); });

剩下的就是在 GSC 里核对重复地址的处理

https://search.google.com/search-console

别只看报错消失,验证要多做一步。页面内链、sitemap 和 canonical 三处地址写法一致,编码地址 301 到原文地址,GSC 里重复条目两周内合并。

补一句。中文 URL 本身没问题,问题在于同一篇内容被编码和解码两种写法同时输出,蜘蛛会把它们当成两个页面。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189