做蜘蛛池的人常把注意力放在域名、IP、入口頁數量上,却容易忽略一個最基础的文件:robots.txt。它和頁面 head 里的 meta robots、HTTP 响應头里的 X-Robots-Tag 一起,构成了對爬虫的准入說明。配置不当,入口頁可能连被訪問的机會都没有;配置過度,也可能把真正想引導的路径一起堵死。
三種 robots 指令,管的不是同一件事
- robots.txt:放在域名根目錄,按 User-agent 分组,用 Disallow / Allow 控制哪些路径可以被抓取。它只影响抓取行為,不决定内容是否被使用。
- meta robots:寫在 HTML 的 head 中,如 noindex、nofollow。前提是頁面已经被抓取,爬虫才能讀到這條指令。
- X-Robots-Tag:寫在 HTTP 响應头里,作用與 meta robots 類似,對非 HTML 文件同样有效。
關键差別在于:Disallow 是別来抓,noindex 是抓了也別用。两者混用,很容易出現自相矛盾的结果。
入口頁常见的三類誤配
1. 用 Disallow 来藏入口頁
有人不希望入口頁被人看到,就在 robots.txt 里寫 Disallow: /,同时又指望蜘蛛来訪問。结果是爬虫在门口就被劝退,頁面根本不會被讀取,寫在頁面里的 noindex 自然也無從生效——因為爬虫压根没進来。想不被收錄,稳妥做法是允许抓取、用 noindex 表達;想不被抓取,那就別指望它能承担任何發現價值。
2. 通配符把目标路径一起挡住
類似 Disallow: /*? 的寫法會命中所有带參數的 URL。如果入口頁到目标頁的跳轉带了跟踪參數,或目标頁恰好落在被屏蔽的目錄下,蜘蛛就走不到终点。規則上线前,建议按實际 URL 逐條核對,而不是凭感觉寫一條通配。
3. 多套环境共用一份 robots.txt
測試环境從生产环境拷配置,把整站 Disallow;或者反向操作,把測試环境里放得很開的規則带到线上。上线前訪問一次實际的 robots.txt 看返回内容,成本很低。
入口頁该放什么、不该放什么
相對稳妥的思路是預設允许、局部收紧:
- 入口頁與目标頁所在路径保持可抓取,不加 Disallow;
- 後台、接口、临时目錄、無意义的篩選參數,用 Disallow 明确挡掉;
- 需要爬虫跳過跟踪連結时,用 rel="nofollow" 或 nofollow 指令,而不是直接切断抓取路径;
- 在 robots.txt 中寫清 Sitemap 地址,方便蜘蛛顺着找。
robots.txt 與 UA 屏蔽不是一回事
有些站点在 Nginx 或 WAF 层按 User-Agent 拦截,同时又希望正常的搜尋引擎蜘蛛能進。這两套机制互相獨立:robots.txt 属于协议层面的礼貌請求,是否遵守取决于爬虫自身;UA 拦截是服務器层面的硬性拒绝,返回 403 之後,爬虫拿到的只是一段错誤响應。排查蜘蛛為什么不来时,這两處都要看日誌,只查一處容易誤判。
怎么確認配置真的生效
- 直接訪問 https://域名/robots.txt,確認返回 200 且内容符合预期,注意区分不同协议與不同子域。
- 用命令行工具带不同 UA 請求入口頁,观察是否被拦、返回碼是否正常。
- 在服務器日誌里按時間和 UA 過滤,看爬虫請求到的路径分布,確認目标頁是否有訪問记錄。
- 如果用了 meta robots 或 X-Robots-Tag,抓取頁面源碼或响應头逐條核對,別凭记忆判断。
robots 配置属于基础項,它不會让蜘蛛凭空變多,但配置错誤足以让一套入口頁白做。把它放進部署清單的固定一环,比事後翻日誌找原因要省事得多。
最後提醒:不同搜尋引擎對 robots 指令的支持细节存在差异,通配符寫法和 Allow 的優先級各有實現,寫規則时以目标搜尋引擎的官方文档為准。同时,任何以影响搜尋结果為目标的批量操作都存在平台規則與法律层面的風險,部署前應先评估合規邊界。