聊 URL 发现的时候,注意力通常放在“链接写在哪里”。但对搜索蜘蛛来说,拿到地址只是上半程,能不能真的请求到这个地址才是下半程。DNS 解析、证书、访问控制这几环任意一个出问题,入口就变成一扇上了锁的门:地址在页面里写得清清楚楚,蜘蛛却只能停在门外。
链接存在,不等于入口可用
URL 发现其实分两步走。第一步是从页面、Sitemap、外链等来源拿到地址;第二步是对这个地址发起实际请求。第一步基本在站内可控,第二步则取决于服务器和网络环境。不少站点的问题压根不在内链结构上,而在第二步被拦住了,于是服务器日志里只有“发现”,没有“抓取”。
三类常见的中断点
解析与连接层
DNS 记录缺失、解析指向早已下线的 IP、不同地区节点解析结果不一致,都会让蜘蛛连接失败。更隐蔽的一种是源站只对特定机房或特定地域放行,异地节点直接超时。这类问题在本地浏览器里往往看不出来,因为你自己那条解析路径可能是正常的。
证书与协议层
证书过期、证书链不完整、只有 www 配了证书而裸域没有、HTTP 与 HTTPS 混用,都会把入口变成一连串跳转。抓取路径被拉长,稳定性也跟着下降。证书问题有个特点:页面在部分浏览器里能打开,用户几乎无感,但抓取端的失败率可能已经很高。
访问控制层
- robots.txt 里误写了 Disallow,把整段目录挡在外面;
- WAF 或安全插件把搜索蜘蛛的 UA 当作恶意爬虫直接拦截;
- 需要登录、验证码或人机校验才能访问的页面;
- 按 IP 限流,短时间多次请求后返回 403、429;
- 地域封锁,只对部分地区开放访问。
这些策略本身是为了防攻击,但误伤概率并不低。判断方法很直接:在服务器日志里筛出蜘蛛 UA 的请求,看返回码是 200,还是成片的 403、429、503。
排查顺序:从外到内
- 用命令行工具直接请求入口 URL,记录状态码和完整跳转链,不要依赖本地缓存;
- 检查 robots.txt 是否存在误伤的 Disallow 规则,以及是否误指向了测试环境;
- 翻一遍 CDN 与 WAF 规则,确认没有把爬虫类 UA 或高频访问整体拦截;
- 对照服务器日志,比较蜘蛛请求与普通用户请求的返回码差异;
- 确认证书覆盖的主机名与跳转目标一致,避免跳到一个没有证书的域名上。
让入口长期可用的几个习惯
- 给证书设置到期提醒,别等到过期当天才发现;
- 改版、换服务器、切换 CDN 前后,各测一次核心入口的可达性;
- 对 403、429、503 这类状态码单独做监控,而不是只看整体可用率;
- 保留一份结构清晰的 Sitemap,作为入口出现异常时的备用通道;
- 变更防火墙或限流规则时,顺手确认一下蜘蛛的抓取是否受影响。
URL 发现的难点,往往不在“有没有写链接”,而在链接走到门口时,门是不是开着的。