搜尋抓取

Sitemap 怎么寫才不浪費抓取:lastmod、分片與收錄范围的取舍

Sitemap 是给蜘蛛的一份 URL 清單,帮它發現站内遗漏的地址,但不决定抓取與收錄。文章讲清楚 lastmod 怎么寫才可信、分片與索引文件如何组织、哪些 URL 不该放進去,以及提交後怎样通過日誌观察這份清單有没有真的被用起来。

搜尋抓取

Sitemap 怎么寫才不浪費抓取:lastmod、分片與收錄范围的取舍

Sitemap 常被当成“提交就能被抓”的開關,實际它更像一份交给蜘蛛的清單:告诉它站点上還有哪些地址存在。至于這些地址什么时候被抓、抓多深,仍然由抓取系統和頁面本身决定。把 Sitemap 寫對,能减少無谓的探索成本;寫歪了,反而會给自己的抓取資料添乱。

Sitemap 能做什么,不能做什么

它的主要價值是URL 發現:当站内連結结构有死角,或者新頁面還没被内鏈串起来时,Sitemap 是一個补充入口。它不能提高某個頁面的優先級,也不能保證被抓取。理解這一点,後面的取舍會清晰很多。

lastmod:只寫真實修改時間

lastmod 是 Sitemap 里少數會參與抓取判断的字段,但前提是它足够可信。几個常见做法值得注意:

  • 只在頁面内容确實發生變化时更新,不要每次部署或模板調整就全站刷新。
  • 使用带时区的 ISO 8601 格式,例如 2024-05-06T10:20:00+08:00,避免只寫日期導致時間被随意解讀。
  • 批量生成的 lastmod 如果長期與實际情况不符,抓取方會逐步降低對该字段的參考程度。
  • 列表頁、聚合頁這類频繁變動的地址,如果只是排序變化,未必需要跟着更新時間。

反過来,如果站点多數頁面确實長期不動,lastmod 保持不變是正常的,不需要為了“看起来活跃”人為造時間。

分片與索引文件:怎么切更省事

站点大一些之後,通常會用 Sitemap 索引文件组织多個子 Sitemap。切分方式没有唯一答案,但有几條经驗:

  • 按目錄或内容類型切,例如文章、商品、专题各自一個文件,出問题时容易定位。
  • 單個文件的地址數量控制在合理范围,別让它變成一個巨大的响應体,讀取起来更費時間。
  • 每個分片的地址保持稳定,不要频繁改名或換路径,否則等于让抓取方重新熟悉一遍。
  • 索引文件只列子 Sitemap 的地址,不要把頁面 URL 混在里面。

哪些 URL 不该放進去

Sitemap 里混入不该抓的地址,會分散抓取资源。常见几類:

  • 返回重定向或其他非 200 狀態的地址,應该直接提供最终地址。
  • 被 robots.txt 屏蔽的目錄,放進去只是一份無效清單。
  • 带會话、排序、篩選參數的變体地址,容易與規范地址重复。
  • canonical 指向別處的頁面,直接提供規范地址更清楚。
  • 登入後、後台、測試环境的路径,本就不该暴露给抓取。

提交之後看什么

看日誌比看後台數字更實在。可以留意 Sitemap 文件本身的請求记錄:抓取方多久来取一次,取完之後有没有跟着訪問里面的地址。再把清單中的 URL 和日誌里實际被抓的 URL 做個對比,重合度低通常說明這些地址在別處已经被發現,或者站点整体抓取額度有限,新清單排在後面。

另一個常被忽略的点是响應碼分布。如果 Sitemap 里的地址被抓时大量返回 3xx、404 或 5xx,先修這些,再谈更新清單。

Sitemap 是一份清單,不是一條命令。它的價值取决于清單里的地址是否真實、可抓、值得抓。

几個容易踩的坑

  1. 把 Sitemap 当成新頁面的唯一入口,站内没有任何連結指向该頁面。即使被發現,頁面在站内的位置也很难被理解。
  2. 每次内容更新後重新生成全部 Sitemap,lastmod 全站翻新,反而让時間字段失去区分度。
  3. 只提交不维護,站点改版、目錄調整後,清單里還留着大量舊地址。

把 Sitemap 当成站点结构的备份說明来维護:结构清楚、地址干净、時間真實,它對 URL 發現的帮助才會稳定發挥。