站点只有几百個 URL 的时候,一個 sitemap.xml 寫完就結束。等到商品、文章、栏目、标簽加在一起上萬條,單個文件會變得难维護:生成慢、体积涨、一處出错整份重来。這时更稳妥的做法是拆成 sitemap 索引加若干分片,把 URL 清單分批交出去。
索引文件在鏈路里的位置
索引文件本身不列 URL,它只列出各個分片文件的位置。蜘蛛拿到索引後讀取分片,再從中取 URL。它的價值在于三点:單文件体积可控、出错时只需重新生成對應分片、不同類型的頁面分開放,便于分別观察抓取情况。
分片时绕不開的几條邊界
- 單個 sitemap 文件通常不超過 5 萬條 URL,未压缩体积不超過 50MB;
- 索引文件自身同样受体积與條目數限制,子文件數量有上限;
- 分片文件必须與索引里寫的地址完全一致,包括协议、域名、路径和大小寫;
- 压缩交给服務器處理更省事,压缩後的文件名要與索引里的地址對得上。
按什么维度切分
切分方式没有标准答案,但要選一個長期稳定的维度,否則每次生成都會全盘變化。
- 按内容類型:商品、文章、栏目各一個分片,問题定位最快;
- 按目錄或分区:适合多語言、多地区站点;
- 按更新時間:适合日更量大的站点,老頁面沉到歷史分片,不必频繁重抓;
- 不建议按抓取频率或頁面權重切分,這類指标不稳定,分片會天天變動。
怎么把它交给蜘蛛
索引文件放在根目錄後,至少用一條路径明确声明。常见做法是在 robots.txt 里寫一行 Sitemap 指令指向索引地址,同时在站長平台手動提交一次,方便尽早發現。如果站点有多個域名或子域,每個域名單獨声明自己的索引。
需要留意的是,声明只是提供线索,不代表蜘蛛會把所有分片讀完。分片數量越多,越需要靠站内連結把重要頁面再兜一层。
更新节奏與几個常见坑
- 子分片被刪除或改了地址,索引還指向舊路径,蜘蛛讀到的是一串 404;
- 把 noindex、需要登入、參數重复的頁面寫進清單,白白消耗抓取次數;
- 清單地址與线上實际地址不一致,多一個斜杠或大小寫不同都會被当成另一個 URL;
- 每次生成都改動全部 lastmod,會让更新信号失去參考價值;
- 分片拆得太细,几千個文件反而增加讀取成本。
清單之外,還是要有路
Sitemap 更像一份补充清單,它告诉蜘蛛存在哪些地址,但頁面之間怎么连、哪些更要紧,仍然由内鏈结构表達。清單里出現一個地址,而站内没有任何連結指向它,這個頁面在抓取和评估上都會偏弱。
把 sitemap 当發現渠道,把内鏈当路径;两者對不上时,蜘蛛更愿意沿着有連結的路走。
什么时候该回头检查
抓取量突然下降、某個分片的抓取數長期為零、索引里的條目比實际頁面多出很多,都是值得回头核對的信号。先把清單和线上頁面做一次比對,確認地址、狀態碼和數量對得上,再考虑分片维度是否需要調整。站点结构變化不大的时候,保持這套東西稳定,比频繁改来改去更有用。