搜尋抓取

Sitemap 里的 lastmod 该填什么時間:填错等于给蜘蛛發假信号

Sitemap 中的 lastmod 常被统一填成生成時間,導致蜘蛛無法分辨哪些 URL 真的更新過。本文說明 lastmod 在抓取流程里起什么作用、几種常见的填错方式、比較稳妥的填寫习惯,以及如何用抓取日誌驗證它到底有没有被參考。

搜尋抓取

Sitemap 里的 lastmod 该填什么時間:填错等于给蜘蛛發假信号

Sitemap 里的 lastmod 是最容易被随手填、也最容易被蜘蛛忽略的一個字段。它不决定頁面能不能被抓,但會影响蜘蛛下次来的时候,愿不愿意為這個 URL 再花一次抓取预算。

lastmod 在抓取流程里起什么作用

Sitemap 主要用来申报“有哪些 URL”,lastmod 是對“這個 URL 什么时候變過”的补充說明。蜘蛛解析 Sitemap 时,會把新出現的 URL 放進待抓队列;對于已经见過的 URL,則會结合 lastmod、頁面返回的 Last-Modified 與 ETag、以及上一次抓取的時間,来判断是否值得回訪。

關键在于:lastmod 是一個參考信号,不是指令。填了新時間不等于蜘蛛立刻来,填了舊時間也不等于蜘蛛永遠不来。但如果這個字段長期和實际情况對不上,它作為參考的價值就會下降。

几種常见的填错方式

  • 全站同一個時間戳。生成 Sitemap 时统一寫目前時間,几萬個 URL 的 lastmod 完全一致,蜘蛛無法從中分辨哪些内容真的變了,這個字段基本失效。
  • 每次生成都刷新。哪怕頁面没動,只要构建脚本重跑,時間就更新一遍。時間一長,蜘蛛會認為這個站点的 lastmod 不可信。
  • 格式不規范。W3C Datetime 格式通常需要带时区,例如 2024-05-20T09:30:00+08:00。只寫日期、寫成纯數字時間戳、时区缺失,都可能被解析器丢弃。
  • 填了未来時間。服務器時間設定错誤或时区算反,會出現比目前時間還晚的 lastmod,這種值一般會被直接忽略。
  • 列表頁和詳情頁填反了。列表頁其實每天在換内容,却從不更新;詳情頁長期没動,却天天刷新。两類頁面的信号正好相反。

比較稳妥的填寫习惯

第一,lastmod 尽量来自内容本身。資料库的更新字段、CMS 的發布時間、版本控制里的提交時間,都比脚本執行時間靠谱。

第二,只在正文、结构化資料或主要内鏈發生實质變化时更新。改個错別字、挪個广告位,未必值得動這個時間。

第三,列表頁和聚合頁按真實节奏填。如果它每天确實換一批條目,那就跟着更新;如果只是随机排序,就不要伪装成更新。

第四,和 HTTP 头保持一致。頁面返回的 Last-Modified 與 Sitemap 里的 lastmod 相差太遠,會让人怀疑這份資料的准确性,两邊用同一個来源最省事。

lastmod 不是孤立的入口

把精力全押在 Sitemap 上並不划算。蜘蛛發現 URL 的主路径仍然是站内連結:導航、列表頁、相關推荐、面包屑。Sitemap 更接近补漏,负责把内鏈不容易走到的深层地址交出去。

所以一個頁面更新後,除了刷新 lastmod,更實际的做法是让它從几個稳定入口被鏈到——首頁的推荐位、對應分類的第一頁,或者一條站内快讯。連結路径通了,比時間戳寫得多精确都管用。

用日誌驗證有没有起作用

判断 lastmod 是否被參考,最终還是要回到抓取日誌:

  1. 看 Sitemap 本身被訪問的频率,以及蜘蛛是否稳定地重新下载它。
  2. 看被标记為更新的 URL,在之後一段時間里有没有出現新的抓取记錄。
  3. 看這些 URL 被抓取时返回的是 200 還是 304。304 比例很高,說明蜘蛛来了但内容没變,lastmod 可能與實际不符。
  4. 對比同一批 URL 中“改過 lastmod”和“没改過”的抓取次數差异,判断這個信号在目前站点上是否真的被參考。

如果更新了時間却完全看不到回訪,先別急着改格式,回头检查内鏈是否可達、頁面是否被 robots.txt 拦住、服務器是否稳定返回。這些基础問题不解决,任何字段层面的調優都看不出效果。

把 lastmod 当成一份诚實的變更记錄,而不是催促蜘蛛的按钮。它最多影响回訪的優先級,改變不了頁面本身的可抓取性。