在蜘蛛池和站点运营的日常排查里,有一類問题很容易被忽略:搜尋蜘蛛的抓取日誌里明明有记錄,但抓到的是空白頁、403,或者干脆什么都没留下。追到最後,往往不是服務器挂了,而是 robots.txt 或 meta robots 把爬虫挡在了门外。下面梳理几個常见設定問题,以及對應的排查思路。
先分清:robots.txt 拦的是抓取,不是發現
搜尋引擎處理一個 URL 大致分两步:先發現(通過外鏈、sitemap、蜘蛛池入口等渠道知道這個 URL 存在),再抓取(真正請求頁面内容)。
robots.txt 的作用点在第二步。一個 URL 被寫進 Disallow,搜尋引擎通常仍然可能知道它存在,但會放弃或减少對它的内容抓取。對蜘蛛池来说,這意味着:如果入口頁被自己的 robots.txt 屏蔽,搜尋蜘蛛就不會来讀這個頁面,頁面上挂着的外鏈 URL 自然也难以通過這條路径被發現。
把 robots.txt 当成開關时,要记住它只能影响“抓不抓”,不能决定“知不知道”。
几個高频的設定错誤
1. 整站 Disallow: /
測試环境上线时留下的規則、模板里預設寫入的規則,都可能让整站被屏蔽。表現是搜尋蜘蛛訪問任何頁面都返回 200,但日誌里几乎没有後續抓取,或者只抓了 robots.txt 本身。
2. 屏蔽了 CSS、JS 等静態资源
這類屏蔽不會直接影响 URL 發現,但會影响搜尋引擎對頁面的渲染判断。如果蜘蛛池入口頁的内容和連結依赖 JS 渲染,屏蔽 JS 可能導致评估到的頁面内容與實际不符,間接影响抓取意愿。
3. 想用 robots.txt 阻止收錄
Disallow 並不能可靠地阻止收錄。被屏蔽的頁面如果外部有連結指向,仍可能以無摘要的形式出現在结果里。要阻止索引,通常應该让頁面可以被抓取,再用 noindex,而不是直接屏蔽抓取。
4. robots.txt 自身返回異常
- 返回 404:搜尋引擎一般视為“没有限制”,可以正常抓取全部内容;
- 返回 5xx:搜尋引擎可能暂时降低抓取频率,等恢复後再来;
- 返回 HTML 頁面或跳轉:規則無法被正确解析,效果不可预期。
meta robots 和 X-Robots-Tag 的区別
這两個是頁面級的指令。常见组合是 noindex, nofollow:既不索引目前頁,也不跟随頁面上的連結。對蜘蛛池入口頁来说,加上 nofollow 等于主動切断了向外传递 URL 的路径;只加 noindex 則仍然可以跟随連結。
另外,HTTP 响應头里的 X-Robots-Tag 作用與 meta 标簽類似,常用于非 HTML 文件(如 PDF)。排查时不要只看 HTML 源碼,也要看响應头。
一份可以照着走的排查清單
- 直接訪問 域名/robots.txt,確認返回 200 且内容是纯文本;
- 检查是否有 Disallow: / 或覆盖了蜘蛛池入口頁目錄的規則;
- 確認没有誤屏蔽 /js/、/css/ 等必要资源(若入口頁依赖渲染);
- 查看入口頁 HTML 源碼和响應头,確認没有 noindex、nofollow;
- 用抓取日誌核對:搜尋蜘蛛是否真的請求過入口頁,返回碼是多少;
- 如果日誌里连入口頁都没有,再回头查 CDN、WAF、UA 黑白名單等更前端的拦截。
處理建议
發現是 robots.txt 或 meta 指令導致的抓取缺失时,改完規則不要期待立刻见效。搜尋引擎重新讀取 robots.txt、重新评估頁面都需要時間,抓取频率的恢复通常也是逐步的。可以做的是:保持入口頁可訪問、内容有實际更新、结构稳定,让搜尋蜘蛛下次来时能顺利讀到連結。
抓取被拦住和頁面质量不够,是两類不同的問题。先排除前者,再讨论後者,排查效率會高很多。