做蜘蛛池的人常有一個惯性思维:只要入口頁被搜尋蜘蛛抓到,目标 URL 迟早會被請求。其實入口頁只解决了一件事——让搜尋蜘蛛知道這個 URL 存在。它到了目标 URL 门口能不能進去,取决于目标 URL 自己返回什么、robots.txt 怎么寫、有没有權限校驗。下面把几種“带到门口却被拦住”的情况拆開讲。
先把發現 URL 和抓取 URL 分開
發現和抓取是两個獨立环节。入口頁上的連結负责發現,URL 進入待抓队列後,真正被請求时才會遇到 robots.txt 規則、HTTP 狀態碼、登入態、防火墙這些门槛。任何一环说不,前面的入口頁做得再细也没用。
robots.txt 拦截:最常见也最容易被忽略
- 整站 Disallow: /:搜尋蜘蛛可能仍然從入口頁發現了連結,但不會去請求,收錄無從谈起。
- 只拦了某個目錄:如果目标 URL 正好落在被拦目錄内,情况同上;如果只是同域其他目錄被拦,目标 URL 一般不受影响。
- Allow 和 Disallow 同时命中:多數搜尋蜘蛛按最長匹配優先處理,規則寫得不嚴谨时,结果會和你的预期相反。
- robots.txt 返回 404 或 5xx:404 通常视為無限制,5xx 則可能被当成临时故障而收紧抓取,两種影响完全不同。
登入墙、付費墙與權限校驗
目标 URL 需要登入才能訪問,或者對未登入用戶返回 401、403,搜尋蜘蛛拿到的就是拒绝頁,頁面上没有正文,也就没有可索引的内容。常见表現是:日誌里能看到蜘蛛来抓過,但索引里迟迟不出現,或者标题、摘要是空的。
還有一種更隐蔽的情况:程序對特定 UA 或未携带 Cookie 的請求返回 200,但内容是“請登入”的提示頁。這種软拦截不报错,排查起来反而更費劲。
其他容易踩到的门槛
- 429 或频繁驗證碼:抓取频率一高就被限流,蜘蛛會降低甚至暫停對该域的抓取。
- WAF 或 CDN 規則:把搜尋引擎的 IP 段誤判為異常流量,直接返回拦截頁。
- 地区或 IP 限制:只對特定地域開放,而蜘蛛的抓取节点不在白名單内。
- 纯前端渲染:HTML 里没有正文,只有空壳,蜘蛛不执行脚本或执行後拿不到内容。
可以按這個顺序自查
- 用搜尋蜘蛛的 UA 請求一次目标 URL,看真實返回的狀態碼和正文,不要只看浏览器里的效果。
- 打開目标 URL 所在域的 robots.txt,確認路径是否被 Disallow 命中,注意通配符和最長匹配。
- 检查是否存在登入態、Referer、Cookie 或地域带来的訪問差异。
- 在服務器日誌里核對蜘蛛到達次數和返回碼,確認是“没来”還是“来了被拒绝”。
- 確認真實問题出在目标 URL 一侧之後,再回头調整入口頁,顺序不要反過来。
入口頁能提高 URL 被發現的概率,但無法绕過目标 URL 自身的訪問限制。先把“能不能抓”解决掉,再谈“怎么被發現”。
總结一句:入口頁是引路的,不是開鎖的。目标 URL 存在訪問门槛时,優先處理 robots.txt、權限校驗和拦截規則,比繼續堆入口頁數量更有意义。