标签页地址直接输出中文,浏览器自动编码成 %E6%9C%8D%E5%8A%A1%E5%99%A8,站内另一处链接用了原始中文,蜘蛛把同一个标签当成两个页面。
原因不止一个,得分开看。模板输出标签链接时没有统一做 URL 编码。也可能是部分旧链接是手工写的中文地址。
另外,canonical 按原始中文输出,与浏览器实际访问的编码地址不一致。
先对比两种写法的返回码
curl -sI 'https://www.example.com/tag/服务器/' | head -2
模板统一用编码后的地址
echo get_tag_link($tag->term_id);
canonical 同步使用编码地址
curl -s 'https://www.example.com/tag/%E6%9C%8D%E5%8A%A1%E5%99%A8/' | grep -o '<link rel="canonical"[^>]*'
旧中文地址 301 到编码地址
curl -sI 'https://www.example.com/tag/%E6%9C%8D%E5%8A%A1%E5%99%A8/' | head -2
这次没动代码,只在配置和运行环境上找原因。
隔了一天再看,现象没变,说明不是偶发。
那几天正好在做别的变更,先把时间线对齐才敢动手。
改完先别撤,确认这几项。统一编码后同一标签只剩一条地址,标签目录的重复页面在两周内消失。
中文标签最好直接改成英文或拼音别名,编码问题从源头就没有了。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
