搜尋抓取

Sitemap 的寫法與 lastmod:時間戳怎么给,蜘蛛才愿意參考

Sitemap 解决的是 URL 广度問题,不是優先級問题。本文梳理單文件限額、分片與索引文件的寫法,重点讲 lastmod 為什么容易失真、模板改動導致全站時間戳一起刷新會带来什么後果,以及 sitemap 與 canonical、内鏈之間该如何分工,最後给出用日誌和後台报告驗證效果的方法。

搜尋抓取

Sitemap 的寫法與 lastmod:時間戳怎么给,蜘蛛才愿意參考

Sitemap 是什么,不是什么

Sitemap 解决的是广度問题:告诉搜尋引擎站点里存在哪些規范 URL。它不解决權重和優先級問题,也不保證被收錄。不少站点把 sitemap 当成唯一的發現渠道,内鏈却断得七零八落,最後 sitemap 里大量 URL 長期停留在已知但很少被訪問的狀態,提交動作本身没错,缺的是配套的入口结构。

文件结构上的几個硬约束

  • 單個文件不超過 50000 條 URL,解压後不超過 50MB,超過就分片
  • 分片之後要用 sitemap 索引文件串起来,索引里同样只放各個分片的地址
  • 只放最终返回 200 的規范地址,不放重定向目标之外的舊地址、不放參數變体、不放已设 noindex 的頁面
  • 寫绝對 URL,包含协议;统一用 UTF-8 编碼;体量較大时用 gzip 压缩

這几條看着基础,但审核不嚴的站点常常在分片环节出错:文件生成了,索引里却漏掉某一個,等于這部分 URL 從未被提交過。

lastmod 為什么容易失真

很多站点的 lastmod 用的是构建時間,而不是内容實际變更時間。發一次版,全站 URL 的時間戳一起變成今天。第一次可能還會引起抓取系統的注意,几次之後這個信号就没有区分度了——所有頁面都顯示刚更新,等于所有頁面都没有更新。

更麻烦的是時間戳回退。某篇文章的 lastmod 從 6 月變回 3 月,這種前後不自洽會让抓取系統降低對整個 sitemap 的信任。

lastmod 的價值在于区分,而不是新鲜。全站统一刷新,等于没有信号。

相對稳妥的做法

  1. 把 lastmod 绑定到内容實体:正文、标题、结构化資料、主要配图的實际修改時間
  2. 模板、導航、頁脚的調整不要寫進 lastmod
  3. 時間戳只前進不後退,时区统一,格式用带偏移的 ISO 8601
  4. 没有可靠時間来源的頁面,宁可不寫 lastmod,也不要随手填一個目前時間

分片與更新节奏

分片不要按字母顺序随便切。可以按内容類型或更新频率来分:高频更新的栏目一個文件,長期稳定的頁面一個文件。這样你只需要重新生成變動的那個分片,不必每次重寫全部。

更新频率上,sitemap 不需要每有一條内容變動就重新生成並推送,一天几次通常足够。频繁提交同一個文件,收益是递减的。

和 canonical、内鏈的分工

sitemap 只列規范版本。同一篇内容的其它地址通過 canonical 指向它,不要把几條地址都塞進 sitemap,那是自己制造重复抓取。

sitemap 负责让抓取系統知道地址存在,内鏈负责說明哪個頁面更重要、從哪儿進入。只提交 sitemap、内鏈里却没有任何指向的頁面,抓取間隔通常明顯長于有内鏈支撑的頁面。反過来,内鏈结构清晰、sitemap 寫得粗糙的站点,抓取表現往往也不差——两者的權重並不對等。

怎么驗證它有没有起作用

  • 在服務端日誌里筛出 sitemap 中的路径,看是否被訪問、訪問間隔多長
  • 對比有内鏈入口和無内鏈入口的頁面,抓取频次差异是否明顯
  • 查看搜尋引擎後台的 sitemap 报告,關注已發現與已抓取之間的差距
  • 抽查 lastmod 與内容實际修改時間是否一致

如果大量 URL 長期停在已發現未抓取,先別急着改 sitemap,回到内鏈和站点层級上看:這些頁面本身是不是缺少入口,或者藏得太深。

几個常见坑

  • sitemap 里包含 robots.txt 已屏蔽的目錄,白提交
  • 分片文件没有在索引里列出,等于没提交
  • 把搜尋结果頁、篩選頁塞進去,制造大量低质抓取
  • 把 sitemap 当站点结构图用,放進去成千上萬個几乎不更新的頁面,反而稀释了真正的更新信号