聊 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 發現的难点,往往不在“有没有寫連結”,而在連結走到门口时,门是不是開着的。