目录页的 sitemap 生成器把锚点也拼进 URL,出现 /guide/#step-2 这类地址共 800 条,蜘蛛只抓了主地址,锚点条目全被当成重复。

一开始怀疑是「蜘蛛对同页多个条目只保留一条,其余记为重复」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。URL 片段不参与服务端请求,带锚点的地址和主地址是同一页。也可能是生成器直接取页面里的 a href,把锚点一起带上。

另外,生成流程没有对地址做去 fragment 处理。

动手时先找出带锚点的条目

curl -s https://www.example.com/sitemap.xml | Select-String "#step"

生成时去掉片段部分

url = url.split("#")[0]

再往下重新生成并核对条数

curl -s https://www.example.com/sitemap.xml | Select-String "<loc>" | Measure-Object -Line

提交后看重复条目是否消失

curl -s "https://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml"

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

别只看报错消失,验证要多做一步。sitemap 条数从 800 降到 120,GSC 里不再提示重复网址,主地址的抓取恢复正常。

容易忽略的是,锚点只是页内定位,别让它进 sitemap,去重时按去掉片段后的地址比较。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189