搜尋抓取

Sitemap 的 lastmod 與頁面更新時間:蜘蛛怎么判断一個頁面要不要重抓

老頁面為什么迟迟不重抓?Sitemap 里的 lastmod 常被当成開關,實际只是线索。本文說明蜘蛛判断重抓时會參考哪些信号,lastmod 被忽略的常见原因,以及從 Sitemap、HTTP 缓存头和服務器稳定性几方面减少噪音、让重抓节奏更可预期。

搜尋抓取

Sitemap 的 lastmod 與頁面更新時間:蜘蛛怎么判断一個頁面要不要重抓

Sitemap 里的 lastmod 字段经常被当成一個開關:更新它,蜘蛛就该来重抓。實际執行时它更像一條线索,蜘蛛會把它和自己观察到的情况對照,再决定這個 URL 是否值得占用一次抓取配額。

蜘蛛判断“要不要再抓”时會看什么

對已经抓取過的 URL,蜘蛛通常不會只依赖一個字段,而是把多方面的信号放在一起權衡:

  • 歷史變化频率:這個 URL 過去改動是否频繁,改完之後内容是否真的不同;
  • 上次抓到的内容:和這次能拿到的版本比對,確認有没有實质變化;
  • 站点层面的信号:内鏈、導航结构是否仍指向它,頁面是否還在有效路径上;
  • Sitemap 声明:lastmod 是否被频繁重置,是否與頁面真實更新時間一致;
  • HTTP 缓存头:Last-Modified、ETag 能否支撑一次條件請求;
  • 服務器表現:响應時間、错誤率、是否经常超时。

這些信号里,Sitemap 属于“發現层”,HTTP 头属于“驗證层”。两层都做對,重抓請求才更容易落在真正變化的頁面上。

lastmod 被忽略的常见原因

lastmod 不是填上就有效,下面几種情况會让它逐渐失去參考價值:

  • 每次部署都刷新全站時間,蜘蛛看到大量 URL 同时“刚刚更新”,但内容並没有變;
  • 時間格式不規范,缺少时区或使用本地化寫法,解析後得不到可用信息;
  • 把 lastmod 寫成未来時間,或者與頁面上的更新時間互相矛盾;
  • Sitemap 中列了大量不重要的 URL,把真正需要重抓的頁面稀释掉。

让重抓更有可预期性的做法

這里说的“可预期”不是让蜘蛛按你的時間表来,而是减少它判断时的噪音。

Sitemap 侧

  • 只在内容确實改變时更新 lastmod,格式使用带时区的 ISO 8601;
  • 把更新频繁的栏目或资讯類頁面單獨分片,不要和長期不變的說明頁混在一起;
  • 定期清理已经 404、301 到別處或已下线的 URL。

頁面與服務器侧

  • 让 Last-Modified 反映真實的内容變更,而不是每次渲染都變;
  • 稳定輸出 ETag,使條件請求能返回 304,避免重复传完整頁面;
  • 保證抓取高峰时服務器不出現大量 5xx,错誤率升高會让整体抓取节奏放缓;
  • 用内鏈把重要頁面放在網站结构里,而不是只靠 Sitemap 推送。

观察與驗證

改完之後不要只看一次日誌。可以關注:同一批 URL 的重抓間隔是否趋于稳定;抓取失敗的 URL 是否集中在某類模板;返回 304 的比例是否上升。這些指标比只盯着 Sitemap 更接近真實情况。

lastmod 是给蜘蛛的一條线索,不是抓取承诺。它起作用的前提是:頁面的真實變化和它声明的是同一件事。

把 Sitemap 当成一份“目前有效 URL 與更新情况”的清單,而不是一份想让蜘蛛按排期訪問的時間表,再配合稳定的服務器和清晰的内鏈结构,URL 的重新抓取才會慢慢形成可预期的节奏。