常见问题

入口页 HTTP 响应头设置不当,搜索蜘蛛还会正常发现目标 URL 吗

很多人排查 URL 发现问题只看正文、链接结构和 robots.txt,忽略了 HTTP 响应头。Content-Type、X-Robots-Tag、Content-Encoding 这些头部字段会直接影响搜索蜘蛛对页面的解析方式和链接追踪。本文梳理常见响应头错误、排查方法与修正原则。

常见问题

入口页 HTTP 响应头设置不当,搜索蜘蛛还会正常发现目标 URL 吗

排查蜘蛛池入口页的 URL 发现问题时,大多数人会去看正文、链接结构、robots.txt,却很少回头检查 HTTP 响应头。实际上搜索蜘蛛在解析一个页面之前,首先要根据响应头判断这个响应是什么、能不能用、要不要继续往下读。响应头写错,正文结构再规范也可能白费。

搜索蜘蛛是先读响应头,还是先读正文

抓取一个 URL 时,蜘蛛拿到的是完整的 HTTP 响应。它会先看状态码,再看 Content-TypeContent-EncodingX-Robots-Tag 这类头部字段,然后才决定用什么解析器处理正文。

也就是说,响应头决定了这段内容被当成什么,正文只决定里面有什么链接。如果头部把它当成图片、二进制流或者不可索引的资源,正文里的链接大概率不会被继续解析。

几类容易踩坑的响应头问题

Content-Type 写错或缺失

  • 返回的是 HTML,但 Content-Type 写成 text/plain 或 application/octet-stream,蜘蛛可能只当作纯文本处理,不再提取链接。
  • Content-Type 直接缺失,不同爬虫的容错能力不一样,有的能按 HTML 猜测,有的会直接跳过。
  • charset 与实际编码不一致,中文锚文本变成乱码。链接本身通常还能识别,但如果链接是中文路径或带中文参数,就可能解析失败。

X-Robots-Tag 误伤

X-Robots-Tag 写在响应头里,作用和 meta robots 类似。常见的情况是服务器或 CDN 统一加了一条 noindexnofollow,而运营只检查了页面里的 meta 标签,没有看响应头。

  • 带 noindex:页面本身不进索引,但抓取和链接发现通常还会继续。
  • 带 nofollow:页面可以被抓取,但页面上的链接可能不会被继续追踪,这会直接影响目标 URL 的发现。
  • 带 noarchive、nosnippet 之类,一般不影响 URL 发现,不用太紧张。

状态码和响应头内容互相矛盾

比如返回 200,但头部写着 Content-Length: 0;或者返回 200 却带着一段跳转指令。这类前后不一的响应会让蜘蛛难以判断页面是否真的可用,处理方式也因爬虫而异。更稳妥的做法是让状态码、响应头、正文三者保持一致。

压缩与分块传输异常

Content-Encoding 声明了 gzip,实际却没有压缩;或者分块传输被中途截断。蜘蛛拿到的内容是残缺的,链接可能只解析到一半。这类问题在日志里往往表现为抓取成功但发现量偏低,不容易第一眼看出。

怎么排查入口页的响应头

  1. 用不带浏览器特征的请求获取响应头,比如命令行工具直接请求,而不是只看浏览器开发者工具里经过前端处理的结果。
  2. 换一个和搜索蜘蛛接近的 User-Agent 再请求一次,确认没有被 CDN 或 WAF 返回不同的头部。
  3. 重点核对四项:状态码、Content-Type、Content-Encoding、X-Robots-Tag。
  4. 把入口页实际解析出的链接数量和你的预期对照一遍,确认没有漏掉目标链接。

修正时的几个原则

  • HTML 页面统一返回 text/html; charset=utf-8,并确保实际编码与声明一致。
  • 不要在全站或整个目录层面批量添加 X-Robots-Tag,需要限制时按路径或按页面精细设置。
  • 响应头、状态码、正文保持一致,别让蜘蛛在两个信号之间做猜测。
  • 改动后持续观察一段时间服务器日志里的蜘蛛抓取和链接发现情况,而不是改完就下结论。
响应头不是技术细节,它是蜘蛛理解页面的第一层信号。URL 发现出问题时,先确认这层信号没有写错,再去调链接结构和内容,能少走很多弯路。

需要说明的是,响应头配置正确只是让页面具备被发现的条件,最终是否抓取、抓取多少,仍然由搜索引擎按自己的策略决定,任何配置都无法保证收录或排名。