先说结论:入口頁被 robots.txt 的 Disallow 挡住之後,搜尋蜘蛛一般不會去抓這個頁面本身,頁面里寫着的目标連結也就失去了被讀到的机會。但連結仍然可能從別的渠道被發現,只是那些渠道和這個入口頁没有關系。分清這一点,才知道問题卡在哪一步。
Disallow 到底拦住了什么
robots.txt 里的 Disallow 拦的是抓取動作,不是索引结果。一個頁面如果以前被抓過、又有外部連結指向它,仍有可能出現在搜尋结果里,只是标题和摘要可能来自外部锚文本。反過来,一個從来没被抓過的 URL,被 Disallow 之後基本也等不到抓取机會。
關键逻辑是:爬虫必须先把頁面抓下来,才能解析里面的連結。Disallow 恰好切断了抓下来這一步,所以正文里的連結、頁脚里的連結,都不會因為這一次訪問而被讀到。
入口頁被禁止抓取时,里面的連結還能被發現吗
- 如果入口頁此前已被抓取、連結已经進入待抓队列,這些 URL 仍可能被後續抓取,但新加進去的連結不會再被讀到。
- 如果入口頁從未被抓過,頁面内的連結基本不會被發現,除非同一個 URL 還出現在別的地方。
- 目标 URL 若同时出現在 sitemap、其他可抓取的頁面或外部連結里,仍有机會被發現,但那是那些渠道的功劳,不能算在這個入口頁头上。
- robots.txt 的規則按 User-agent 和路径匹配,寫错一處(比如路径多了個斜杠、通配符用反了),就可能让本该被挡的頁面重新可抓,或者反過来把正常頁面挡掉。
日誌里通常能看到什么
如果确實是入口頁被 Disallow,日誌里常见的情况是:入口頁自身的抓取记錄几乎為零,而此前已经被抓過的目标 URL 仍有零星抓取。搜尋蜘蛛讀取 robots.txt 的频率不低,但規則改動後一般不會立刻生效,需要留一点观察時間,不能改完马上看日誌就下结论。
還有一種容易誤判的情况:入口頁返回了 403 或 429,被防火墙或限流拦住,表現和 Disallow 很像。那属于服務器层的問题,要看狀態碼和訪問来源,而不是去改 robots.txt。
想让入口頁里的連結被讀到,有哪些更稳的做法
- 把入口頁從 Disallow 里放出来,让它能被正常抓取。如果只是不想让這個頁面被收錄,用 noindex 比 Disallow 更直接,但要注意 noindex 也要頁面被抓到才會生效。
- 確認入口頁返回 200,連結用最普通的形式寫在正文里,href 直接指向目标 URL,不要用脚本後置插入。
- 不要只靠入口頁一條路,把重要的 URL 同时放進 sitemap 和可抓取的站内頁面,多几個入口互為备份。
- 检查入口頁是否同时叠了 noindex、脚本動態插入、iframe 包裹等限制。多個限制叠在一起时,先去掉多余的那层,再观察變化。
几個常见坑
- 把 Disallow 当成 noindex:结果頁面既没被抓,也就没有机會被收錄,連結更传不出去。
- 規則放错位置:爬虫只讀域名根目錄下那一份 robots.txt,子目錄或子域名里單獨放的文件不會被采纳。
- 改完立刻看结果:規則生效有延迟,短期内日誌没變化属于正常現象。
- 抓取被中間层挡掉:入口頁允许抓取,但 CDN 或防護策略返回 403,連結照样讀不到,這时要看的是服務端配置。
robots.txt 决定能不能抓,頁面结构决定抓到了能不能讀到連結,這是两道獨立的關卡。先確認卡在哪一道,再動手調整,比反复換入口頁更省時間。
實际排查时,可以先看服務器日誌里入口頁的狀態碼和抓取频率,再逐條對照 robots.txt 規則,多數問题在這一步就能定位。另外不必指望單個入口頁解决所有發現需求,狀態碼正常、入口来源多几處,做法才更稳。