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 更直接。
- 内容發生實质變化後,可以顺手在站内合适位置补一條内鏈,让蜘蛛有路径跟進来。
一個可以長期执行的维護习惯
- 確認内容更新時間字段的来源,确保它只在編輯動作之後變化。
- 生成 Sitemap 时讀取這個字段,而不是文件系統時間。
- 每次發布前抽查几個 URL,看 lastmod 是否與實际更新時間對得上。
- 提交後在 Search Console 的 Sitemap 报告里观察已發現 URL 數的變化。
- 定期用服務器日誌核對:被重新抓取的 URL,是否集中在 lastmod 較新的那批。
lastmod 的價值不在于让蜘蛛立刻就来,而在于它在决定先看哪些頁面时,能拿到一份大致准确的排序依據。字段越小、越准,越有用。