Sitemap 里的 lastmod 经常被当成一個“填了就行”的字段:不少站点每次构建都把全部 URL 的時間刷新成当天,结果是蜘蛛看到整站天天更新,久而久之把這個信号当作噪音處理。這篇想说的是,lastmod 更接近一條线索,而不是一條命令,它的價值取决于它與頁面真實變化之間是否一致。
蜘蛛為什么在意更新時間
站点的 URL 總量通常遠大于蜘蛛在單位時間内能抓取的數量,所以抓取队列里必然要做取舍:新 URL 要抓,舊 URL 也要重訪。当蜘蛛没法從頁面本身低成本判断“有没有變”时,就會參考若干外部提示,lastmod 是其中之一。它不會單獨决定抓取顺序,但會作為一個维度參與權衡。
這也解释了一個現象:lastmod 寫得越随意,它带来的邊际收益越小。当大部分 URL 的時間戳频繁變動、而頁面内容几乎不變时,這個字段就失去了区分度。
几種常见的寫法問题
- 全量刷新:构建脚本把 sitemap 中所有條目的 lastmod 统一改成构建時間,與頁面内容是否變化無關。
- 格式不一致:有的條目带时区,有的不带;有的精确到秒,有的只到日期。格式混乱會让解析结果不可靠。
- 時間来自模板:列表頁、聚合頁的 lastmod 跟着模板走,正文没有任何改動也跟着變。
- 只在新發时寫一次:正文做過實质性修订,價格或库存也變了,時間却停留在首次發布那天。
哪些變化值得改 lastmod
判断标准可以简單一点:這個改動對訪問者看到的内容有没有影响。
- 正文的新增、删减、纠错,属于值得更新的改動。
- 结构化資料里價格、库存、狀態的變動,通常是高频且真實的更新。
- 頁面主要模块的位置調整、信息合並,也可以更新。
- 纯粹的样式微調、缓存刷新、頁脚年份改動,一般没必要動 lastmod。
如果拿不准,就問自己一句:一個上周来過這個頁面的用戶,今天再来會不會看到實质不同?答案是否,就不要改時間。
lastmod 之外的配套信号
單一字段容易被忽略,配合其他信号會更稳。
- Last-Modified 响應头:與 sitemap 中的時間大致對齐,两者能相互印證。
- 内鏈位置變化:把更新過的頁面挪到首頁或栏目頁更靠前的位置,蜘蛛重訪這些高频頁面时更容易再次碰到它。
- Sitemap 分片:只重寫發生變化的那個分片和對應索引文件,降低蜘蛛的對比成本。
- 内容指纹:记錄正文哈希,只有哈希變化时才更新 lastmod,减少人工遗漏。
一次简單的自查
不需要复杂工具,做一次抽样對比就能看出問题:從服務器日誌里挑几十個 URL,把每個 URL 最近一次被抓取的時間,和它在 sitemap 里的 lastmod 放在一起看。如果大量 URL 的 lastmod 長期等于构建時間,而頁面内容並無變化,說明這個字段正在被滥用;如果明明修订過的頁面 lastmod 還停在首次發布,說明更新鏈路存在漏点。
把更新当成流程,而不是字段
真正影响重訪效率的,往往不是 lastmod 的寫法本身,而是站点有没有一條“内容更新—時間戳更新—内鏈位置更新”的完整鏈路。字段只是這條鏈路的末端輸出。把它当成一個需要维護的流程,比把它当成一個必须填满的字段,更接近問题的本质。