很多人在做蜘蛛池时,把精力都放在入口頁能不能吸引搜尋蜘蛛上,却忽略了一個前提:入口頁只负责“發現”,真正被讀取、被處理的是目标 URL 自己。日誌里出現了蜘蛛 UA,却看不到目标 URL 被抓成功的记錄,問题常常不在入口頁,而在目标 URL 的配置上。
先分清两件事:被發現和被抓取
搜尋蜘蛛顺着入口頁的連結走到目标 URL 时,會经歷几次判断:能不能訪問、返回什么狀態、内容是否需要渲染、這個地址是否允许被處理。任何一步不通過,這次抓取就停在半路,但入口頁那一侧的日誌可能看起来完全正常。
入口頁解决的是“蜘蛛怎么知道有這個 URL”,目标 URL 解决的是“蜘蛛来了以後愿不愿意讀”。两者是两套問题,排查时不要混在一起。
目标 URL 侧最常见的拦截点
1. robots.txt 與 meta robots
- 站点根目錄的 robots.txt 如果對蜘蛛 UA 做了 Disallow,蜘蛛可能连請求都不會發出,日誌里自然也看不到。
- 頁面 head 里的 meta robots 寫了 noindex,或者 X-Robots-Tag 响應头带了 noindex,頁面會被抓取但不會被保留。
- 有些站点對非浏览器 UA 單獨做了規則,測試时用普通浏览器能打開,不代表蜘蛛能拿到同样结果。
2. 狀態碼與跳轉
- 目标 URL 返回 404、410,說明這個地址在服務器端已经不存在,入口頁挂再多也没意义。
- 301 會改變最终落地地址;如果跳轉鏈太長,或最终地址又在 robots 里被禁止,抓取同样會中断。
- 返回 5xx 时蜘蛛通常會退避重试,短時間失敗不代表 URL 被放弃,但持續报错會降低抓取频率。
3. 内容加载方式
如果目标 URL 的核心内容依赖 JavaScript 渲染,而渲染资源被拦截、接口需要登入,或者首屏只有一個空壳,蜘蛛拿到的可能就是一個几乎没内容的頁面。這種“抓到了但等于没抓到”的情况,日誌里往往顯示 200,很容易被誤判為正常。
4. canonical 與重复地址
- 同一内容有多個地址(带參數、大小寫不同、结尾斜杠差异)时,canonical 指向哪個地址,會影响蜘蛛最终保留哪個版本。
- 如果入口頁指向的版本恰好是被 canonical 排除的那個,抓取行為本身没問题,但预期效果會落空。
一個可以照着走的自查顺序
- 先用支持自定义 UA 的工具模拟蜘蛛抓一次目标 URL,看响應碼和首屏 HTML 是否完整。
- 检查 robots.txt 和頁面級 noindex 設定,確認没有互相矛盾的規則。
- 確認跳轉鏈路的终点地址、狀態碼正常,且终点也没有被禁止抓取。
- 把日誌中的蜘蛛請求记錄與服務器訪問日誌對照,看請求到底有没有到達目标 URL。
- 核對 canonical、參數版本和站内連結,確認入口頁指向的是你希望被保留的那個地址。
几個容易被忽略的细节
- 登入墙與驗證碼:有些站点把蜘蛛也挡在了驗證頁,返回 200 但内容無效。
- CDN/WAF 規則:拦截頁通常也返回 200,需要看响應体而不是只看狀態碼。
- 為蜘蛛單獨放行:如果确實要放行,規則尽量寫在明确的段位里,避免影响到正常訪客。
把目标 URL 這一侧理顺之後,再看入口頁的連結是否被跟進,判断會清晰很多:入口頁负责把路口打開,目标 URL 负责把门打開,任何一邊拧着,抓取都會停在半路。