搜尋抓取

Sitemap 索引、分片與 lastmod:URL 發現环节的常见寫法與誤区

蜘蛛發現 URL 的渠道不止一條,Sitemap 是其中可控性最高的一種。本文梳理索引文件與分片的基本規則、lastmod 的正确用法,以及 Sitemap 與内鏈如何分工配合,並给出寫完之後可执行的驗證步骤,帮助减少新 URL 在發現环节的等待時間。

搜尋抓取

Sitemap 索引、分片與 lastmod:URL 發現环节的常见寫法與誤区

Sitemap 在 URL 發現里扮演什么角色

不少人把 Sitemap 当成“提交了就會被收錄”的開關,實际它更像是一份候選清單。蜘蛛發現 URL 的渠道有好几條:外鏈、内鏈、歷史抓取记錄、Sitemap 以及其他声明文件。Sitemap 的價值在于,它能把那些内鏈层級很深、或者暂时没有外鏈指向的 URL 主動摆到蜘蛛面前,缩短發現环节的等待時間。但發現只是第一步,能不能抓、抓了之後怎么處理,取决于頁面本身的可訪問性和内容质量。

索引文件與分片:規模變大後怎么组织

單個 Sitemap 文件有明确上限:5 萬個 URL、未压缩体积不超過 50MB。超過之後就需要拆分成多個文件,再用一個 Sitemap 索引文件把它們串起来。索引文件本身只列出各個子 Sitemap 的地址,不直接列頁面 URL。

拆分时的几個實际注意点

  • 按内容類型拆通常比按時間拆更好维護,例如文章、商品、专题各一個文件。
  • 子文件之間不要互相嵌套,索引文件只引用最末一級的 Sitemap。
  • 文件地址尽量保持稳定,频繁改名會让已经抓過的记錄變成無效路径。
  • 压缩成 .gz 是被支持的,但要保證解压後内容完整、编碼正确。

lastmod 什么时候真正有用

lastmod 表示頁面内容的最後修改時間。它有用的前提是准确。如果每次生成 Sitemap 都把全部 URL 的 lastmod 刷成目前時間,蜘蛛很快會發現這個字段不可信,進而忽略它,甚至降低對整份文件的信任度。

比較稳妥的做法是:只在内容确實發生實质變化时更新對應條目的 lastmod。比如正文补充、價格調整、库存變化這類會改變頁面主要信息的改動。模板微調、广告位轮換、時間戳自動刷新這類不影响主体内容的改動,不建议動 lastmod。

把 lastmod 当成“我改了所以你要来看”的信号,前提是它真的代表改動。

Sitemap 和内鏈的分工

Sitemap 负责告诉蜘蛛“有這么個 URL”,内鏈负责告诉蜘蛛“這個 URL 有多重要、和別的頁面是什么關系”。两者不能互相替代。一個只存在于 Sitemap、站内没有任何連結指向的頁面,即使被抓取,也很难获得稳定的回訪,因為它在站点结构里没有位置。

反過来,連結受限的深层頁面如果只靠内鏈發現,可能要等很久。這时候用 Sitemap 补一刀,是合理的搭配。

寫好之後怎么驗證

  1. 確認 Sitemap 地址能在浏览器直接打開,返回 200 而不是 404 或跳轉。
  2. 检查 robots.txt 里是否声明了 Sitemap 地址,注意路径完整、大小寫正确。
  3. 抽查若干條目,確認其中的 URL 都是可訪問的、返回 200 的規范化地址。
  4. 過一段時間看抓取日誌,观察這些 URL 是否出現蜘蛛的訪問记錄,以及抓取後的狀態碼分布。
  5. 如果長期没有抓取痕迹,先排查文件本身是否可讀、條目是否有效,再考虑其他因素。

几個容易被忽略的细节

  • Sitemap 里不要放被 robots.txt 拦截的 URL,两者矛盾會让信号變混乱。
  • 不要放重定向地址、404 頁面、參數化篩選頁這類不该被当作獨立頁面處理的 URL。
  • 列表頁如果要放進 Sitemap,最好只放第一頁,後續分頁交给内鏈處理。
  • 文件更新频率不必太高,一天多次重寫並不會明顯加快發現速度。

Sitemap 做得好,能减少 URL 在發現环节的等待;但它解决不了内容层面和服務器层面的問题。把它当作一項稳定的基础配置,而不是抓取問题的萬能钥匙,思路會更清楚。