站点地图(sitemap)最常见的用途是把 URL 清单一次性交给搜索引擎,减少“链接太深、长期没被发现”的情况。但很多人只关心“有没有提交”,忽略了文件里的 lastmod、changefreq、priority 三个字段。填得不认真,轻则没有帮助,重则让整份清单的可信度一起下降。
三个字段的实际作用并不一样
先说结论:三个字段里通常只有 lastmod 会被认真参考。
- lastmod:表示该 URL 内容最后一次实质性变化的时间。爬虫用它判断“这个页面是否需要重新抓一次”,是唯一经常被使用的字段。
- changefreq:表示预计更新频率。主流搜索引擎多年前就明确表示忽略该字段,因为站点自己很难预测准。
- priority:站内相对优先级。同样被主流搜索引擎忽略——页面的抓取与排序由搜索系统决定,不由站点指定。
所以精力应该集中在 lastmod 上。changefreq 和 priority 写了没坏处,但不必花时间反复调。
lastmod 乱填的几种典型情况
1. 每次构建都刷成当前时间
CMS 或构建脚本默认用一个变量填 lastmod,每次部署全站时间一起变。结果是所有 URL 的 lastmod 永远等于“刚刚”,爬虫无法区分真正更新的页面和没动过的页面,这个字段等于失效,还可能让抓取队列里塞进大量“看起来刚更新”的旧页面。
2. 只写日期,或时区不一致
精确到天在多数场景够用,但如果一天内多次修改,同日更新就看不出来。如果带上时间,务必写清时区(例如 +08:00)。否则服务器时区、UTC、本地时间混在一起,甚至出现“未来时间”,这类值容易被直接忽略。
3. 把发布时间当成修改时间
内容后面加了一条相关推荐、换了一张配图、修了几个错别字,算不算更新?判断标准是正文对读者是否有实质意义的变化。模板调整、导航改版、页脚换链接,不应该改动全站 lastmod。
列表页与详情页的写法差别
详情页的 lastmod 跟着内容走。列表页、聚合页比较特殊:如果它按时间倒序展示条目,有新内容进入就该更新;但如果它每次渲染都在变(比如带上“当前时间”“随机推荐”),而对读者其实没有变化,就不要每次刷新 lastmod。否则这类页面会持续占用抓取资源,真正需要更新的页面反而排在后面。
sitemap 不负责收录
提交 sitemap 只解决“被发现”,不解决“被收录”。是否抓取、是否进索引,还取决于页面质量、重复程度、站点整体情况等因素。时间写得再准,也不会让一个低质页面进入索引。
自查可以按这个顺序
- 随机抽一部分已收录页面和未收录页面,核对 sitemap 里的 lastmod 与实际改动时间是否对得上。
- 检查是否存在大批 URL 的 lastmod 完全相同,尤其是等于最近一次部署时间。
- 检查时间格式是否统一:是否都带时区、有没有出现未来时间。
- 确认文件里没有混入已被 robots 屏蔽的 URL、404 地址和重定向地址。
- 确认 sitemap 本身能正常访问,没有被缓存或压缩搞成错误内容,也没有超出大小与条数限制(单文件 5 万条、未压缩 50MB)。
小结
把 lastmod 当成一份给爬虫看的“变更日志”:只写真实的内容变化,格式统一,不要为了催促抓取而人为刷新。changefreq 和 priority 保持默认或省略都不影响使用。与其在这三个字段上反复纠结,不如先确认 sitemap 里的 URL 都是可索引、内容不重复的页面。