事情本身不复杂,线索都在日志里。生成插件默认把当前访问地址写进 sitemap,站点的推广链接带着 utm_source=baidu 这类参数,结果六万条地址全部带上了跟踪参数。提交后 GSC 显示已提交六万条、已编入索引不到三百条,蜘蛛抓到的页面和 canonical 指向的干净地址对不上。

第一反应是「canonical 写的是无参数版本 sitemap 里的地址与规范地址冲突」,验证下来不成立。

真正麻烦的地方在于,几个原因的现象几乎一样。生成逻辑直接取了请求 URI 没有剥离查询参数。还有一种是推广落地页被当成正式页面 同一篇文章在 sitemap 里出现多次。

还有一种情况,服务器对带参数的地址没有做 301 参数页被当成独立内容。

动手时先抽样看 sitemap 里的地址形态

curl -s https://www.example.com/sitemap.xml | grep -o '<loc>[^<]*' | head -10

再往下统计带参数的条目占比

curl -s https://www.example.com/sitemap.xml | grep -c 'utm_source'

生成时强制剥离查询串

$url = strtok(get_permalink($post_id), '?');

等前面都确认过,再在服务器上把带跟踪参数的地址 301 回干净地址

if ($args ~* 'utm_') { return 301 $uri; }

怎么算真的好了,看的是同一批现象。重新生成后 sitemap 里带参数的条目归零,提交三天后已编入索引从三百涨到两万多,日志里带 utm 的抓取请求基本消失。

sitemap 里只放规范地址,任何跟踪参数都会让蜘蛛把同一篇内容当成多个页面,收录转化率会低得离谱。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189