Sitemap 里的 lastmod 字段常被当成“顺手填一下”的字段,但它是爬虫判断某個 URL 是否值得重新抓取的參考之一。当 lastmod 與頁面真實更新時間不一致时,抓取調度容易出現两類偏差:该重抓的頁面迟迟不抓,或者不该重抓的頁面被反复抓取,挤压抓取预算。
lastmod 在抓取調度中扮演什么角色
爬虫發現 URL 後,會综合入口来源、内鏈位置、歷史更新频率、lastmod 等因素决定抓取顺序。lastmod 不是唯一依據,但成本很低,是一個容易被讀取的提示信号:
- lastmod 明顯新于上次抓取時間,倾向于尽快重抓;
- lastmod 長期不變,倾向于降低重抓频率;
- lastmod 與响應头 Last-Modified 冲突时,通常以實际内容變化和响應头為准。
所以 lastmod 失真的直接後果不是“被惩罚”,而是調度信号與實际内容變化脱节。
常见的 lastmod 失真来源
1. 全站统一時間戳
构建脚本把 lastmod 寫成打包或部署時間,每次發布全站所有 URL 都被标记為“刚刚更新”。爬虫看到大量“新”URL,抓取队列被低價值頁面占满。
2. 时区與格式不统一
建议使用带时区的完整格式,例如 2024-05-01T08:30:00+08:00。只寫日期、寫本地時間不加时区,或多種格式混用,都可能造成解析偏差,甚至让校驗环节直接忽略该值。
3. 内容已更新但 lastmod 未同步
正文、價格、库存由接口動態渲染,而 Sitemap 由静態构建生成,lastmod 停留在构建時間。搜尋蜘蛛抓到的是舊版本,更新信号传不出去。
4. 人為“刷新”lastmod
為了顯得更新而批量改時間戳,會让抓取频率和真實變化量長期不匹配,日誌上表現為同一批 URL 反复被訪問但内容没變。
核對清單
- 抽样 20 到 50 個 URL,對比 Sitemap lastmod、响應头 Last-Modified、頁面中可见的更新時間三者是否一致。
- 检查格式是否為带时区的完整時間,是否存在只有日期或时区缺失的情况。
- 確認 lastmod 取自内容库的真實更新時間字段,而不是构建或部署時間。
- 观察抓取日誌中這批 URL 的重抓間隔,是否與内容更新频率相符。
- 確認 lastmod 只出現在确實會频繁更新的 URL 上,長期不變的頁面宁可省略该字段,也不要寫死一個舊時間。
lastmod 是提示,不是承诺。它的價值在于“少而准”,不在于“全而新”。
修复與观察顺序
建议從生成逻辑入手,而不是手工维護:先让内容更新時間落库,再由构建流程讀取輸出;分頁、篩選參數頁等低價值 URL 尽量不寫 lastmod;對高频更新的栏目設定合理的更新粒度。
調整後不要立刻下结论,抓取調度的反馈通常需要一到數周。可以關注三個指标:同一目錄下的平均重抓間隔、抓取日誌中 200 與 304 的比例變化、新發布頁面的首次被抓取時間。如果重抓間隔没有變化,先排查 Sitemap 是否被正确讀取,再考虑其他因素。
最後提醒:Sitemap 只是 URL 發現的入口之一,内鏈结构和服務器稳定性對抓取的影响往往更直接。把 lastmod 調准是把信号調准,並不能替代其他基础工作。