做蜘蛛池入口頁的人经常問一個看起来很简單的問题:到底要不要在 robots.txt 里把入口頁 Disallow 掉?回答之前,需要先把“不想被抓取”和“不想被收錄”分開,因為這两件事由完全不同的机制控制。
Disallow 和 noindex 分別管什么
robots.txt 里的 Disallow 管的是抓取。搜尋引擎蜘蛛訪問某個 URL 之前,通常會先讀该域名根目錄下的 robots.txt。如果發現這條路径被 Disallow,它一般會直接放弃這次請求,不會去加载頁面内容,自然也就看不到頁面里寫的任何連結。
noindex 管的是收錄。它寫在頁面的 meta 标簽里,或者寫在响應头的 X-Robots-Tag 里,前提是蜘蛛已经成功抓取了這個頁面,才讀得到這條指令。讀到之後,它不會把頁面放進索引,但頁面里的連結该發現還是能發現。
入口頁到底该選哪一種
如果你根本不想让蜘蛛進来
那 Disallow 是對的,但這时候入口頁作為“蜘蛛池”的意义也就没了——蜘蛛進不来,里面的目标 URL 也不會被它看到。所以這個選擇只适用于纯粹不想被任何搜尋引擎碰的站点。
如果你想让它被抓、但不想它出現在结果里
用 noindex,不要用 Disallow。入口頁通常就是為此设計的:蜘蛛能進来讀 HTML,能顺着里面的連結走過去,但入口頁本身不會占一個搜尋结果位置。這也解释了一個常见現象——robots.txt 里明明 Disallow 了,入口頁還是出現在结果里。原因是它被外鏈指向、被別的抓取路径發現了,Disallow 只挡住了抓取,挡不住索引。
如果两者一起用
同时 Disallow 和 noindex,结果往往是 noindex 根本讀不到:蜘蛛被 Disallow 挡在门外,没机會加载頁面,也就没机會看到 noindex。這两個指令叠加不會“更保險”,只會让 noindex 失效。
寫入口頁 robots.txt 的几個實际注意点
- robots.txt 必须放在域名的根目錄,子域要各寫一份,a.example.com 的規則不适用于 b.example.com。
- 規則是按路径前缀匹配的,Disallow: /tmp 同样會挡住 /tmpabc;路径结尾加不加斜杠,含义不一样。
- 同一個 User-agent 分组里不要塞互相冲突的規則,分组的顺序會影响最终匹配结果。
- robots.txt 如果返回 5xx,搜尋引擎一般會当成“暂时讀不到”,可能暫停抓取;返回 404 通常被理解為“没有任何限制”,等于全放開。
- 文件太大,或者被 CDN、反向代理缓存了舊版本,都可能让新規則迟迟不生效。改完记得直接請求一次,確認线上真實返回的内容。
容易踩的坑
一個常见的誤区是把希望全寄托在 robots.txt 上,以為寫了 Disallow 入口頁就會“隐身”。影响收錄的因素很多,外鏈、被轉载、不同搜尋引擎的實現差异,都可能让入口頁出現在结果里。真想控制收錄,允许抓取再加 noindex 更直接。
另一個誤区是入口頁和目标站共用同一份 robots.txt。两者關注点不同:入口頁希望被爬但不想被收錄,目标站通常希望被正常抓取和收錄。放在同一域名下,規則會互相牵制,改一邊就會動到另一邊。
先想清楚你要的是“別抓”還是“別收錄”,再决定寫 Disallow 還是 noindex。顺序反了,两件事都會做不成。
最後提醒一句,robots.txt 只是一個约定,遵守與否取决于抓取方。它适合用来表達你的意愿,不适合当成訪問控制手段。真正需要限制的路径,還是從服務器层面做驗證或限流更靠谱。