搜索抓取

Sitemap 里的 lastmod:写对了是线索,写错了是噪音

Sitemap 里的 lastmod 常被当成催蜘蛛上门的开关,但它只是抓取调度的一条参考线索。如果每次构建都刷新时间,或者只改时间不改内容,这条线索会逐渐失去作用。本文说明 lastmod 的实际作用范围、几种常见误写方式、相对可信的写法,以及如何从抓取日志中判断它有没有被真正采纳。

搜索抓取

Sitemap 里的 lastmod:写对了是线索,写错了是噪音

Sitemap 里的 lastmod 字段,很多人把它当成一根能催蜘蛛上门的绳子:只要把时间改成今天,蜘蛛就会来看。实际使用时它更像一条备注,蜘蛛会参考,但不会因为你写了新时间就立刻排期抓取。写对了,它是一条有用的线索;写错了,它只是噪音,而且写错次数多了,这条线索本身也会被忽略。

lastmod 在抓取调度里扮演什么角色

对搜索引擎来说,lastmod 描述的是“这个 URL 对应的内容,最近一次发生实质变化的时间”。它的作用大致有三层:

  • 判断是否需要重新抓取:如果一个 URL 的 lastmod 比上次抓取时间还早,说明内容没动,重新抓取的紧迫性就低。
  • 参与优先级排序:同一批 URL 里,时间更新的更容易被排在前面。
  • 影响重抓间隔的判断:长期 lastmod 不变、内容也不变的页面,重抓频率会自然下降。

注意这三件事都是“参考”,不是“指令”。真正的抓取排期还会受服务器响应、抓取预算、页面重要程度等因素影响。所以写 lastmod 的目标不是让它立刻生效,而是让它别失效。

三种常见写法,各自的副作用

每次生成都写当前时间

把 lastmod 设成构建时间或访问时间,是最常见的做法。结果是内容一个字没改,Sitemap 每天都是新的。短期看似能带来抓取,长期会让这条时间线索失去区分度,蜘蛛没法从一堆“今天”里挑出真正更新的页面。

全站统一一个时间戳

所有 URL 共用同一个时间,等于告诉搜索引擎全站同时更新。同样的问题:所有页面看起来一样新,就不会有任何页面显得更值得优先看。分片 Sitemap 中,索引文件的 lastmod 应该是子文件的变化时间,而子文件里各个 URL 的 lastmod 才是页面自己的时间,两者不要混着写。

只改 lastmod,不改内容

这是最伤信任的一种。如果多次出现“lastmod 更新但抓到的页面与上次完全一致”,这条线索在调度里的权重会下降。它不是一次性的惩罚,而是逐步被忽略:你以为自己在提醒,实际上只是把噪音调大了。

怎样写才算一条可用的时间线索

  • 与真实变更对齐:模板改动、推荐位调整这类不影响正文的改动,不必改 lastmod。
  • 精度到天通常就够:秒级时间戳不会带来额外好处,反而更容易出现无意义抖动。
  • 时区统一:用带时区的 ISO 8601 格式,避免同一站点出现两种时间基准。
  • 不要倒退:lastmod 不应该比上一次更早,除非确实做了内容回退。
  • 数量可控:真正的更新页往往只占全站一小部分,如果每天有几千个 URL 同时变新,那基本可以确定时间戳是自动生成的。

从日志里验证它有没有被用上

验证方式很朴素:找出那些 lastmod 有明显变化的 URL,看它们在变化之后多久被重新抓取;再找一批 lastmod 没动、但内容实际更新过的页面,看抓取间隔有没有被拉长。两相对比,大致能判断这条时间线索在你这个站点上是否被采纳。如果更新后抓取时间没有提前,也不必急着加大力度改时间戳,先看看是不是服务器响应或页面重要程度在拖后腿。

该改与不该改

  1. 正文新增段落、修改标题、替换失效图片:改。
  2. 只有页脚版权年份、CSS 类名、广告位顺序变化:不改。
  3. 列表页新增了若干条内容:可以改,但不要每有一条新内容就整体刷新时间。
  4. 内容是转载或聚合,源头并未变化:不改。
  5. 同一 URL 内容被删除、改为空白页:不要用 lastmod 表达,应该用状态码说明。
lastmod 的价值不在于“新”,而在于“准”。一条准确的时间线,比每天刷新的时间戳有用得多。

把 Sitemap 当成一份向蜘蛛说明站点状况的清单,lastmod 就是清单上的批注。批注写得越接近事实,蜘蛛在排队时越容易做出正确判断;批注写得随意,清单本身也会慢慢被当成噪音。