先把 sitemap 当成一份需要维護的资产
不少站点在建站时提交過一次 sitemap.xml,之後几年都没再動過。文件還在,但里面混着已下线的頁面、带一堆參數的篩選地址,甚至跳轉前的舊連結。蜘蛛按图索骥地来抓,结果大量請求落在没有價值的地址上,真正需要更新的内容反而排到了後面。
站点地图的作用很朴素:给爬虫一份「哪些地址值得来看」的清單。它不保證收錄,也不直接影响排名,但會明顯影响抓取效率。把它当成需要定期维護的资产,比当成一次性提交任務更合适。
哪些地址不该放進 sitemap
- 返回 301、302 的舊地址:直接寫跳轉後的目标地址即可。
- 返回 404、410 的頁面:確認不再使用就從文件里删掉。
- 設定了 noindex 的頁面:既然不想被索引,也没必要占用清單。
- 篩選、排序參數生成的组合頁:這類地址數量容易失控,除非它本身有獨立的搜尋價值。
- 登入後、购物车、後台等需要會话狀態的頁面。
- 同一内容的多份地址:只保留 canonical 指向的那一個。
拆分與更新时的几個细节
單文件的條數與体积
常见约定是單個 sitemap 文件不超過 5 萬條 URL、未压缩体积不超過 50MB。内容量大的站点用 sitemap 索引文件指向多個子文件,按栏目或按内容類型拆分,改動时只重新生成受影响的那一份,既省资源也便于排查。
lastmod 要反映真實修改時間
有些系統會把所有 URL 的 lastmod 寫成文件生成時間,每次生成整份文件就全部刷新一遍。這样寫等于告诉爬虫「全站都更新了」,几次之後這個字段就失去了參考價值。更合适的做法是让 lastmod 跟着内容修改時間走,模板調整、广告位更換這類不影响正文的改動可以不刷新。
列表頁與分頁地址
列表頁是否放進去,取决于它有没有獨立價值。如果想借助列表頁帮助發現詳情頁,可以只放前几頁,没有必要把翻到第一百頁的地址都列進去。分頁地址大量堆积时,反而會稀释核心内容的抓取机會。
發布與自查清單
- 文件能正常訪問,返回 200,Content-Type 為 XML。
- 地址使用绝對路径,與线上實际地址完全一致,包括协议、域名、大小寫和末尾斜杠。
- XML 格式合法,没有轉义错誤導致解析失敗。
- 大文件啟用 gzip 压缩,减少传輸体积。
- 在 robots.txt 中声明 Sitemap 地址,方便爬虫自行發現。
- 在搜尋平台的站長工具里提交,並留意抓取與索引报告中的異常提示。
- 内容有更新後重新生成,確認平台能讀到新的時間戳。
- 定期抽样几個地址,手動打開確認返回狀態正常。
站点地图不是「提交得越多越好」的清單,而是一份需要定期删减的名單。少放一些無效地址,往往比多塞几百條更有意义。
如果站点的 sitemap 是程序自動生成的,建议把生成逻辑和内容發布流程绑在一起:内容上线、下架、更換地址时同步更新,而不是靠人工在某個時間点想起来补一次。這样维護成本最低,也最不容易出错。