抓取入口通常从哪里来
蜘蛛发现 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 只是入口线索,不能替代内链结构,也不意味着提交后一定被抓取或收录。用抓取日志验证实际请求,比盯提交状态更有意义。
小结
先保证索引文件被正确读取,再逐个确认子地图可访问、路径一致、编码正确,最后用抓取日志对照实际请求。三步做完,多数提交了但没被抓的入口缺口,都能定位到具体位置。