這是蜘蛛池和站点运营里很常见的疑問:入口頁明明放了指向目标 URL 的連結,日誌里却看不到搜尋蜘蛛来抓那個目标 URL。很多时候原因不在連結寫法,而在目标站点的 robots.txt 里有一條 Disallow。
先分清两件事:發現和抓取
搜尋蜘蛛處理一個 URL 大致分两步:先從外鏈、sitemap、入口頁等地方發現這個 URL,再决定要不要抓取它的内容。robots.txt 里的 Disallow 管的是第二步,它告诉蜘蛛這條路径不要抓,但不會让蜘蛛看不见這個 URL。
所以典型的日誌表現是:蜘蛛确實来了入口頁,也确實讀到了里面指向目标 URL 的連結,但之後不會向目标 URL 發出任何請求。你在目标站点的訪問日誌里自然什么都看不到。
那這個 URL 還可能出現在搜尋结果里吗
有可能,但形態通常很糟糕。如果目标 URL 没有被 noindex 或 X-Robots-Tag 明确禁止索引,搜尋引擎仍可能僅凭外鏈信息把它放進结果頁,标题和摘要往往是外鏈锚文本或 URL 本身拼出来的,内容抓不到、时效性差、随时可能消失。這種看得到抓不到的狀態,對运营几乎没有價值,反而容易让人誤判成蜘蛛池已经生效。
robots.txt 不是隐藏手段,也不是收錄開關。它只约束抓取行為,既不保證 URL 出現在结果里,也不保證它不出現。
几種容易被忽略的情况
- 規則范围寫大了:比如把 Disallow 寫成斜杠加星号,或者目錄层級寫得不對,實际屏蔽范围可能比你预計的大得多,连正经常規頁面一起挡住。
- 只屏蔽了部分 UA:robots.txt 可以按 User-agent 分组,某些規則只针對特定蜘蛛。用別的蜘蛛測試一切正常,用搜尋蜘蛛却處處碰壁。
- robots.txt 本身抓不到:如果 robots.txt 返回 5xx,不同搜尋引擎的處理方式不一致,有的會在一段時間内按全站禁止来對待。
- 被 WAF 或 CDN 拦在前面:蜘蛛根本没拿到 HTML,這和 robots.txt 無關,但日誌表現很像,容易混在一起誤判。
確認問题的方法
- 直接訪問目标域名下的 robots.txt,看目标路径是否真的被 Disallow 命中。
- 用搜尋引擎官方提供的 robots.txt 測試工具,選擇對應蜘蛛的 UA 去驗證具体 URL。
- 在目标站訪問日誌里按蜘蛛 UA 過滤,確認請求有没有到達服務器;一條都没有,多半是 robots 或前置拦截。
- 区分蜘蛛来過但被拒和蜘蛛從没来,這两種情况的處理方向完全不同。
确實需要被抓取时怎么办
如果目标 URL 是自己可控的站点,先確認它值得被抓取和收錄,再去調整 robots.txt:把被誤伤的路径放出来,或者用更精确的規則只屏蔽後台、站内搜尋结果頁這類不该抓的部分。調整後不要指望立刻生效,蜘蛛重新讀取 robots.txt 的节奏並不固定,通常需要一段時間。
如果目标 URL 不在你控制范围内,robots.txt 這一關基本無解。繼續往入口頁堆連結,只是重复一遍發現但不抓取的過程,不會改變结果。
和蜘蛛池的關系
蜘蛛池能做的只是帮助發現,它無法让蜘蛛违反目标站点的 robots.txt 去抓取。把被屏蔽的 URL 大量挂到入口頁上,除了增加無效抓取和日誌噪音,没有實际收益。反過来,如果你在做入口頁,也建议顺手检查入口頁自身的 robots.txt,別把蜘蛛挡在门外還不自知。
小结
被 robots.txt 屏蔽的目标 URL,搜尋蜘蛛仍然可能通過入口頁知道它存在,但不會去抓取;能否出現在结果里取决于索引层面的設定,而且表現通常很差。遇到入口頁有連結、目标站点却没有抓取日誌的情况,先查 robots.txt 和前置拦截,再考虑連結寫法、抓取配額這些因素,排查顺序會清楚很多。