做站点运营时,robots.txt 是一個绕不開的文件。不少人把它的功能想象成“封杀令”——只要寫上 Disallow,就以為搜尋蜘蛛再也看不见那個 URL。于是,当服務器日誌里仍然出現蜘蛛對已屏蔽 URL 的請求时,就開始怀疑是不是蜘蛛池出問题了。其實,這里混淆了两個概念:URL 發現和抓取执行。
robots.txt 到底如何控制搜尋蜘蛛?
robots.txt 协议约定的不是“是否收錄”,而是“是否抓取”。当搜尋蜘蛛准备抓取一個 URL 前,會先查看该域名根目錄下的 robots.txt,根據其中的規則决定能不能抓取。如果命中 Disallow,蜘蛛原則上不會主動抓取這個地址。注意,這個規則生效的前提是蜘蛛已经知道了這個 URL 的存在,並且打算訪問它。
換句话说,robots.txt 是一道“闸门”,不是“過滤器”。它不能阻止其他網站或用戶看到你的連結,也不能阻止搜尋蜘蛛通過外部連結“發現”這個 URL。發現和抓取是两回事:搜尋引擎在解析網頁时,會從已抓取的頁面里提取出所有連結,並把它們加入待抓取队列。這個過程叫 URL 發現。即使某個 URL 寫在 robots.txt 里,只要它出現在某個公開頁面上,搜尋蜘蛛依然有可能在日誌里留下請求记錄——這往往是蜘蛛在尝试抓取前,先来检查 robots.txt,或者因為某些特殊原因直接請求了该地址。
被禁用的 URL 是否還會被“發現”?
答案是:會。搜尋蜘蛛通過两種主要途径發現新 URL:一是從已收錄頁面的連結中提取;二是通過站点地图、外部提交等方式直接获得。当你把某個目錄 Disallow 後,如果其他頁面仍然指向這個目錄下的 URL,搜尋引擎就有机會發現它,只不過按照規則,它不會去抓取這個頁面。
發現不等于抓取,抓取不等于收錄。robots.txt 只能控制“不抓取”,但無法控制“不被發現”。
因此,如果你希望某個 URL 彻底不被搜尋蜘蛛触碰,僅靠 robots.txt 是不够的。最稳妥的做法是:不要提供任何指向该 URL 的連結,同时考虑使用 noindex 标簽,從搜尋结果中移除已收錄的版本。不過 noindex 要求蜘蛛抓取内容後才能看到,這與 Disallow 是矛盾的——如果將两者用在同一 URL 上,蜘蛛因為 Disallow 無法抓取,就永遠看不到 noindex 标簽,最终可能導致该 URL 長期留在索引中。這也是很多站長在屏蔽後台目錄时踩過的坑。
為什么明明 Disallow 了,日誌里還是有蜘蛛?
這里列出几種常见原因,供你排查。
- 蜘蛛先来检查 robots.txt 文件本身:每次抓取前,蜘蛛都要重新讀取 robots.txt。日誌中這些請求可能只是针對根目錄下的 robots.txt,而不是被屏蔽的頁面 URL,需要区分開。
- 缓存了舊的抓取队列:搜尋引擎可能在其他地方已经“排队”了這個 URL,Disallow 生效後,部分蜘蛛策略仍會尝试訪問一次,用 5xx 狀態碼来確認是否真的被屏蔽。
- 規則寫错或语法不匹配:比如寫成了“Disallow: /admin ”有多余空格,或者路径大小寫不一致,導致規則没命中。建议仔细核對。
- 其他搜尋引擎的蜘蛛:不是所有蜘蛛都完全遵循同一套 robots 标准,有的可能只检查域名級規則,有的則對嵌套目錄處理不同。如果日誌中是特殊 UA,需要單獨了解其規范。
正确使用 robots.txt 的建议
既然 robots.txt 不能阻止 URL 被發現,那么该怎么用它才合理?這里有几個實践方向:
- 只屏蔽不需要抓取的资源。比如後台管理頁面、脚本文件、重复的篩選參數等。记住,robots.txt 是拿来节省抓取額度的,不是拿来“保密”的。
- 确保站点地图 URL 不被 Disallow。如果 sitemap 地址被自己屏蔽,蜘蛛就看不到你提交的更新了。
- 為重要目錄设計清晰的連結路径。想让蜘蛛發現新内容,就要保證新 URL 能從首頁或内頁被正常連結找到,而不是完全依赖提交。
结语
蜘蛛池也好,普通站点也好,理解 robots.txt 的邊界都是基本功。它控制的是抓取動作,而不是發現過程。你的目标是让搜尋蜘蛛高效地找到並抓取有效 URL,同时避免浪費资源在無用頁面上。因此,與其指望用 robots.txt 隐藏連結,不如從源头控制連結结构,配合正确的狀態碼和 meta 标簽,才能让 URL 的抓取和收錄變得自然可控。