聊蜘蛛池和 URL 發現时,经常有人問:入口頁里寫了一堆目标連結,但其中一部分在 robots.txt 里被 Disallow 了,搜尋蜘蛛還會不會去抓?這個問题要拆成两件事看——URL 發現和抓取许可,是两套不同的机制。
先分清 robots.txt 管的是什么
robots.txt 的 Disallow 是一種“抓取许可”约定。它不负责隐藏 URL,也不负责告诉搜尋引擎“這個頁面不存在”,它只表達一件事:請不要抓取這些路径。搜尋蜘蛛在發起請求之前會先讀取 robots.txt,如果目标路径命中 Disallow 規則,正常情况下它不會去請求那個 URL。
但入口頁本身如果允许抓取,蜘蛛依然會正常讀取入口頁的 HTML,並在解析過程中看到那些被禁止抓取的 URL。看到不等于抓到,更不等于收錄。這個区別在排查日誌时特別重要。
蜘蛛遇到被拦的連結會怎样
不同搜尋引擎、甚至同一引擎在不同阶段的行為並不完全一致,公開文档里也很少把每種情况寫死。所以下面是常见表現,不是保證:
- 不發起抓取請求:命中 Disallow 的 URL,通常不會在你服務器日誌里出現對應的抓取记錄。
- URL 可能仍被记下来:蜘蛛從入口頁解析到這個連結,即使没去抓,也可能已经知道這個地址存在。
- 判断依據不足:没有抓取就没有正文、没有标题、也没有頁面上的各種 meta 指令,後續的收錄與展示判断基本無從谈起。
- 不一定會立刻“忘掉”:有些地址會長期停留在系統里,是否清理、多久清理,取决于引擎自身策略,站長很难精确控制。
一個常见誤解:用 robots.txt 拦住,再用 noindex 不收錄
這是很典型的错誤组合。noindex 寫在頁面 HTML 里,蜘蛛必须抓取頁面才能讀到這個指令。如果 robots.txt 已经禁止抓取,蜘蛛讀不到 noindex,自然也無法执行“不要收錄”的指令。想让頁面真正登出索引,通常是先放開抓取、让 noindex 生效,等確認被抓取讀取之後,再考虑收紧 robots。
入口頁和目标 URL 几種常见配置的结果
- 入口頁允许、目标 URL 允许:正常路径,蜘蛛可以顺着入口頁發現並抓取目标 URL。
- 入口頁允许、目标 URL 被 Disallow:入口頁會被讀,連結會被看到,但目标 URL 一般不會被抓取。
- 入口頁本身被 Disallow:蜘蛛不去請求入口頁,里面的連結也就無從被發現,整條鏈路断在第一步。
- 入口頁正常、但 sitemap 里的 URL 被拦:提交 sitemap 並不會绕過抓取限制,列進去也只是“申报”,不等于被請求。
排查顺序建议
如果入口頁看起来没問题,目标 URL 却迟迟没有抓取记錄,可以按這個顺序過一遍:
- 用站長平台的 robots.txt 測試工具,直接輸入完整的目标 URL,看命中了哪條規則。規則匹配按前缀和通配符来,末尾带不带斜杠、路径寫到哪一級,结果可能完全不同。
- 检查是不是被更靠上、范围更大的規則提前拦住。規則一多,人工推演很容易出错,用工具驗證比翻文档快。
- 確認服務器日誌里是否真的出現過對目标 URL 的抓取請求。没有請求,就先別急着分析收錄問题,那是下一步的事。
- 確認入口頁自身可抓、返回正常狀態碼,並且連結是真正的 a 标簽 href,而不是靠脚本触發才生成。
把 robots.txt 当成“抓取開關”,而不是“收錄開關”。想控制收錄用 noindex,想控制抓取用 robots.txt。两者混用,往往两邊都達不到目的。
實操上怎么取舍
蜘蛛池场景里常见的诉求是让更多 URL 被發現和抓取。這时的思路是:该放行的路径尽量少设限制,只在确實需要节省抓取资源的地方收紧,比如無意义的篩選參數、後台路径、大量重复分頁。拦得太宽,等于自己把 URL 發現的路口封住;拦得太松,又會让蜘蛛把抓取预算花在没價值的地址上。
還要提醒一句:robots.txt 是公開文件,任何人都能查看,不要在里面寫路径以外的敏感信息。至于某個 URL 最终能不能被收錄、以什么形式展示,還受内容质量、重复程度、站点整体表現等因素影响,robots.txt 只是其中一道门槛,不是决定項。