很多做蜘蛛池的人會遇到一種情况:入口頁的訪問日誌里明明有搜尋蜘蛛的 IP 和 User-Agent,但目标 URL 的日誌里始终没有對應记錄。于是就會怀疑,是不是蜘蛛池没起作用,或者目标 URL 被搜尋蜘蛛放弃了。其實,入口頁被抓和目标 URL 被抓是两件事,中間要经過連結解析、抓取調度、目标 URL 响應等多個环节。下面按常见排查顺序梳理一下。
先確認日誌是不是真的没记錄
第一步不是改代碼,而是把日誌看清楚。搜尋蜘蛛抓取目标 URL 时,請求會落在目标 URL 所在服務器的訪問日誌里,而不是入口頁服務器的日誌里。如果你只看入口頁日誌,当然看不到目标 URL 的抓取记錄。另外,如果目标 URL 前面有 CDN、反向代理或 WAF,日誌可能分散在多個地方,需要分別查看。
- 入口頁日誌:看搜尋蜘蛛是否来了、抓了哪個 URL、返回什么狀態碼。
- 目标 URL 日誌:看搜尋蜘蛛是否請求過目标 URL、請求時間、来源 referer、返回狀態碼。
- 如果目标 URL 接入了 CDN,優先看 CDN 的實时日誌或离线日誌,而不是源站日誌。
入口頁上的連結是否“可抓取”
搜尋蜘蛛跟進連結,通常依赖 HTML 里的 a href。如果入口頁把目标 URL 寫成纯文本、放在 JavaScript 事件里、用 iframe 嵌入、或者通過 JS 動態插入,蜘蛛不一定能發現。即使能执行 JS,也不等于一定會跟進。比較稳妥的做法是,在入口頁正文里放一個标准的、可点击的 a 标簽,href 直接寫目标 URL,不要額外加 nofollow,也不要用 onclick 拦截預設跳轉。
入口頁可以用 JS 做增强,但目标 URL 的發現入口最好保留在 HTML 里。
目标 URL 本身是否允许抓取
入口頁给了連結,目标 URL 也可能因為自身設定拒绝被抓。常见的有:目标 URL 的 robots.txt 禁止抓取;目标 URL 返回 404、410、503 或長時間 5xx;目标 URL 要求登入或驗證;目标 URL 做了跳轉鏈,最终落点又禁止抓取。這些情况下,搜尋蜘蛛可能来過,但抓取失敗,日誌里只有错誤狀態碼,看起来像“没来”。
抓取調度和優先級的影响
搜尋蜘蛛發現連結後,不會立刻、平均地抓取每個 URL。它有自己的調度逻辑,會參考入口頁權重、連結位置、目标 URL 歷史表現、服務器响應速度等因素。入口頁本身抓取频次低,或者目标 URL 過去经常超时,抓取就會被延後。這不是“蜘蛛池失效”,而是抓取资源分配的结果。
- 入口頁長期不更新,蜘蛛来訪频率可能下降。
- 目标 URL 响應慢,蜘蛛可能降低抓取频次。
- 同一入口頁放太多連結,單個連結被跟進的概率會下降。
可以做的調整
- 把目标 URL 放在入口頁正文靠前的位置,使用标准 a 标簽。
- 检查目标 URL 的 robots.txt、狀態碼、跳轉鏈,确保返回 200 且内容可訪問。
- 观察入口頁日誌里蜘蛛抓取的 URL 列表,確認目标 URL 是否出現在其中。
- 如果入口頁日誌里连目标 URL 都没出現過,優先检查連結寫法和頁面渲染方式。
- 如果入口頁日誌里出現過目标 URL,但目标 URL 日誌没有记錄,重点查 CDN、WAF、负载均衡和日誌采集。
別把“日誌没看到”直接等同于“没被抓”
有些日誌只记錄動態請求,静態资源或缓存命中可能不寫日誌;有些 CDN 預設只保留最近几天;有些服務器把日誌按小时切割,查看范围不對也會漏掉。排查时先扩大時間窗口,再確認日誌級別和采集方式。搞清楚是“没来抓”還是“抓了没记到”,後面的優化方向才不會跑偏。
總的来说,蜘蛛池入口頁有搜尋蜘蛛来訪,只說明入口頁被發現了。目标 URL 能不能被抓,還取决于連結是否可跟進、目标 URL 是否可訪問、抓取調度是否轮到它。按日誌逐层排查,比反复堆入口頁更有效。