搜尋抓取

Sitemap 里的 lastmod:标對了是信号,标错了是噪音

lastmod 是 Sitemap 中常被忽略的字段:寫對了,它是蜘蛛判断哪些 URL 值得重新抓取的參考;寫错了,全站同一時間戳反而會稀释信号。本文拆解常见誤用、正确的時間来源、分片 Sitemap 的處理方式,以及它和内鏈、頁面可见時間该怎么配合。

搜尋抓取

Sitemap 里的 lastmod:标對了是信号,标错了是噪音

lastmod 是给蜘蛛的參考信号,不是命令

Sitemap 里除了 loc,還可以给每個 URL 加一個 lastmod,表示這個 URL 最後一次實质更新的時間。它采用 W3C 的日期時間格式,例如 2024-05-12T08:30:00+08:00,至少要寫到日期。

蜘蛛讀取 Sitemap 时,會把 lastmod 当成一個參考信号:這個頁面比我上次抓到的版本新,可能值得再看一眼。但它只是判断依據之一,蜘蛛還會结合上次抓取時間、頁面重要性、站点整体變化量来决定先看谁。寫對不會带来什么額外待遇,寫错却可能让這個字段逐渐失去意义。

三種常见的错誤寫法

  • 全站同一個時間戳。每次生成 Sitemap 时,把所有 URL 的 lastmod 刷成目前時間。蜘蛛第一次可能還會參考,几次之後發現内容其實没變,這個字段的区分度就没了。
  • 用构建時間或文件修改時間。模板改動、部署發布、缓存回源都會让文件時間變化,但頁面正文可能一個字没動。把這類時間寫進去,等于告诉蜘蛛每天全站都在更新。
  • 未来時間或时区错誤。寫成明年的日期,或者把本地時間当成 UTC 寫,會让蜘蛛對時間线的判断错乱。统一使用带时区的 ISO 8601 格式最稳妥。

真正该寫的是内容變化時間

比較可靠的做法,是让 Sitemap 里的 lastmod 来自内容管理系統的更新時間字段,而不是模板层或發布流程的生成時間。

几條判断标准

  • 正文增删、勘誤、补充資料、替換主图,算更新。
  • 只改了頁脚、導航、广告位、推荐位,不算更新。
  • 批量調整全站样式或統計代碼,不要顺手把全站 URL 的 lastmod 一起刷新。
  • 局部改動只改對應 URL 的 lastmod,其余保持原值。

如果站点没有可靠的内容更新時間字段,宁可不在 Sitemap 里寫 lastmod。缺省字段不會带来坏處,寫满错誤的時間反而會削弱整份 Sitemap 的可信度。

分片 Sitemap 與索引文件的 lastmod

URL 數量較多时,站点通常用 Sitemap 索引指向若干分片文件。索引里每個分片也能标注 lastmod,它表示该分片内所有 URL 中最新的那個更新時間。

常见的毛病是:分片内容没有任何變化,却被重新生成,索引里的 lastmod 跟着一起變。更细的做法是,只有当某個分片里的 URL 集合或時間确實有變化时,才更新這個分片的 lastmod,其他分片保持不動。

和其他更新信号配合起来看

lastmod 最好與頁面上能看到的信号保持一致,否則蜘蛛拿到的是互相矛盾的线索。

  • 頁面上顯示的發布時間、更新時間,和 Sitemap 里的 lastmod 不要互相打架。
  • 结构化資料里的 dateModified 如果存在,也應與頁面可见時間接近。
  • 内鏈變化本身就是一種發現信号。新增一條從栏目頁指向新 URL 的連結,往往比只把它塞進 Sitemap 更直接。
  • 内容發生實质變化後,可以顺手在站内合适位置补一條内鏈,让蜘蛛有路径跟進来。

一個可以長期执行的维護习惯

  1. 確認内容更新時間字段的来源,确保它只在編輯動作之後變化。
  2. 生成 Sitemap 时讀取這個字段,而不是文件系統時間。
  3. 每次發布前抽查几個 URL,看 lastmod 是否與實际更新時間對得上。
  4. 提交後在 Search Console 的 Sitemap 报告里观察已發現 URL 數的變化。
  5. 定期用服務器日誌核對:被重新抓取的 URL,是否集中在 lastmod 較新的那批。
lastmod 的價值不在于让蜘蛛立刻就来,而在于它在决定先看哪些頁面时,能拿到一份大致准确的排序依據。字段越小、越准,越有用。