搜尋抓取

Sitemap 索引與分片:URL 清單上萬條之後怎么分批交给蜘蛛

当站点 URL 數量上萬,單個 sitemap 會變得难以维護:生成慢、体积大、出错要整份重来。本文讲清索引文件與分片各自的作用、切分维度怎么選、交给蜘蛛的几種声明方式,以及子文件 404、清單與线上地址不一致、lastmod 滥用等常见問题,帮你把 URL 清單管得稳定、可核對。

搜尋抓取

Sitemap 索引與分片:URL 清單上萬條之後怎么分批交给蜘蛛

站点只有几百個 URL 的时候,一個 sitemap.xml 寫完就結束。等到商品、文章、栏目、标簽加在一起上萬條,單個文件會變得难维護:生成慢、体积涨、一處出错整份重来。這时更稳妥的做法是拆成 sitemap 索引加若干分片,把 URL 清單分批交出去。

索引文件在鏈路里的位置

索引文件本身不列 URL,它只列出各個分片文件的位置。蜘蛛拿到索引後讀取分片,再從中取 URL。它的價值在于三点:單文件体积可控、出错时只需重新生成對應分片、不同類型的頁面分開放,便于分別观察抓取情况。

分片时绕不開的几條邊界

  • 單個 sitemap 文件通常不超過 5 萬條 URL,未压缩体积不超過 50MB;
  • 索引文件自身同样受体积與條目數限制,子文件數量有上限;
  • 分片文件必须與索引里寫的地址完全一致,包括协议、域名、路径和大小寫;
  • 压缩交给服務器處理更省事,压缩後的文件名要與索引里的地址對得上。

按什么维度切分

切分方式没有标准答案,但要選一個長期稳定的维度,否則每次生成都會全盘變化。

  • 按内容類型:商品、文章、栏目各一個分片,問题定位最快;
  • 按目錄或分区:适合多語言、多地区站点;
  • 按更新時間:适合日更量大的站点,老頁面沉到歷史分片,不必频繁重抓;
  • 不建议按抓取频率或頁面權重切分,這類指标不稳定,分片會天天變動。

怎么把它交给蜘蛛

索引文件放在根目錄後,至少用一條路径明确声明。常见做法是在 robots.txt 里寫一行 Sitemap 指令指向索引地址,同时在站長平台手動提交一次,方便尽早發現。如果站点有多個域名或子域,每個域名單獨声明自己的索引。

需要留意的是,声明只是提供线索,不代表蜘蛛會把所有分片讀完。分片數量越多,越需要靠站内連結把重要頁面再兜一层。

更新节奏與几個常见坑

  1. 子分片被刪除或改了地址,索引還指向舊路径,蜘蛛讀到的是一串 404;
  2. 把 noindex、需要登入、參數重复的頁面寫進清單,白白消耗抓取次數;
  3. 清單地址與线上實际地址不一致,多一個斜杠或大小寫不同都會被当成另一個 URL;
  4. 每次生成都改動全部 lastmod,會让更新信号失去參考價值;
  5. 分片拆得太细,几千個文件反而增加讀取成本。

清單之外,還是要有路

Sitemap 更像一份补充清單,它告诉蜘蛛存在哪些地址,但頁面之間怎么连、哪些更要紧,仍然由内鏈结构表達。清單里出現一個地址,而站内没有任何連結指向它,這個頁面在抓取和评估上都會偏弱。

把 sitemap 当發現渠道,把内鏈当路径;两者對不上时,蜘蛛更愿意沿着有連結的路走。

什么时候该回头检查

抓取量突然下降、某個分片的抓取數長期為零、索引里的條目比實际頁面多出很多,都是值得回头核對的信号。先把清單和线上頁面做一次比對,確認地址、狀態碼和數量對得上,再考虑分片维度是否需要調整。站点结构變化不大的时候,保持這套東西稳定,比频繁改来改去更有用。