站点地图(sitemap)经常是配置一次就再没人看过的文件。可在实际运营里,它更像是一份递给蜘蛛的“新内容清单”:哪些地址值得抓、大概什么时候更新过。清单写错,蜘蛛照着跑一圈,抓取配额就浪费在重定向、404 或者重复参数页上。
第一步:确认地图里的地址都能直接打开
把 sitemap 里的 URL 抽样或全量跑一遍,看返回状态码。下面这些地址不该出现在地图里:
- 301、302 跳转地址,应该写跳转后的最终地址;
- 404、410 以及已经删除的旧页面;
- 带 noindex 的页面,地图邀请抓取、页面自己又拒绝索引,信号互相矛盾;
- 需要登录或需要 Cookie 才能访问的页面;
- 筛选、排序、分页组合出来的参数地址,这类地址数量巨大且内容重复。
同时核对地图中的 URL 与页面自报的 canonical 是否一致。如果地图写 A、页面 canonical 指向 B,蜘蛛会优先相信页面本身,多出来的 A 基本属于无效条目。
第二步:lastmod 只写真实更新时间
lastmod 是地图里最容易被滥用的字段。有的站点为了“提醒蜘蛛”,每次生成地图都把全部地址的时间刷成当前时间。短期看不出问题,时间一长,蜘蛛会发现这个时间不可信,进而降低对整份地图的信任度。
更稳妥的做法是让 lastmod 直接取自内容系统的真实修改时间,并且只在正文实质变动时更新,模板调整、侧栏改版这类改动不必动它。格式统一用带时区的日期时间,避免出现未来时间。
第三步:注意分片与索引文件的硬限制
- 单个 sitemap 文件不超过 50MB(未压缩),收录地址不超过 50000 条;
- 超过后拆成多个分片,再用 sitemap 索引文件统一列出,索引文件本身也有数量上限;
- 文件使用 UTF-8 编码,URL 中的特殊字符要正确转义;
- 分片按内容类型或栏目划分,比按时间机械切成一堆碎片更好维护。
第四步:地图本身也要让蜘蛛拿到
在 robots.txt 里用绝对地址声明 Sitemap 位置,注意别顺手把 sitemap.xml 用 Disallow 挡住,也别让它被登录墙或 CDN 规则拦住。生成方式同样要考虑性能:几万条地址如果每次请求都实时查库拼装,蜘蛛一抓就是一次数据库压力,最好做成定时生成加静态缓存。
第五步:用日志看地图有没有起作用
地图提交之后,从服务器日志里确认几件事:蜘蛛是否真的请求了 sitemap 文件、请求频率是否稳定、地图里的地址有多少在随后一段时间内被实际抓取。如果地图天天被拉取,但里面地址的抓取率很低,问题多半不在蜘蛛,而在地图质量或站点整体结构与内链上。
一份可以照着走的检查清单
- 地图中每个 URL 返回 200,且与页面 canonical 一致;
- 只收录规范地址,不含参数组合、分页和搜索结果页;
- lastmod 来自真实更新时间,格式统一且没有未来时间;
- 分片数量与单文件大小都在限制之内,索引文件可正常访问;
- robots.txt 中已声明地图地址,地图未被误屏蔽;
- 地图生成不拖慢服务器,有缓存或定时任务;
- 定期从日志和站长平台核对抓取情况,发现异常条目及时清理。
站点地图是补充手段,不是替代方案。如果站内导航混乱、重要页面埋得很深,再完整的地图也救不回抓取效率。
把这几步固定成月度或季度的例行动作,地图就不会变成一份“提交之后再也没人打开”的文件。