在蜘蛛池里,入口頁有时會被設定成“不给搜尋蜘蛛抓”,常见做法就是在 robots.txt 里寫 Disallow: /。這时很多人會問:入口頁虽然被屏蔽了,但里面寫着目标 URL 的連結,搜尋蜘蛛還能不能顺着這個連結去抓目标 URL?答案不是简單的能或不能,關键要看目标 URL 還有没有別的可抓取入口。
robots.txt 只约束目前主机,不负责“传递”連結
robots.txt 的作用范围是“协议 + 主机 + 端口”下的 URL。某個入口頁域名下寫了 Disallow: /,搜尋蜘蛛就不會請求该域名下的頁面。頁面不被請求,HTML 里的連結自然也不會被讀取。也就是说,搜尋蜘蛛不會绕過 robots.txt 去“偷看”入口頁里的目标連結。
但 robots.txt 不會影响目标 URL 所在的另一個站点。如果目标 URL 在別的地方還有可抓取的連結,比如其他入口頁、站点地图、站内導航或站外引用,搜尋蜘蛛仍可能從那些路径發現它。
入口頁被屏蔽,断掉的是“從這個入口頁發現目标 URL”的路径,不是目标 URL 的全局發現路径。
入口頁屏蔽後,搜尋蜘蛛的路径會怎么變
假设入口頁 A 是目标 URL B 的唯一連結来源,且 A 的 robots.txt 屏蔽了整站:搜尋蜘蛛不會請求 A,不會解析 A 里的 <a href>,因此不會因為 A 而請求 B。此时 B 能否被抓,取决于其他来源。
假设入口頁 A 被屏蔽,但同一批入口頁 C、D 仍然可抓,並且 C、D 里也有指向 B 的連結:搜尋蜘蛛可能從 C 或 D 繼續發現 B,A 被屏蔽不等于整批入口頁都失效。
容易被忽略的几種情况
- 入口頁 robots.txt 返回 200 但内容寫错:比如把目标 URL 的路径也寫進了 Disallow,導致蜘蛛即使進入入口頁,也不會去抓目标 URL。
- 入口頁被屏蔽,但 sitemap 仍提交目标 URL:這通常不影响目标 URL 被發現,robots.txt 屏蔽的是入口頁主机,sitemap 是另一個提交渠道。
- 入口頁用 meta robots 的 noindex:這和 robots.txt 不同。noindex 的頁面仍可能被抓取,頁面里的連結也可能被讀取;如果希望頁面不收錄又保留連結传递,需要区分 noindex 和 robots.txt 屏蔽抓取。
- 只屏蔽入口頁,却不在日誌里確認:没有抓取日誌时,很容易把“蜘蛛没来”和“蜘蛛来了但没抓目标 URL”混在一起。
更稳妥的排查顺序
- 先看入口頁服務器日誌:搜尋蜘蛛有没有請求入口頁。如果完全没有請求,優先检查 robots.txt 是否屏蔽了整站或路径。
- 再看目标站日誌:目标 URL 有没有被請求。如果有請求但没收錄,問题在目标 URL 自身内容和质量,不在入口頁連結發現。
- 检查目标 URL 的其他連結来源:sitemap、其他可抓入口頁、站内連結、外部引用是否正常。
- 確認入口頁 robots.txt 的寫法:是否誤伤了 CSS、JS 或目标 URL 路径;如果希望入口頁被讀取連結,至少要让搜尋蜘蛛能請求该頁面。
- 用抓取測試或日誌中的 UA 驗證:抓取工具看到的是被屏蔽,還是被允许,避免只凭猜测判断。
结论:不要指望被屏蔽的入口頁繼續“带路”
如果入口頁的 robots.txt 明确禁止搜尋蜘蛛抓取,那么该入口頁里的目标連結基本不會被讀取。目标 URL 能否被發現,要看它是否還有其他可抓取的連結来源。想让入口頁承担發現路径,就別用 robots.txt 把它挡在门外;只是不想入口頁被收錄,可以考虑允许抓取並配合合适的 robots meta 策略,然後通過日誌確認目标 URL 的真實抓取情况。