XML 站点地图(sitemap.xml)是站点主动交给蜘蛛的一份地址清单。它不保证收录,也不能替代内链和被引用的作用,但它决定了蜘蛛在自行探索之外,还能不能顺着你希望的路径走一遍。清单长期不更新,最直接的结果就是蜘蛛反复访问已经失效的地址,而新页面迟迟没人管。
一、先确认蜘蛛真的拿得到这份清单
很多站点地图问题不是内容写错,而是蜘蛛根本访问不到。先做三件事:
- 用浏览器无痕模式直接打开你的域名下的 sitemap.xml,确认返回 200,而不是被登录校验、地域限制或 CDN 规则拦下。
- 检查 robots.txt 里是否有 Sitemap: 这一行,并且写的是完整绝对地址。有多个站点地图时逐行列清楚。
- 确认服务器没有对蜘蛛的 UA 返回不同结果。部分防护规则会拦批量抓取,顺带把站点地图也拦了。
二、清单里只应该出现可索引的地址
状态码要过一遍
把站点地图里的 URL 批量取一次状态码,凡是有 3xx、4xx、5xx 的,先弄清楚原因再决定留不留。已经 301 的旧地址应该换成目标地址;已经下线的页面直接删掉,而不是留在清单里碰运气。
排除不该被抓的页面
- 登录页、后台、搜索结果页、站内搜索参数页。
- 草稿、预览、带临时 token 的地址。
- 被 robots.txt 明确 Disallow 的目录。Disallow 和 sitemap 同时指向同一批地址,等于发了两条矛盾的指令。
- 设置 noindex 的页面。既然不想被收录,就别让它出现在清单里占用抓取。
只放规范版本
同一篇内容如果有 www 与非 www、带斜杠与不带斜杠、带参数与不带参数等多个版本,站点地图里只保留 canonical 指向的那一个。版本混放会让蜘蛛在两个地址之间反复确认,效率很低。
三、lastmod 要写实情
lastmod 是站点地图里最容易被滥用的字段。有人每次生成时统一刷成当天时间,短期看似活跃,长期会让蜘蛛学会忽略这个信号,因为它发现时间和内容实际变化对不上。
比较稳妥的做法是:把 lastmod 绑定到内容真正更新的时间戳,而不是生成任务执行的时间;模板、导航、页脚的微调不必触发全站 lastmod 变化;如果确实无法提供准确时间,宁可不写这个字段,也不要写假的。
四、分片、数量与格式
- 单个站点地图文件建议不超过 5 万个 URL,未压缩体积不超过 50MB,超出就拆成多个文件,再用站点地图索引(sitemap index)串起来。
- 索引文件里列出的子文件同样要能返回 200,别出现指向已删除分片的情况。
- URL 中的特殊字符要按规范转义,中文路径建议直接使用编码后的形式。
- 定期确认站点地图的响应头与缓存策略,别让蜘蛛长期拿到一份缓存住的旧版本。
五、可以按月执行的检查流程
- 抓取站点地图文件本身,确认状态码、体积和分片数量。
- 提取全部 URL,批量请求响应头,记录非 200 的条目。
- 对照 robots.txt 和 noindex 清单,剔除冲突项。
- 抽查若干页面的 lastmod,与页面实际更新时间比对。
- 把内链、外链中发现的、站点地图里缺失的有效页面补进去。
- 把结果记录下来,下次对比变化,而不是每次都从头猜。
站点地图的价值不在于提交得多,而在于清单和站点现状对得上。一份准确实时的清单,比十份凑数的清单更有用。
小结
把站点地图当成一份需要维护的运营资产:地址有效、版本唯一、时间真实、分片清晰。它不会让页面自动排到前面,但能减少蜘蛛在无效地址上的消耗,让新内容更快被看见。