搜尋抓取

Sitemap 里的 lastmod 怎么寫:让時間戳和頁面的真實改動對齐

Sitemap 的 lastmod 是站点自己声明的時間信号。全站统一刷新、用构建時間代替内容時間,都會让這個字段失去參考價值。本文說明正确的時間格式、常见的三類错誤寫法,以及如何让時間戳與頁面的實质性修改對齐,並附一份可以直接执行的自查清單。

搜尋抓取

Sitemap 里的 lastmod 怎么寫:让時間戳和頁面的真實改動對齐

Sitemap 是站点主動交出去的 URL 清單,但清單里的每個地址都带着一個時間戳。很多站点把 lastmod 当成“填上就行”的字段,结果蜘蛛看到的時間和頁面真實的改動時間對不上。一两次没有影响,長期不一致之後,這個字段就很难再被当作參考。

蜘蛛為什么在意這個時間戳

蜘蛛的抓取资源有限,它需要在“已知但可能過期的頁面”和“從未见過的頁面”之間决定先去哪里。頁面的改動時間,是判断“值不值得再来一次”的輸入之一。Sitemap 里的 lastmod 由站点自己声明,属于比較明确的信号——前提是它可信。

需要说清楚的是,lastmod 只是众多輸入中的一個。它不會單獨决定抓取顺序,也不會因為寫對了就保證頁面被重新抓取。它的價值在于:当其他條件差不多时,一個准确的時間戳能让判断更有依據。

格式先寫對

  • 使用 W3C Datetime 格式,例如 2025-03-08T09:12:30+08:00。
  • 带上时区偏移。只寫到 YYYY-MM-DD 也是合法格式,但精度只到天。
  • 同一個 Sitemap 文件内保持一致,不要一部分带时区、一部分不带。
  • 不要寫相對時間,也不要用“三天前”這類描述。

三種常见的错誤寫法

全站统一成今天

有些程序會在每次生成 Sitemap 时,把所有 URL 的 lastmod 都刷成目前時間。蜘蛛第一次看到,會以為整站都更新了;第二次、第三次還是同样的结果,這個字段就失去意义了。一個持續變化的 lastmod,和一個没有 lastmod,差別並不大。

用构建時間代替内容時間

静態站点常见的問题:每次部署都重新生成所有頁面文件,文件時間變了,lastmod 也跟着變,但頁面内容可能一年没動過。正确做法是记錄内容的最近一次實质性修改,而不是记錄文件系統的時間。

時間戳無法解析

寫成“2025/03/08”、中文日期,或者干脆留空,解析失敗的條目往往會被整條忽略,连同這條 URL 的其他信息一起打折。生成之後最好抽查几條,確認格式能被标准解析器讀懂。

让時間戳和真實改動對齐

判断什么叫“實质性修改”,可以给几條简單的线:正文内容、标题、主要结构化資料的調整,可以更新時間;评论排序變化、广告位轮換、推荐位調整,一般不算;样式微調、模板改動引起的全站“更新”,更不應该体現在 lastmod 上。

如果内容存在資料库里,取最後修改時間字段即可。如果内容来自發布流程,可以让編輯在儲存时决定是否打上新的時間戳。關键点是:只有人或者明确的規則認為内容變了,時間才變。

和其他信号配合起来

  • lastmod 准确,配合頁面的 304 與 ETag 响應,蜘蛛可以用很小的成本確認有没有變化。
  • Sitemap 分片时,索引文件里的 lastmod 應取该分片内頁面的最大值,而不是生成時間。
  • 内鏈和 Sitemap 指向同一個 URL 时,時間戳也應對應同一個頁面版本,不要互相矛盾。
  • 頁面已经刪除的,不适合靠改 lastmod 去“唤醒”,應当從 Sitemap 移除並返回正确的狀態碼。

一份可执行的自查清單

  1. 随机抽 20 條 URL,把 Sitemap 里的 lastmod 和頁面實际修改時間逐條對比。
  2. 检查是否存在全站 lastmod 等于生成時間的批量模式。
  3. 確認時間格式统一,並且带有时区。
  4. 检查有没有未来時間。
  5. 检查分片 Sitemap 索引中的 lastmod 是否取的是分片内的最大值。
  6. 後台里如果有多處记錄修改時間,確認 Sitemap 取的是同一個字段。
把 lastmod 寫准,不會让蜘蛛立刻来抓;把它寫乱,長期下来只會让這個字段變得可有可無。

站点對 URL 清單的维護方式,反映的是它對自身内容更新的掌控程度。時間戳只是其中一個细节,却很容易被自動化流程寫坏,也很容易被忽略。定期抽查一次,比每次全量刷新更省事。