抓取入口通常從哪里来
蜘蛛發現 URL 的入口主要有几類:站内連結、外部連結、Sitemap,以及歷史抓取记錄。Sitemap 不是收錄保證,但它能帮助爬虫更快知道哪些 URL 值得来看。当 Sitemap 索引文件本身能訪問,而里面引用的子地图存在問题,表面看提交正常,實际可用入口會少一截。
常见错配表現
- 索引里寫了十来個子地图,抓取日誌里只见到两三個。
- 某個子地图路径改過,索引里仍留着舊地址。
- 子地图返回 301、404 或 403,但索引文件本身是 200。
- 子地图所在目錄被 robots.txt 的規則誤拦。
- 压缩文件未正确声明類型,或未压缩却按 gzip 處理。
按顺序核對
- 先確認索引文件可訪問:在無登入態下請求,看狀態碼、Content-Type 和响應体是否完整。
- 逐個請求子地图:索引里有几條就取几條,记錄狀態碼、响應大小和最终地址,不要只抽查一两個。
- 检查路径一致性:大小寫、结尾斜杠、协议與域名是否與线上實际路径一致。Sitemap 中的 URL 對大小寫敏感,多一個斜杠可能落到另一個地址。
- 检查 robots.txt:確認 Sitemap 指令寫的是索引地址,同时没有把子地图目錄整体禁止抓取。
- 核對响應头:子地图若為 .gz,確認 Content-Type 為 application/x-gzip 或 application/gzip,並确保服務器不會對它二次压缩。
- 用抓取日誌反查:看蜘蛛是否請求過索引和子地图,狀態碼分布如何,是否在某個子地图上频繁失敗或長時間不訪問。
几個容易忽略的细节
數量與体积上限
單個 Sitemap 建议不超過 5 萬條 URL,未压缩时不超過 50MB。超出後應拆分為多個子地图,再用索引统一引用。拆分时不要把同一批 URL 重复放進多個子地图,重复入口會浪費抓取配額,也让統計變得混乱。
lastmod 不要随意刷
lastmod 记錄的是内容真實修改時間。如果每次部署都批量更新為目前時間,短期可能增加抓取,長期會让這個字段失去參考價值。核對分片时,重点應放在子地图能否訪問、URL 是否完整,而不是把時間戳当作調度開關。
索引只放子地图,不混放頁面 URL
sitemap index 的 sitemap 标簽里應指向子地图文件,不要直接寫頁面 URL。混放容易導致解析失敗,或部分條目被忽略。
與内鏈和服務器稳定性配合
Sitemap 解决的是告知,内鏈解决的是可達。如果一個頁面只在 Sitemap 里出現,站内没有任何連結指向它,爬虫即使抓取到,也不容易持續回訪。建议關键頁面至少有導航、列表或相關推荐中的一條内鏈。服務器方面,子地图請求也應保持稳定响應,频繁超时會让爬虫降低對這類入口的訪問频率。
提示:Sitemap 只是入口线索,不能替代内鏈结构,也不意味着提交後一定被抓取或收錄。用抓取日誌驗證實际請求,比盯提交狀態更有意义。
小结
先保證索引文件被正确讀取,再逐個確認子地图可訪問、路径一致、编碼正确,最後用抓取日誌對照實际請求。三步做完,多數提交了但没被抓的入口缺口,都能定位到具体位置。