当站点只有几百個頁面时,一個 sitemap.xml 足够用。但 URL 數量增長到几萬甚至几十萬,單個 Sitemap 會碰到條數和体积上限,文件本身也會變得难维護。這时需要 Sitemap 索引文件,把多個 Sitemap 分片组织成一個清單入口。
先確認單個 Sitemap 的邊界
常见規范里,單個 Sitemap 文件最多包含 50,000 條 URL,未压缩体积不超過 50MB。超過後,蜘蛛可能只讀取到一部分,或者直接忽略文件。這里说的体积通常按解压前計算,所以把 sitemap.xml 做成 gzip 並不能绕開條數限制。
如果你的站点已经接近這些數字,不要繼續往一個文件里塞。拆分成多個文件,再用索引文件统一指向,是更稳妥的做法。
Sitemap 索引文件長什么样
Sitemap 索引文件本身不包含頁面 URL,只列出各個 Sitemap 分片的地址。它像一個目錄頁,蜘蛛打開索引後,再按需讀取下面的分片。
- 一個索引文件最多可以包含 50,000 個 Sitemap 文件地址,同样有 50MB 未压缩体积限制。
- 索引里通常只放 Sitemap 文件,不再嵌套另一個索引文件,层級太深會增加蜘蛛的理解成本。
- 索引文件可以放在站点根目錄,也可以和分片放在同一目錄,但地址要稳定。
在 robots.txt 或搜尋资源平台提交时,提交索引文件地址即可,不需要把每個分片都單獨提交一遍。
分片可以怎么拆
按目錄或内容類型拆
這是最容易维護的一種方式。比如文章、商品、专题頁、帮助文档各做一個分片。蜘蛛讀取某個分片时,拿到的是一類 URL,更新和排查都更清楚。
按更新時間拆
如果站点每天新增大量内容,可以按月或按周生成分片,舊分片保持不動,新分片持續追加。這样索引文件里始终只有有限几個地址,更新时只替換對應分片。
按語言或站点版本拆
多語言站点可以按語言目錄拆分,不同國家或地区的站点也可以各自维護分片。避免把全部 URL 混在一個文件里,導致某一類頁面出問题时影响整個清單。
分片命名與更新节奏
分片文件名建议保持稳定,例如 sitemap-articles-1.xml,而不是每次更新都換成带時間戳的新名字。频繁改名會让蜘蛛不断發現新地址,舊地址又變成無效入口,增加無意义的抓取。
- 分片内容更新时,直接替換文件内容即可,文件名和路径不變。
- 如果必须新增分片,可以在索引文件里追加,舊分片繼續保留一段時間。
- 刪除分片前,先確認里面的 URL 已经通過 404、301 或其他方式處理,不要突然让大量地址從清單里消失。
Sitemap 只是清單,不是抓取路径
Sitemap 能帮助蜘蛛發現 URL,但它不保證蜘蛛一定抓取,也不决定頁面的權重。真正影响蜘蛛走到哪里、停留多久的,仍然是站内連結结构。重要頁面應该從首頁、栏目頁、相關推荐等位置有正常的内鏈指向,而不是只躺在 Sitemap 里。
另外,分片只是清單,不是抓取路径。蜘蛛仍會结合内鏈、頁面更新频率和服務器响應来安排抓取。Sitemap 分片再整齐,如果頁面本身返回错誤、加载很慢,抓取效果也不會好。
用日誌检查分片是否被讀到
提交索引文件後,可以在服務器日誌里观察蜘蛛對索引和分片的請求。重点看几個信号:
- 索引文件是否被請求,返回狀態是否正常。
- 分片是否被逐個讀取,還是只讀了前面一两個。
- 分片里的 URL 是否在後續几天里出現被抓取记錄。
如果索引被讀、分片却很少被訪問,先检查分片地址是否可訪問、是否被 robots.txt 誤屏蔽,再检查分片体积和條數是否超出限制。不要反复提交同一個文件来催促,先排除文件本身的問题。
把 Sitemap 索引與分片当作 URL 清單来维護:文件要稳定、分片要清楚、地址要可訪問。它不能代替内鏈,也不能承诺收錄,但能让蜘蛛更省力地發現你的頁面。