站点 URL 上萬以後,單個 Sitemap 很快就塞不下了。這时通常會用分片文件加一個索引文件来组织。它看起来只是文件拆分,實际上會影响蜘蛛顺着入口找到分片、再從分片讀到具体 URL 的路径。分得好,蜘蛛少绕路;分得乱,入口在,後面的路却断断續續。
索引文件和分片各管什么
Sitemap 索引文件本身不直接列頁面 URL,它只列分片文件的位置和最後修改時間。蜘蛛先讀索引,再按里面的地址去請求分片,最後從分片里拿到 URL。這個层級要保持简單,索引指向分片就够了,不要再做多层索引套索引,否則蜘蛛每多一跳都要多花一次請求。
- 單個 Sitemap 文件建议不超過 50,000 個 URL,未压缩体积不超過 50MB。
- 索引文件同样有數量和体积上限,通常也是 50,000 條和 50MB。
- 分片和索引都應返回正常的 200 狀態,内容類型為 XML。
- 索引里的 lastmod 要跟分片實际更新時間對得上,不要随手寫。
分片按什么维度切更顺
分片不是越细越好。常见做法是按栏目、頁面類型或更新時間切分。比如商品詳情一個分片、文章一個分片、专题聚合一個分片。這样蜘蛛抓取时,分片内部的 URL 主题接近,抓取节奏也更容易稳定。如果按時間切,注意別让舊分片長期不更新却反复出現在索引里,蜘蛛每次来都讀一遍没有變化的文件,也是無谓消耗。
- 每個分片只放規范化後的绝對 URL,统一协议、域名、大小寫和结尾斜杠。
- 同一個 URL 不要出現在多個分片里,减少蜘蛛重复判断。
- 分片内 URL 數量不要顶到上限,留一点余量方便後續追加。
- 分片文件名保持稳定,避免频繁改路径,让已發現的舊分片變成死鏈。
入口怎么给,蜘蛛才知道去哪讀
索引文件生成後,需要在 robots.txt 里声明它的地址,也可以同时提交给搜尋引擎的站長平台。robots.txt 里寫 Sitemap 时用完整绝對地址,不要寫相對路径。如果站点有多個子域或移動站,每個可抓取的主机最好都有自己的 Sitemap 入口,別把不同主机的 URL 混進同一個分片。
声明之後,還要看日誌確認蜘蛛确實来讀了索引和分片,而不是只訪問了索引文件就离開。若索引正常但分片長期没有請求,優先检查分片地址是否被 robots 規則挡住、是否返回了 404 或 403,以及索引里的地址有没有寫错。
几個容易让路径断掉的细节
- 分片里混入重定向 URL 或已刪除頁面,蜘蛛跟着跳几次後可能降低對该分片的信任。
- 索引文件指向一個不存在的分片,或分片被防火墙拦截,都會让後續抓取路径中断。
- 分片更新後,索引里的 lastmod 没有同步,蜘蛛可能按舊時間判断,减少回訪。
- URL 參數顺序、大小寫、http 與 https 混用,會让同一頁面被拆到不同分片里。
- 用 gzip 压缩分片可以节省带宽,但要确保服務器返回正确的 Content-Encoding。
Sitemap 是给蜘蛛递线索,不是收錄保證。索引和分片组织得再整齐,頁面本身如果内容單薄、内鏈孤立,抓取路径仍然走不深。
最後回到站点运营的视角:Sitemap 索引與分片是一套需要長期维護的基础设施。每次栏目調整、URL 規則變更、域名迁移,都要同步检查索引里的分片地址是否還有效。定期從服務器日誌里看蜘蛛讀了哪些分片、哪些分片一直冷着,比反复提交入口更有用。