常见問题

蜘蛛池入口頁的 robots.txt 该怎么寫?寫错一步可能挡住搜尋蜘蛛

蜘蛛池入口頁的 robots.txt 寫错,搜尋蜘蛛可能连门都進不来。本文讲清 robots.txt 只管路径不管單條連結的邊界,列出三種常见寫法與對應後果,梳理通配符過宽、多子域漏配、文件訪問異常等容易踩的坑,並给出一套從文件狀態到日誌驗證的自查顺序。

常见問题

蜘蛛池入口頁的 robots.txt 该怎么寫?寫错一步可能挡住搜尋蜘蛛

robots.txt 是放在站点根目錄下的一個纯文本文件,用来告诉爬虫哪些路径可以抓、哪些不要抓。放到蜘蛛池场景里,它同时管着两件事:搜尋蜘蛛能不能進来讀入口頁,以及讀完入口頁之後能不能顺着連結去發現目标 URL。寫得對,它是一道護栏;寫错,就是一道隐形的墙,而且這道墙在日誌里往往表現為“蜘蛛压根没来過”,很容易被誤判成入口頁本身没生效。

robots.txt 只管路径,管不了單條連結

先明确一個邊界:robots.txt 按路径前缀匹配,不能针對某一個具体 URL 單獨放行或禁止。所以指望用 robots.txt 去控制“哪些目标連結可以被發現”並不現實。它真正约束的范围是入口頁自身的路径,以及入口頁里連結指向的路径——如果目标 URL 和入口頁同域,它同样受這份文件约束;如果目标 URL 在別的域名下,那就要看對方域名自己的 robots.txt 怎么寫。

三種常见寫法與對應後果

  • 允许全部:User-agent 寫通配符,配合 Allow 根路径。最省事,入口頁和站内連結都能被抓。
  • 只放開入口頁目錄:只允许某個目錄,其余全部禁止。入口頁能被抓,但同域下的目标 URL 可能一起被挡住。
  • 全局禁止:禁止根路径下的所有内容。入口頁本身就不會被抓,後面所有环节都無從谈起。

几個容易踩的坑

通配符寫得太宽

用通配符屏蔽所有带參數的 URL 是很常见的一刀切寫法。入口頁里的連結经常带跟踪參數或做過 URL 重寫,一旦被這條規則覆盖,蜘蛛就算来了也讀不到連結指向的路径。寫規則之前,先把自己站上真實存在的 URL 形態列一遍,再决定通配符的范围。

多子域只配了一份

robots.txt 只對目前域名生效,子域要各自放一份。如果入口頁跑在多個子域上,而只配了主域的文件,子域下没有這個文件时爬虫通常按“全部允许”處理,看起来是通的;但如果你誤以為主域那份會覆盖子域,配置思路就容易错乱。建议把每個對外提供入口頁的域名單獨检查一遍,別靠推测。

文件本身訪問異常

robots.txt 返回 404 时,爬虫一般按全部允许處理;返回 5xx 或超时,不同爬虫的策略不一致,有的會短期降低甚至暫停抓取。最稳的做法是让它稳定返回 200,内容简短,不要做重定向,也不要依赖後端動態拼装。

把它当成隐藏目錄清單

有些人习惯把不想公開的路径一條條禁止出来,等于主動告诉別人這里有什么。在蜘蛛池场景里,更值得注意的是別把入口頁路径寫得過于特殊、容易被反向推测出規律。

改完規則之後怎么自查

  1. 直接訪問域名加根路径下的 robots.txt,確認狀態碼是 200,内容里没有意料之外的禁止規則。
  2. 拿入口頁的完整 URL 去對照規則,看是否落在被禁止的路径前缀里。
  3. 在抓取日誌里過滤搜尋蜘蛛的 UA,看它在入口頁路径上的請求量是否正常;如果一條都没有,先怀疑 robots.txt 和服務器层拦截,而不是連結寫法。
  4. 观察一段時間,再看目标 URL 是否出現被抓取的记錄。注意,被抓取和進索引是两件事。
  5. 每次改動都留個记錄,出問题时能快速回滚到上一版。
robots.txt 是门槛,不是開關。它只能决定蜘蛛“能不能讀”,讀完之後是否繼續發現目标 URL,還取决于入口頁的结构、連結本身是否可訪問,以及抓取预算的分配。

小结

在蜘蛛池里寫 robots.txt,原則就几條:路径范围尽量小、不要用宽泛通配符誤伤目标 URL、每個子域單獨配置、文件本身保持稳定可訪問。把它当成一层基础設定,而不是優化手段。真出問题时,按“文件狀態 → 路径規則 → 日誌驗證”的顺序排查,通常比反复調整連結结构更快找到原因。