搜尋抓取

lastmod 與重訪優先級:怎么让蜘蛛相信頁面真的更新了

Sitemap 里的 lastmod 常被当成必填字段,构建时全量刷新,结果整站看起来天天更新,信号逐渐失去区分度。本文拆解 lastmod 在抓取决策中的實际作用,列出几種常见寫法問题,說明哪些内容變化值得更新時間戳,並给出 Last-Modified、内鏈位置、内容指纹等配套做法和一次日誌抽样的自查方法。

搜尋抓取

lastmod 與重訪優先級:怎么让蜘蛛相信頁面真的更新了

Sitemap 里的 lastmod 经常被当成一個“填了就行”的字段:不少站点每次构建都把全部 URL 的時間刷新成当天,结果是蜘蛛看到整站天天更新,久而久之把這個信号当作噪音處理。這篇想说的是,lastmod 更接近一條线索,而不是一條命令,它的價值取决于它與頁面真實變化之間是否一致。

蜘蛛為什么在意更新時間

站点的 URL 總量通常遠大于蜘蛛在單位時間内能抓取的數量,所以抓取队列里必然要做取舍:新 URL 要抓,舊 URL 也要重訪。当蜘蛛没法從頁面本身低成本判断“有没有變”时,就會參考若干外部提示,lastmod 是其中之一。它不會單獨决定抓取顺序,但會作為一個维度參與權衡。

這也解释了一個現象:lastmod 寫得越随意,它带来的邊际收益越小。当大部分 URL 的時間戳频繁變動、而頁面内容几乎不變时,這個字段就失去了区分度。

几種常见的寫法問题

  • 全量刷新:构建脚本把 sitemap 中所有條目的 lastmod 统一改成构建時間,與頁面内容是否變化無關。
  • 格式不一致:有的條目带时区,有的不带;有的精确到秒,有的只到日期。格式混乱會让解析结果不可靠。
  • 時間来自模板:列表頁、聚合頁的 lastmod 跟着模板走,正文没有任何改動也跟着變。
  • 只在新發时寫一次:正文做過實质性修订,價格或库存也變了,時間却停留在首次發布那天。

哪些變化值得改 lastmod

判断标准可以简單一点:這個改動對訪問者看到的内容有没有影响。

  1. 正文的新增、删减、纠错,属于值得更新的改動。
  2. 结构化資料里價格、库存、狀態的變動,通常是高频且真實的更新。
  3. 頁面主要模块的位置調整、信息合並,也可以更新。
  4. 纯粹的样式微調、缓存刷新、頁脚年份改動,一般没必要動 lastmod。
如果拿不准,就問自己一句:一個上周来過這個頁面的用戶,今天再来會不會看到實质不同?答案是否,就不要改時間。

lastmod 之外的配套信号

單一字段容易被忽略,配合其他信号會更稳。

  • Last-Modified 响應头:與 sitemap 中的時間大致對齐,两者能相互印證。
  • 内鏈位置變化:把更新過的頁面挪到首頁或栏目頁更靠前的位置,蜘蛛重訪這些高频頁面时更容易再次碰到它。
  • Sitemap 分片:只重寫發生變化的那個分片和對應索引文件,降低蜘蛛的對比成本。
  • 内容指纹:记錄正文哈希,只有哈希變化时才更新 lastmod,减少人工遗漏。

一次简單的自查

不需要复杂工具,做一次抽样對比就能看出問题:從服務器日誌里挑几十個 URL,把每個 URL 最近一次被抓取的時間,和它在 sitemap 里的 lastmod 放在一起看。如果大量 URL 的 lastmod 長期等于构建時間,而頁面内容並無變化,說明這個字段正在被滥用;如果明明修订過的頁面 lastmod 還停在首次發布,說明更新鏈路存在漏点。

把更新当成流程,而不是字段

真正影响重訪效率的,往往不是 lastmod 的寫法本身,而是站点有没有一條“内容更新—時間戳更新—内鏈位置更新”的完整鏈路。字段只是這條鏈路的末端輸出。把它当成一個需要维護的流程,比把它当成一個必须填满的字段,更接近問题的本质。