網站收錄

站点地图拆成多個分片後:索引文件寫错,URL 可能一直没被發現

頁面數量上来後,站点地图通常要拆成多個分片,再用索引文件串起来。索引文件的路径、层級或返回狀態只要有一處不對,爬虫可能只讀到索引、讀不到分片,URL 發現就断在這一层。本文整理常见寫法错誤、驗證方法和上线自查清單。

網站收錄

站点地图拆成多個分片後:索引文件寫错,URL 可能一直没被發現

頁面數量到几千、几萬以後,單個 XML 站点地图往往放不下,于是需要拆成多個分片,再用一個索引文件把它們串起来。問题也常出在這一步:分片本身没問题,索引文件的寫法或返回狀態有偏差,爬虫讀完索引却没有繼續讀分片,URL 發現就断在這里。

先確認什么时候需要拆

主流搜尋引擎對單個站点地图文件有大致相同的约束:未压缩文件通常不超過 50MB,單個文件包含的 URL 一般不超過 5 萬個。接近任一上限就该拆分。

  • 頁面量在數千以内,單文件基本够用,拆開反而增加维護成本。
  • 數量上萬,或單文件明顯變大(比如带了較長的 hreflang、图片、视频信息),建议按目錄或按頁型拆分。
  • 拆分维度最好和站点结构一致,比如商品頁一片、文章頁一片、栏目頁一片,出問题时容易定位。

索引文件的寫法要点

索引文件的根节点是 sitemapindex,每個子項里只放 loc(分片地址)和可選的 lastmod,不要出現頁面級的 url 节点,也不要寫 priority、changefreq 這類只属于頁面級站点地图的字段。
  • loc 必须是完整的绝對地址,包含协议和域名,不要用相對路径或 ../ 形式。
  • 分片地址要能直接返回 200,中間不要经過 302 跳轉、登入校驗或地域拦截。
  • 命名空間要和根节点匹配,複製模板时改错命名空間是常见原因。
  • 不要自我引用,索引文件里不要再把索引文件自己列進去。
  • lastmod 用统一的日期格式,不要同一批分片全部寫成同一個時間点,也不要用未来時間。

分片文件本身的几個坑

  • 压缩後的 .gz 文件,後缀、压缩方式和响應头里的 Content-Type 要對應,解压失敗等于没有内容。
  • 分片里的 URL 要和頁面上 canonical 指向的地址一致,否則相当于给爬虫提供了两套入口。
  • 單個分片不要超過 5 萬條或 50MB,超限时通常整份被忽略,而不是只丢掉多出来的部分。
  • 分片地址變更後,舊地址最好保留一段時間並返回 200 或 301,避免索引里残留失效路径。

怎么驗證分片到底有没有被讀到

索引文件被請求,不代表分片被請求。可以按下面几步核對:

  1. 在服務器日誌里篩選爬虫 UA,看它請求了哪些 sitemap 路径、狀態碼分別是多少。只有索引文件被訪問、分片一條日誌都没有,基本可以判断卡在索引层。
  2. 看搜尋资源平台里的站点地图报告,提交的分片是否顯示為已處理,有多少 URL 被發現。
  3. 用相同的 UA 模拟請求分片地址,確認返回的是 XML,而不是首頁 HTML、驗證頁或空内容。
  4. 對比分片里的 URL 數量和报告里發現的數量,差距過大时回到前两步繼續查。

站点地图只是發現渠道之一

站点地图的作用是告诉爬虫這里有這些 URL,它不负责保證被抓取,更不保證被收錄。發現之後還要经過抓取、解析、质量判断几個环节。

  • 内鏈是最稳定的發現渠道,重要頁面應该能從首頁通過几次点击到達,不要只依赖站点地图。
  • 外部連結能带来發現,但新頁面數量少、到達慢,适合作為补充。
  • 如果用蜘蛛池之類手段提高抓取频次,要注意它影响的只是抓取請求量,對 URL 能否進入索引作用有限,頁面质量、重复度和站点结构才是决定性的。

上线前可以照着走的自查清單

  1. 索引文件能被直接訪問,返回 200 和 XML 内容。
  2. 每個分片地址都返回 200,内容可以正常解析。
  3. 分片數量與頁面分组數量一致,没有漏掉某一類頁型。
  4. 分片里的 URL 與 canonical、内鏈指向保持一致。
  5. 站点地图入口已寫進 robots.txt,並在搜尋资源平台提交。
  6. 上线後一周内看一次日誌,確認分片确實被抓取過。

站点地图是辅助工具,不是收錄開關。把它寫對、驗對,能让 URL 更容易被發現;發現之後能不能進入索引,還是要回到頁面本身的质量和站点结构上。