常见問题

入口頁和目标 URL 的 robots.txt 規則冲突,搜尋蜘蛛會听谁的?

入口頁允许抓取、目标 URL 却被 Disallow,是蜘蛛池运营里很常见的規則冲突。本文說明搜尋蜘蛛按 URL 逐條匹配 robots.txt 的逻辑,拆解入口頁與目标 URL 互相打架的三種场景,並给出一套從域名確認到日誌比對的排查顺序,帮助定位連結發現不了或抓取長期空白的原因。

常见問题

入口頁和目标 URL 的 robots.txt 規則冲突,搜尋蜘蛛會听谁的?

在蜘蛛池和站点运营中,robots.txt 常被当成一個随手寫的“開關”。但入口頁和目标 URL 分属不同目錄、甚至不同域名时,規則很容易互相打架:入口頁允许抓取,目标 URL 却被 Disallow 掉;或者反過来,入口頁被屏蔽,連結再多也没人發現。搜尋蜘蛛到底听谁的,取决于它当时請求的是哪一個 URL。

抓取决策是按 URL 逐個做的

搜尋蜘蛛在請求某個 URL 之前,會先取對應域名的 robots.txt,再用這個 URL 自身的路径去匹配規則。它不区分“入口頁”和“目标 URL”,也不會因為入口頁允许抓取,就顺带放宽對目标 URL 的限制。入口頁的作用是提供連結线索;要不要抓目标 URL,是另一次獨立判断。所以出現規則冲突时,不存在“谁压過谁”,只有“這一條請求被放行還是被拦下”。

三種常见的規則冲突

1. 入口頁允许,目标 URL 被屏蔽

這是最典型的情况。蜘蛛正常抓取入口頁,解析出連結,但在准备請求目标 URL 时命中 Disallow,于是放弃抓取。表現上,入口頁日誌有訪問记錄,目标 URL 的日誌長期空白。需要留意的是,Disallow 阻止的是抓取,並不等于把頁面從索引中移除。此前已经被抓取收錄的頁面,仍可能留在索引里,只是内容可能逐渐變舊、缺少描述信息。

2. 入口頁被屏蔽,目标 URL 允许

這種情况下蜘蛛根本不會請求入口頁,也就無從解析里面的連結。目标 URL 即使規則上完全開放,也只是少了一條被發現的路。如果目标 URL 没有其他外鏈、sitemap 或站内入口,被發現的速度會明顯變慢,甚至長期不被發現。日誌上的特征是入口頁没有任何蜘蛛訪問记錄。

3. 目錄級通配符誤伤

Disallow: /*?Disallow: /tmp/ 這類寫法,本意是屏蔽某一類路径,實际可能连入口頁或目标 URL 一起盖住。带參數的連結、多层目錄、大小寫不同的路径,都容易被顺带命中。規則寫得越宽,誤伤面越大,而且很难從規則文本上直接看出来。

排查顺序

  1. 確認目标 URL 實际用的是哪個域名的 robots.txt。跨域、子域、CDN 回源域名可能各有各的規則。
  2. 把入口頁 URL 和目标 URL 分別拿去對照規則,逐個路径匹配,而不是只看規則文件里有没有 Disallow 字样。
  3. 看抓取日誌:入口頁有没有被請求?目标 URL 有没有被請求?两邊都空,說明問题可能出在更前面,比如 WAF、DNS 或 IP 层面的限制。
  4. 检查是否存在 Disallow 與 noindex 同时出現的情况。這種组合下蜘蛛不抓頁面,也就看不到頁面里的 noindex,索引中的舊版本可能長期保留。
  5. 修改規則後观察一段時間,不要期待立刻见效。抓取节奏本身存在延迟,回訪間隔也不是固定值。

几個容易混淆的点

  • Disallow 不等于刪除:它管的是抓取行為,不直接管索引结果。
  • robots.txt 返回 404 或超时:多數引擎會按“允许抓取”處理,但這不代表可以放任不管,規則缺失时誤抓的風險更高。
  • 403 和 Disallow 的表現不同:Disallow 下蜘蛛通常根本不發請求;403 是發了請求被拒,日誌里能看到痕迹。
  • Crawl-delay 與 Disallow 是两回事:前者調节抓取速度,後者决定能不能抓。
排查這類問题时先問一句:蜘蛛此刻請求的是哪個 URL?把入口頁和目标 URL 分開看,很多看起来像“規則玄学”的現象其實一眼就能對上。

最後提醒一点,robots.txt 是各引擎自愿遵守的约定,不同引擎對通配符、大小寫、路径匹配的處理细节並不完全一致。把它当成一份需要定期复核的配置文件,而不是寫完就忘的摆设,能省掉不少反复排查的時間。