先確認是不是真的需要拆
搜尋引擎對單個 sitemap 文件有两項硬限制:URL 條數不超過 50000 條,未压缩体积不超過 50MB。如果站点只有几千個頁面,一個文件完全够用,拆得太碎反而增加蜘蛛获取地图文件的次數。真正需要拆分的情况通常是:栏目頁加内容頁已经超過五萬條;正文里图片、视频等條目多,單文件体积先撞上限;或者站点由多個子站、多語言目錄组成,希望分開观察。
三種常见的分片方式
- 按栏目拆:新闻、产品、問答各一份,和站点结构一致,後續增删栏目时改動最小。
- 按内容類型拆:文章、商品、标簽聚合、作者頁分開,方便單獨控制哪些類型值得提交。
- 按時間拆:按月或按季度切片,常见于更新量大的资讯站,最新一份文件小、變動频繁,舊文件基本不動。
實际站点往往是混合使用,比如「产品-2024」「文章-2025-01」,命名保持可讀,出問题时能在服務器日誌里一眼認出来。
索引文件怎么寫
sitemap 索引文件本身不是頁面清單,它只列出子地图的地址和最後修改時間,不能把普通 URL 混進去。每個子地图都必须能被正常訪問、返回 200 狀態碼,且内容是有效的 XML。索引文件同样有數量上限,一般支持最多 50000 個子地图,绝大多數站点遠達不到。
一個常见的誤操作:把索引文件提交给搜尋引擎,却在 robots.txt 里把子地图路径整段屏蔽。结果是索引讀到了,子地图全部取不到。
lastmod 不是随便寫的
lastmod 表示這份文件里内容的最後實质性修改時間。模板改版、广告位調整、頁脚換文案這類不影响正文的改動,不需要刷新 lastmod;否則每次全站更新,蜘蛛都會按「有新内容」来處理,白白消耗抓取预算。如果站点無法准确给出時間,宁可不寫這個字段,也不要统一寫死成当天日期。
分片之後的日常维護
- 新增内容落到對應的子地图里,避免出現一份「其他」文件無限膨胀。
- 下线的頁面從地图中移除,不要留着一堆 404、410 的舊地址。
- 栏目合並或迁移时同步調整子地图,並在 robots.txt 的 Sitemap 指令里更新索引地址。
- 定期用日誌確認地图文件的抓取情况:返回碼、抓取频次、有没有長期取不到的文件。
几個容易被忽略的细节
- 地图里寫的地址要和线上最终地址完全一致,包括协议、主机名、大小寫和末尾斜杠。
- 非 ASCII 字符、含參數的 URL 需要做轉义處理,別直接塞入原始中文。
- 压缩包可以减小传輸体积,但解压後的体积仍然受限制。
- 分片不是越多越好。几百個子地图會让蜘蛛把時間花在地图文件本身,而不是内容頁。
站点規模不大的时候,sitemap 只是补漏手段,重点還是靠内鏈和栏目结构把頁面暴露出来。等到确實需要分片,再按上面的思路整理一遍,通常比一次性推倒重来更省事。