搜尋抓取

Sitemap 的寫法與维護:分片、lastmod 與提交後的核對

站点地图不是抓取主力,它的作用是提前告知 URL 存在。本文從文件格式的硬性上限、lastmod 的填寫原則、與内鏈和 robots 的分工,到提交後如何用日誌和报告核對,梳理一份能長期维護的 Sitemap 寫法。

搜尋抓取

Sitemap 的寫法與维護:分片、lastmod 與提交後的核對

站点地图(Sitemap)不是让蜘蛛抓取的主力,内鏈才是。它的價值在于把内鏈不太好覆盖的、或者刚刚生成的 URL 提前告知搜尋引擎,减少“地址被發現但迟迟不進队列”的情况。但 Sitemap 本身有格式和數量上的硬约束,寫得不規范反而會拖慢處理。下面按文件格式、lastmod、與其他通道的分工、上线後的核對四块来说。

一、文件本身的硬约束

單個 Sitemap 文件最多 50,000 條 URL,未压缩狀態下不超過 50MB。超過這個規模就要拆成多個子文件,再用 sitemap index 匯總成一個索引文件。

  • 索引文件可以指向多個子文件,子文件里的 URL 需要與所在域名一致,跨域需要先在對應工具里驗證權限
  • 只放返回 200 且允许被索引的地址,301、404 以及被 robots.txt 拦截的地址不要放
  • 用 gzip 压缩是可以接受的,但压缩並不能突破 50,000 條的上限
  • XML 声明、命名空間、编碼要規范,格式错誤會導致整個文件解析失敗

二、lastmod 要如實填寫

lastmod 是给蜘蛛判断“是否值得重訪”的參考字段。常见的两種做法都會让它失去信息量:一是全站统一一個時間戳,二是每次生成文件时全部刷新一遍。

更稳妥的做法是,只在正文、主要结构化資料、價格或库存這類實质内容發生變化时,更新對應 URL 的 lastmod。模板調整、样式修改、導航改動不必更新。如果站点是全量生成頁面,至少要保證 lastmod 與頁面上可见的更新時間一致,否則两邊對不上,反而降低這個字段的可信度。

三、和其他通道的分工

Sitemap 解决的是“告诉你有這個 URL”,並不解决“蜘蛛愿意爬”。真正决定蜘蛛能不能走到頁面上的,還是可以稳定点击的内鏈路径。

  • 重要頁面仍要有内鏈入口,Sitemap 只是补充,不要拿它替代導航和正文連結
  • 被 canonical 收敛掉的重复地址,Sitemap 里應当放 canonical 指向的那一個
  • 分頁和篩選參數頁一般不必全量放進去,只挑有獨立價值的放
  • robots.txt 里被 Disallow 的目錄不要出現在 Sitemap,两邊冲突时以抓取規則為准

四、提交之後的核對

提交文件位置只是把地址告知搜尋引擎,處理需要時間,也不保證每一條 URL 都會被抓取或收錄。核對时主要看两個地方:服務端日誌里這些 URL 有没有出現蜘蛛請求,以及站長工具里 Sitemap 的讀取狀態和已發現 URL 數。

  1. 先確認文件能被正常訪問,返回 200,Content-Type 正确
  2. 看报告里的“已發現 URL 數”與實际條數是否接近,差得太多通常是解析失敗或部分條目被忽略
  3. 抽样几個 URL,看日誌里有没有對應的抓取請求,没有就回到入口頁和内鏈去检查
  4. 長期没被抓取的 URL,先判断它是否属于低價值頁面,再决定是补内鏈還是從文件里移除

五、几個常见错誤

  • URL 寫成相對路径,或者带上了會话參數
  • 大量 404、302 地址長期留在文件里不清理
  • 索引文件里再嵌套索引文件
  • 一次提交几十萬條几乎相同的頁面,稀释了處理優先級
把 Sitemap 当作通知渠道,而不是入场券。

定期维護比一次性全量提交更重要。建议每月核對一次文件里的狀態碼分布,把已经失效或已经合並的地址清掉,保持文件短小准确。數量不多但都是有效 URL,處理效率通常好過塞進一大批低质量地址。