常见問题

蜘蛛池入口頁寫進 robots.txt 的 Disallow 之後,里面的目标 URL 该怎么被發現

很多蜘蛛池會把入口頁用 robots.txt 屏蔽掉,结果發現里面的目标 URL 一條抓取记錄都没有。本文讲清 robots.txt 拦的是抓取而不是收錄,拆解入口頁與目标 URL 的四種屏蔽组合,並给出可执行的整改與排查顺序。

常见問题

蜘蛛池入口頁寫進 robots.txt 的 Disallow 之後,里面的目标 URL 该怎么被發現

做蜘蛛池的人常遇到一個矛盾:入口頁不想被普通訪客或搜尋蜘蛛直接看到,于是用 robots.txt 把入口頁 Disallow 掉,過一段時間回头看,里面的目标 URL 一條抓取记錄都没有。這时候要先問自己一個問题:你屏蔽的到底是入口頁,還是入口頁加上里面的目标 URL?在 robots.txt 的規則体系里,這是两件完全分開的事。

robots.txt 的拦截發生在抓取之前

搜尋蜘蛛在請求某個 URL 之前,會先讀取该站点的 robots.txt(通常會缓存一段時間)。如果某條規則匹配上了這個 URL,蜘蛛一般就不再發出請求。由此可以推出:

  • 入口頁被 Disallow,蜘蛛大概率不會去抓入口頁,讀不到它的 HTML,自然也就讀不到頁面里的連結。
  • 目标 URL 没有被 Disallow,它本身仍然是可抓取的,只是少了一條被暴露出去的通道。

所以最常见的實际情况是:入口頁被屏蔽後,目标 URL 並不是被禁止了,而是失去了主要的發現路径。

几個容易混淆的点

誤区一:以為 robots.txt 只影响收錄

robots.txt 控制的是抓取,不是收錄。一個 URL 被 Disallow 之後,蜘蛛不能抓取它,也就無法讀取頁面内容来判断它是什么。但它仍然可能通過外部連結、sitemap 等渠道被记錄成一個「已知但未抓取」的 URL。反過来说,允许抓取也不等于會被收錄。

誤区二:以為屏蔽入口頁會连坐目标 URL

robots.txt 的規則是按 URL 路径逐條匹配的,不會向被連結的頁面传递「禁止」。入口頁被屏蔽,不代表它指向的目标 URL 也被屏蔽;目标 URL 被屏蔽,也不影响入口頁本身被抓取。

誤区三:以為把 URL 放進 sitemap 就能绕過 Disallow

sitemap 里的 URL 如果同时命中 robots.txt 的屏蔽規則,蜘蛛一般還是不會去抓。sitemap 更像是一份推荐清單,robots.txt 更像门禁,门禁優先。

四種组合下的實际表現

  • 入口頁允许、目标 URL 允许:最正常的情况。蜘蛛抓入口頁,解析出連結,再按調度去抓目标 URL。
  • 入口頁屏蔽、目标 URL 允许:蜘蛛不會讀入口頁,里面的連結等于没寫。目标 URL 只能靠其它入口、外部連結或 sitemap 重新被發現。
  • 入口頁允许、目标 URL 屏蔽:蜘蛛能發現這些連結,但請求會被挡下来,目标 URL 會長期停留在「已發現、未抓取」的狀態。
  • 两邊都屏蔽:發現和抓取两條路都断了,入口頁在整條鏈路里基本等于不存在。

如果确實需要屏蔽入口頁,可以這样調整

  1. 把目标 URL 放到另一個可抓取的頁面上,让發現路径不再依赖被屏蔽的那個入口頁。
  2. 检查 Disallow 規則的寫法,避免用過于宽泛的前缀把目标 URL 的路径一起罩進去。
  3. 如果只是不想让入口頁被正常展示,但希望連結能被讀到,可以考虑保留抓取、改用其它方式處理入口頁内容。這類做法需要结合自身站点评估,不存在通用的稳妥方案。
  4. 用官方或第三方的 robots.txt 測試工具,逐個驗證入口頁和目标 URL 各自命中哪條規則,不要凭感觉判断。

建议的排查顺序

如果入口頁有抓取记錄、目标 URL 却完全没有動静,可以按下面的顺序逐條看:

  1. 入口頁和目标 URL 分別命中 robots.txt 的哪一條規則,是否存在誤伤。
  2. 入口頁响應是否正常,返回的 Content-Type 是不是 text/html。
  3. 連結是否真實存在于 HTML 源碼中,而不是靠脚本渲染後才出現。
  4. 目标 URL 自身返回的狀態碼是否可抓取。
  5. 服務端日誌里,目标 URL 有没有被請求過的痕迹。
robots.txt 拦的是「抓不抓」,不是「好不好」。把入口頁屏蔽掉,通常只是让目标 URL 少了一條被發現的路,並不會让它在別的地方更快被處理。

最後提醒一句:不同搜尋引擎的抓取調度策略並不一致,同一套配置在不同站点上的表現也可能有差別。上面的内容是常規規律,具体還是以自己站点的抓取日誌和後台資料為准。