在蜘蛛池的搭建里,robots.txt 往往是最容易被跳過的一個文件。它不像入口頁模板、IP 分布那样直接影响蜘蛛能不能找到連結,但它决定了蜘蛛第一次進站後,哪些目錄能走、哪些不能走。寫错一行,可能出現入口頁正常、内頁却始终抓不到的情况。
robots.txt 能管什么,管不了什么
先说邊界:robots.txt 只是抓取层面的建议,它不是訪問控制,也不是索引開關。搜尋引擎可以遵守,也可能在某些情况下忽略;而一個 URL 即使被 Disallow,只要別處有連結指向它,仍有可能出現在索引里,只是缺少正常的摘要。
所以對蜘蛛池来说,robots.txt 的正确期待是:控制抓取路径和抓取量,而不是“我不想让它出現,所以屏蔽掉”。
蜘蛛池里常见的三種配置思路
1. 基本全放行,只挡後台
入口頁、列表頁、内容頁全部允许,僅屏蔽後台、測試目錄、日誌目錄等無關路径。這種寫法最常见,适合结构清楚、頁面數量可控的站点。要注意別顺手把 /api/、/search/ 這類會产生無限组合的路径放進来。
2. 屏蔽參數與無限路径
带參數的篩選、排序、分頁组合會生成大量近似頁面,蜘蛛一旦陷進去,抓取预算很快被消耗。用 Disallow 把明顯的组合參數挡掉,通常比事後补救省事。
3. 只放行指定目錄
先全站 Disallow,再逐條 Allow 需要被抓的目錄。這種方式可控性最强,但要小心寫法與顺序,漏掉一條就會让整块路径失效。
入口頁與目标頁的關系
一個常被混淆的点:蜘蛛池入口頁上的連結,指向的是別人的站。你只能控制自己站点的 robots.txt,不能替目标站决定什么。如果目标頁本身在自己的 robots.txt 里被屏蔽,你的入口頁再干净也没用;反過来,你自己的入口頁被屏蔽,蜘蛛就断了往下走的路径。
規則冲突时按什么顺序判断
当 robots.txt、meta robots、HTTP 响應头、canonical 同时出現时,可以按下面的顺序看:
- 先看 HTTP 响應狀態,404 或 5xx 的頁面谈規則意义不大;
- 再看 X-Robots-Tag 响應头,它和 meta 标簽效力接近,但對非 HTML 文件同样生效;
- 然後是頁面里的 meta robots,注意 noindex 與 nofollow 是两個獨立開關;
- 最後是 robots.txt,它只影响抓取,不影响已被抓取内容的後續處理;
- canonical 是另一種信号,用于合並重复頁,不能替代上面的屏蔽手段。
容易踩的几個坑
- 用 robots.txt 屏蔽 CSS 和 JS 文件,導致頁面渲染不完整,蜘蛛看到的和用戶看到的不是一回事;
- 把入口頁本身 Disallow,结果蜘蛛進不来,後面的連結自然也不會被抓;
- 以為寫了 Disallow 頁面就不會被索引,實际上還需要 noindex 配合;
- 站点有多個子域或端口,只在主域放了一份 robots.txt,其他子域等于没有;
- 測試环境直接複製了生产环境的 robots.txt,全站放行,被蜘蛛批量抓走一堆測試内容。
判断标准其實很简單:你希望蜘蛛走到哪一层、走多少條,就把不在這條路径上的分支挡掉。挡多了會断鏈,挡少了會稀释抓取。
寫完之後的驗證
- 直接用浏览器訪問 /robots.txt,確認返回 200 且内容完整,没有语法错誤;
- 用搜尋引擎官方提供的 robots 測試工具检查具体 URL 的判定结果;
- 在抓取日誌里核對被拦路径是否真的没有出現,或出現频率是否下降;
- 改動後保留一份舊文件备份,出現異常可以快速回退。
robots.txt 不复杂,但它是蜘蛛進入站点後的第一道路标。把它和入口頁结构、抓取日誌放在一起看,才能判断蜘蛛是“不想来”還是“走不進来”。調整时一次改一項,观察几天再動下一次,比一次性大改更容易看清因果。