常见问题

蜘蛛池入口页的 Content-Type 不是 text/html:搜索蜘蛛还会解析里面的链接吗

蜘蛛池入口页的链接没被跟进,问题有时不在链接写法,而在服务器返回的 Content-Type。本文说明 text/html、text/plain、application/json 等类型对解析链接的影响,列出伪静态、脚本输出、模板后缀三类常见踩坑,并给出自查与修正方法。

常见问题

蜘蛛池入口页的 Content-Type 不是 text/html:搜索蜘蛛还会解析里面的链接吗

很多人做蜘蛛池入口页时,把精力都花在“链接怎么写、写多少条”上,却忽略了一个更底层的问题:服务器返回的 Content-Type 是否正确。这个响应头决定了抓取程序把页面当成“网页”还是“一段文本”。如果它不对,页面里写得再清楚的链接,也可能只是普通字符串。

Content-Type 决定了页面被当成什么解析

浏览器和搜索蜘蛛拿到一个 URL,第一步先看响应头里的 Content-Type,再决定用哪种方式解析内容。常见几种情况:

  • text/html:正常网页,a 标签里的 href 会被当作链接解析和跟进。
  • text/plain:按纯文本处理,链接只是普通文字,通常不会被当成可抓取的 URL。
  • application/xhtml+xml:按 XHTML 解析,链接一般仍然有效。
  • application/json、application/xml、text/xml:按数据文件处理,里面的 a 标签不会被识别成链接。
  • 缺少 Content-Type 或没带 charset:中文容易出现乱码,解析结果不稳定,链接也容易被截断。

入口页最常见的三种踩坑

1. 伪静态规则把 .html 指到了错误的后端

很多入口页是伪静态的。如果 rewrite 规则把 .html 请求转发给了一个返回 JSON 或纯文本的接口,响应头就会变成 application/json。页面看着有内容,实际对抓取端来说是一份数据文件。

2. 动态脚本没有显式设置头部

PHP、Python 等脚本默认输出 text/html,但如果前面有额外的输出,或者用了框架自带的 JSON 响应方式,头就变了。建议在输出 HTML 之前显式声明一次,不要依赖默认值。

3. 模板文件后缀不常见,被服务器按默认类型返回

有些站点把入口页存成 .tpl、.txt、.dat 再通过规则输出。如果服务器没配好对应类型,返回的可能是 text/plain。这种情况下浏览器里看到的是一堆带标签的纯文本,链接自然也不会被跟进。

怎么快速自查

  1. 用命令行只看响应头,确认状态码是 200,且 Content-Type 是 text/html。
  2. 浏览器打开入口页,查看网页源代码或响应信息,看类型和编码是否正常。
  3. 把入口页和一个正常页面做对比:如果入口页返回 200,但抓取日志里始终没有目标 URL 的记录,就要怀疑解析环节。
  4. 检查源码里的链接是不是真的写成了 a 标签,而不是按钮、脚本或注释里的文字。

修正方向

  • 静态页:确认 .html、.htm 后缀被正确映射成 text/html。
  • 动态页:在输出前显式设置头部和字符集,避免和模板里的 meta charset 冲突。
  • 反向代理或 CDN:检查是否改写了 Content-Type,尤其是启用了“自动转换”类功能时。
  • 改完后重新抓一次,先确认头部正确,再观察链接是否被跟进。

头部正确了,链接还是没被跟进怎么办

按顺序排除:页面是否有 noindex、链接是否带了 nofollow、链接是否靠 JavaScript 动态插入、链接是否写在注释或脚本块里、页面是否必须登录才能看到。这些属于“能不能解析”的问题;而抓取频次、抓取预算属于“愿不愿意抓”的问题。两类问题最好分开排查,不要在同一个环节反复改。

提醒:Content-Type 是最容易被忽略、也最容易验证的一项。排查抓取问题时,先花两分钟确认头部,往往比反复调整链接写法更有效。