站点运营

站点运营:sitemap 分片與索引文件,站点變大後地图该怎么拆

站点 URL 涨到几萬條以後,單個 sitemap 文件會先撞上條數和体积上限,這时需要拆成多個子地图,再用索引文件串起来。本文讲清什么情况该拆、几種常见分片方式、索引文件的寫法、lastmod 的使用邊界,以及分片之後如何维護和驗證。

站点运营

站点运营:sitemap 分片與索引文件,站点變大後地图该怎么拆

先確認是不是真的需要拆

搜尋引擎對單個 sitemap 文件有两項硬限制:URL 條數不超過 50000 條,未压缩体积不超過 50MB。如果站点只有几千個頁面,一個文件完全够用,拆得太碎反而增加蜘蛛获取地图文件的次數。真正需要拆分的情况通常是:栏目頁加内容頁已经超過五萬條;正文里图片、视频等條目多,單文件体积先撞上限;或者站点由多個子站、多語言目錄组成,希望分開观察。

三種常见的分片方式

  • 按栏目拆:新闻、产品、問答各一份,和站点结构一致,後續增删栏目时改動最小。
  • 按内容類型拆:文章、商品、标簽聚合、作者頁分開,方便單獨控制哪些類型值得提交。
  • 按時間拆:按月或按季度切片,常见于更新量大的资讯站,最新一份文件小、變動频繁,舊文件基本不動。

實际站点往往是混合使用,比如「产品-2024」「文章-2025-01」,命名保持可讀,出問题时能在服務器日誌里一眼認出来。

索引文件怎么寫

sitemap 索引文件本身不是頁面清單,它只列出子地图的地址和最後修改時間,不能把普通 URL 混進去。每個子地图都必须能被正常訪問、返回 200 狀態碼,且内容是有效的 XML。索引文件同样有數量上限,一般支持最多 50000 個子地图,绝大多數站点遠達不到。

一個常见的誤操作:把索引文件提交给搜尋引擎,却在 robots.txt 里把子地图路径整段屏蔽。结果是索引讀到了,子地图全部取不到。

lastmod 不是随便寫的

lastmod 表示這份文件里内容的最後實质性修改時間。模板改版、广告位調整、頁脚換文案這類不影响正文的改動,不需要刷新 lastmod;否則每次全站更新,蜘蛛都會按「有新内容」来處理,白白消耗抓取预算。如果站点無法准确给出時間,宁可不寫這個字段,也不要统一寫死成当天日期。

分片之後的日常维護

  1. 新增内容落到對應的子地图里,避免出現一份「其他」文件無限膨胀。
  2. 下线的頁面從地图中移除,不要留着一堆 404、410 的舊地址。
  3. 栏目合並或迁移时同步調整子地图,並在 robots.txt 的 Sitemap 指令里更新索引地址。
  4. 定期用日誌確認地图文件的抓取情况:返回碼、抓取频次、有没有長期取不到的文件。

几個容易被忽略的细节

  • 地图里寫的地址要和线上最终地址完全一致,包括协议、主机名、大小寫和末尾斜杠。
  • 非 ASCII 字符、含參數的 URL 需要做轉义處理,別直接塞入原始中文。
  • 压缩包可以减小传輸体积,但解压後的体积仍然受限制。
  • 分片不是越多越好。几百個子地图會让蜘蛛把時間花在地图文件本身,而不是内容頁。

站点規模不大的时候,sitemap 只是补漏手段,重点還是靠内鏈和栏目结构把頁面暴露出来。等到确實需要分片,再按上面的思路整理一遍,通常比一次性推倒重来更省事。