在很多站点的 sitemap 里,lastmod 是一個容易被随手填寫的字段。有人把它设成当天日期,有人让它等于文章發布時間,還有人干脆全站统一一個值。這個字段本身不复杂,但它传递的是“頁面内容發生了實质性變化”的信号。如果蜘蛛多次按這個時間来訪,却發現内容没有變化,它對這個信号的信任度就會下降。
lastmod 在蜘蛛眼里是什么
它不是一個“請求抓取”的開關,更像一條线索:告诉蜘蛛這個 URL 可能值得重新看一下。蜘蛛會把 lastmod 和它自己记錄的抓取歷史、頁面内容哈希、HTTP 响應头等信息放在一起判断。對更新频繁的站点,准确的 lastmod 有助于把有限的抓取配額導向新内容;對更新不频繁的站点,胡乱刷新時間戳反而可能让蜘蛛把抓取浪費在無變化的頁面上。
常见的三種寫错方式
1. 全站共用一個時間戳
每次部署时,模板或构建脚本把 sitemap 里所有 URL 的 lastmod 都改成目前時間。蜘蛛第一次看到可能會来,第二次、第三次發現頁面没變,之後就會降低對這個字段的采信程度。尤其是栏目頁、關于頁這類長期不更新的 URL,被反复标成“刚刚更新”並不合理。
2. 把發布時間当成更新時間
文章發布後,如果只改了错別字、調整了排版,或者补了一張图,lastmod 要不要變?這取决于變化是否對讀者有意义。若只是修正筆誤,可以不更新;若补充了實质性信息、更新了資料或结论,則值得更新。把“發布時間”直接复用為 lastmod,會让舊文章永遠顯示為發布那天,蜘蛛無法感知後續的维護。
3. 時間格式或时区不一致
Sitemap 的 lastmod 建议使用 W3C Datetime 格式,至少精确到日期,最好带时区,例如 2025-03-18T09:30:00+08:00。只寫“2025-03-18”也可以,但不要混用多種格式。时区不一致时,同一天的更新可能被蜘蛛解析成前一天或後一天,虽然影响不大,但會让日誌比對變得麻烦。
更稳妥的寫法
- 只标實质變化:内容主体有增删改时才更新 lastmod,模板、广告位、推荐模块的變動不應触發。
- 按 URL 獨立记錄:每個頁面维護自己的更新時間,不要從全局构建時間覆盖。
- 保持稳定格式:全站统一用同一種時間格式和时区,便于蜘蛛和日誌工具解析。
- 不要為了“催抓”而刷新:频繁把舊頁面改成最新時間,短期可能带来几次訪問,長期會削弱信号可信度。
它和 HTTP Last-Modified、ETag 的關系
Sitemap 里的 lastmod 和 HTTP 响應头里的 Last-Modified 不是一回事。前者是站点主動提交的更新线索,後者是服務器對單個請求的响應信息,配合 ETag 還能支持 304 协商缓存。两者最好保持一致:如果 sitemap 说頁面三天前更新過,而 HTTP 头顯示的是半年前,蜘蛛會以自己的抓取结果為准,逐步降低對 sitemap 時間戳的依赖。對于由 CMS 或静態生成器产出的站点,可以在發布流程里同时寫入這两個值,减少不一致。
把 lastmod 当成“我想让蜘蛛来”的按钮,通常會适得其反;把它当成“我确實改了内容”的记錄,才更接近它的本意。
用日誌驗證蜘蛛是否采信
要判断 lastmod 是否起了作用,不能只看提交成功,而要看蜘蛛的實际訪問。可以按以下步骤观察:
- 在服務器日誌中篩選搜尋蜘蛛的 User-Agent,按 URL 分组。
- 记錄每個 URL 的 lastmod 值與蜘蛛實际来訪時間,看是否存在“改完不久就来”的對應關系。
- 對比長期不更新和频繁更新的頁面,观察蜘蛛回訪間隔是否有差异。
- 如果發現蜘蛛反复訪問未變化的 URL,检查是否有构建脚本在批量刷新 lastmod。
- 如果新内容迟迟不被訪問,先排查 URL 是否可被抓取、内鏈是否可達,再考虑 sitemap 信号。
小结
lastmod 不是抓取加速器,而是站点與蜘蛛之間的一份更新记錄。寫法上,宁可少标、准标,也不要全站刷同一個時間。把實质更新、HTTP 头和日誌反馈對齐之後,這個字段才能稳定地帮助蜘蛛判断哪些 URL 值得重新訪問。