做蜘蛛池的时候,大家往往把精力放在入口頁數量、域名和服務器上,却容易忽略一個很小的文件:robots.txt,以及頁面里的 meta robots。它們本身不产生流量,但一旦配置错了,蜘蛛可能连门都進不来,或者進来之後不跟着連結走。這篇文章把入口頁、目标頁和资源文件這三類對象该放行還是该挡住,分開讲清楚。
先分清三個层級的“禁入指令”
同一個“別抓我”的意图,可以用三種方式表達,作用的范围不一样:
- robots.txt:放在域名根目錄,是站点級协议,蜘蛛抓取任何 URL 前一般會先讀它。寫错一條通配符,可能整站被挡。
- meta robots:寫在 HTML 的 head 里,只作用于目前頁面,可以带 noindex、nofollow、noarchive 等參數。
- X-Robots-Tag:通過 HTTP 响應头下發,适合 PDF、图片等非 HTML 资源,也适合由服務器统一批量控制。
三者冲突时,通常按更嚴格的一條执行。也就是说,只要有一處寫了禁止,蜘蛛一般就按禁止處理,不會帮你“擇優”。
入口頁该放行什么,该挡住什么
入口頁存在的意义是被發現、被抓取、被跟随連結。所以對蜘蛛池的入口頁来说,最基本的配置是:
- robots.txt 里不要對入口頁所在目錄寫全站 Disallow;
- 不要给入口頁加 nofollow,否則頁面里的連結不會被跟随,目标頁也就到不了;
- 如果入口頁只是通道、不希望它自己出現在结果里,可以用 noindex,但要注意 noindex 不影响抓取和連結跟随,蜘蛛仍然會訪問它並顺着連結走;
- 需要蜘蛛渲染的 CSS、JS 文件不要被 robots.txt 挡住,否則渲染出来的頁面可能残缺。
常见的誤区是把 noindex 和 nofollow 当成一回事。前者影响是否保留在索引里,後者影响是否跟随頁面上的連結。對蜘蛛池来说,真正致命的是 nofollow 和 robots.txt 的全站禁止。
目标頁的 robots 要注意什么
目标頁是你希望蜘蛛最终到達的地方。如果目标頁自己被 noindex 或者被 robots.txt 挡住,入口頁做得再顺手,也只是把蜘蛛送到了一個死胡同。建议定期抽查:
- 目标頁是否返回 200,而不是 301 到別處或 403;
- 目标頁的 meta robots 是否含 noindex;
- 目标頁是否有登入墙、驗證碼或地区限制,導致蜘蛛拿到的是拦截頁而不是内容。
几個容易被忽略的细节
批量铺入口頁时,最常出問题的不是寫得不對,而是模板複製时把別處的 robots.txt 一起带了過来。
- 通配符與结尾斜杠:Disallow: /tmp 和 Disallow: /tmp/ 的含义不同,前者會连带挡住 /tmpabc 這類路径。
- 大小寫敏感:路径部分通常区分大小寫,別凭感觉寫。
- 多域名、多协议:http 與 https、主域名與子域名的 robots.txt 各自獨立,改了一個不代表另一個也改了。
- Sitemap 声明:如果 robots.txt 里寫了 Sitemap 地址,確認它能正常打開,別寫成一個 404。
- 缓存:robots.txt 有缓存周期,改完不要指望立刻生效,看日誌时要把這段時間算進去。
排查顺序建议
- 用命令行或浏览器直接訪問域名根目錄的 robots.txt,確認返回 200、内容完整、没有多余的 Disallow。
- 用搜尋引擎官方提供的 robots 測試工具,模拟某個入口頁 URL,看是否被允许抓取。
- 查看入口頁响應头里是否带 X-Robots-Tag,再看 HTML 源碼里的 meta robots。
- 去訪問日誌里核對:蜘蛛是否真的抓了入口頁,有没有顺着頁面上的連結訪問目标頁。只有入口頁訪問记錄、没有目标頁记錄,通常說明連結没被跟随。
整理下来其實就一句话:入口頁要允许抓取和跟随,目标頁要能被正常訪問,中間的资源文件不要誤挡。配置完先拿少量入口頁跑一轮,確認蜘蛛能走完“入口頁—連結—目标頁”這條路径,再考虑扩大規模。具体效果受内容质量、站点狀態與竞争环境等多方面影响,robots 只是把通道打開,並不保證蜘蛛一定常来。