很多人在搭蜘蛛池时,把注意力全放在連結、IP、内容上,却忽略了 robots.txt 和 meta robots 這两道闸门。它們對爬虫来说就是通行規則,配错了,入口頁可能连被抓取的机會都没有;配得太随意,又可能让蜘蛛把抓取预算耗在無關路径上。
先分清两件事:抓取與索引
robots.txt 和 meta robots 常被混為一谈,但它們管的不是同一件事。robots.txt 决定能不能抓,搜尋引擎讀到規則後,可能连頁面内容都不看;meta robots 决定抓到了之後怎么處理,比如是否收錄、是否跟随頁面上的連結。蜘蛛池的入口頁通常需要被抓取、被收錄,所以預設策略應该是放行,只有明确的例外才動手收窄。
robots.txt 在蜘蛛池里的常见誤用
不少池子為了让入口頁看起来干净一点,顺手寫上一句 Disallow: /,结果整站對所有搜尋蜘蛛關门。蜘蛛确實不来了,之前的铺垫也全部作废。另一種相反的情况是 robots.txt 本身返回 404 或 5xx,抓取端會按不同規則處理,長期異常還可能影响對整站的抓取节奏。
- 把 robots.txt 当隐私工具:寫進去的路径等于公開告诉別人這里有什么,真正的後台路径應该靠登入和權限控制。
- 用 302 跳轉或返回一段 HTML:抓取端期待的是纯文本,拿到別的内容容易被判定為異常。
- 只检查主域名的 robots.txt,忘了子域名:每個子域名有獨立的 robots.txt,多個入口域要分別核對。
- 文件名或路径大小寫不一致:Robots.txt、带多余斜杠的寫法,都可能被当成不存在的文件。
meta robots 與 X-Robots-Tag 的取舍
meta robots 寫在 HTML 的 head 里,常见取值有 index、noindex、follow、nofollow。入口頁一般寫 index,follow,让蜘蛛抓取並顺着連結往下走。如果某個入口頁只是中轉、不希望被收錄,可以用 noindex,follow,让蜘蛛繼續沿着連結爬到目标頁,但頁面本身不進索引。
需要注意的是,noindex 必须建立在頁面能被抓取的前提上。如果 robots.txt 已经 Disallow 了這個頁面,蜘蛛就不會去讀 meta 标簽,noindex 等于没寫,頁面仍可能因為外鏈而出現在结果里。
對于非 HTML 资源,比如 PDF、图片或接口返回的内容,meta 标簽寫不進去,這时可以用 HTTP 响應头 X-Robots-Tag 達到類似效果。
入口頁一般怎么配
- robots.txt 放行全站,只對确實不需要抓取的後台、測試、統計路径做 Disallow。
- 入口頁 head 中寫 index,follow,保持預設的抓取與跟随。
- 鏈向目标頁的連結不要加 rel="nofollow",除非你明确不想让蜘蛛繼續走。
- 分域名、分目錄的池子逐個检查,不要只测一個入口就認為全站一致。
- 改完規則後,直接抓取 robots.txt 驗證返回狀態與内容,確認没有被跳轉或拦截。
两個容易被忽略的细节
robots.txt 被中間层拦住
CDN、WAF 或限流規則如果拦住了 robots.txt 的請求,抓取端拿到的可能是 403 或 5xx。表現上不一定立刻掉抓取量,但時間一長會影响蜘蛛對整站的訪問节奏。把 robots.txt 加到白名單里是比較省事的做法。
規則改動後的生效時間
robots.txt 通常會被缓存一段時間,改完不會立即生效。如果你刚放開限制就想看到蜘蛛量回升,需要给它一点缓冲期,期間不要反复修改規則,频繁變動反而不利于观察真實變化。
把 robots.txt 和 meta robots 当成给爬虫看的說明书,而不是隐藏内容的工具。說明书越简單清晰,蜘蛛越不容易走错路。
最後提醒一句:這两項配置属于基础項,做好它們只是保證入口頁不被自己挡住,真正决定效果的是内容、連結结构和持續维護。發現蜘蛛量異常时,可以先確認這两道闸门是不是被誤關了,再去排查其他环节。