常见問题

蜘蛛池入口頁的 robots.txt 屏蔽了部分路径,目标 URL 還能被發現吗

入口頁能打開、目标 URL 却迟迟不被抓,很多时候是 robots.txt 規則寫得過宽。本文区分入口頁被屏蔽、目标路径被屏蔽、跨域三種情况,說明搜尋蜘蛛遇到 Disallow 时的實际行為,並给出核對規則、抓取測試、查服務器日誌的排查顺序。

常见問题

蜘蛛池入口頁的 robots.txt 屏蔽了部分路径,目标 URL 還能被發現吗

做蜘蛛池的时候经常遇到這種情况:入口頁能正常打開,里面指向的目标 URL 却迟迟没有被抓。排查到最後,問题出在 robots.txt 上——有人為了挡住後台、站内搜尋這類無價值路径,寫了一條很宽的 Disallow 規則,顺手把目标 URL 也一起挡了進去。這篇文章把這條鏈路上的几個關键点拆開说清楚。

先確認被屏蔽的到底是哪一层

robots.txt 的生效范围是「同一個协议 + 同一個主机名 + 同一個端口」,也就是常说的同源。所以要先分清三種情况:

  • 入口頁本身被屏蔽:搜尋蜘蛛根本不會請求入口頁,頁面里有多少條連結都讀不到,鏈路在第一层就断了。
  • 入口頁可抓,目标 URL 所在路径被屏蔽:入口頁能被讀取,蜘蛛也能看到連結,但走到目标 URL 时會被規則拦住,不會去請求正文。
  • 目标 URL 在另一個域名:入口頁的 robots.txt 管不到對方,這时候要看目标站自己的 robots.txt 有没有屏蔽搜尋蜘蛛。

搜尋蜘蛛遇到 Disallow 时具体會做什么

需要区分「發現 URL」和「抓取 URL」两件事。搜尋蜘蛛在別的頁面看到一條被 Disallow 的連結时,通常仍可能把這個 URL 记錄下来,但它不會去請求這個 URL 的内容。對蜘蛛池来说,後果很直接:

  • 目标 URL 的内容讀不到,頁面里的下一层連結也就無從發現;
  • 入口頁里如果大量連結都落在被屏蔽的路径下,入口頁本身的抓取價值會被明顯稀释;
  • robots.txt 不是保密工具,它只是抓取指令,不保證 URL 不出現。想要内容不被看到,應该用權限控制,而不是 Disallow。

几個常见的誤判

  • 規則顺序誤区:很多人以為 robots.txt 是從上往下匹配第一條。實际生效的是匹配程度,規則更具体、更長的通常優先,所以不要靠調換顺序来「覆盖」。
  • 通配符誤伤:像 /go/* 這種寫法會把所有以 go 開头的路径全挡住,包括你本来想放行的目标 URL。
  • robots.txt 本身異常:如果這個文件返回 5xx,多數搜尋引擎會保守處理,可能短時間内减少對该主机的抓取;返回 404 一般视為没有限制;但如果返回 200、内容却是一個错誤頁,解析结果就不可预料了。
一條實用经驗:寫完 robots.txt 別只看语法對不對,要實际拿目标 URL 去跑一遍抓取測試,看结果里有没有「被 robots.txt 屏蔽」的提示。

想保留入口頁、只屏蔽無關目錄,怎么做

  1. 先列出真正無價值的路径,比如後台、站内搜尋、參數化篩選頁,只對這些路径寫規則。
  2. 逐條核對目标 URL 的完整路径,確認不在任何 Disallow 的前缀里,尤其注意结尾有没有通配符。
  3. 用搜尋引擎提供的抓取測試工具,分別测入口頁和目标 URL,確認两者都不被拦。
  4. 過几天回到服務器日誌里,搜目标 URL 的請求记錄,看是否有来自搜尋蜘蛛的訪問。日誌比任何推测都可靠。

目标 URL 在別的域名时

跨域的情况下,两邊的 robots.txt 各自獨立。入口頁放行不等于目标站放行,反過来也一样。實际排查时经常见到入口頁一切正常、目标站自己寫了 Disallow,或者整站被 WAF 拦掉,抓取断点其實在後面那一段。所以跨域投放时,两邊的 robots.txt 和訪問控制都要過一遍。

怎么快速驗證

  • 直接訪問 你的域名/robots.txt,確認返回 200 且内容是規則文本,不是首頁也不是错誤頁。
  • 把目标 URL 粘進抓取測試工具,看是否提示被 robots 屏蔽。
  • 检查服務器日誌里入口頁的抓取次數與目标 URL 的請求次數,两者的差距往往就是断点位置。
  • 如果入口頁被大量抓取而目标 URL 一條請求都没有,優先怀疑 robots 規則、重定向鏈以及目标站的拦截策略。

小结一下:robots.txt 决定的是「能不能抓」,不是「會不會被收錄」。入口頁與目标 URL 之間只要有一层被 Disallow,發現與抓取的鏈路就會断開。排查顺序建议是:robots.txt 規則 → 抓取測試工具 → 服務器日誌 → 目标站自身的訪問控制,一层层往下定位,比盲目堆連結有效得多。