目录页的 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,去重时按去掉片段后的地址比较。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
