robots.txt 只做一件事:告诉搜尋蜘蛛哪些 URL 不要来抓。它不负责让内容出現,也不负责让内容消失。理解這一点,很多關于入口頁的困惑就解開了。
抓取许可和連結發現是两碼事
連結被發現,通常来自三個渠道:別的頁面上的超連結、sitemap、以及外部站点的指向。入口頁里的目标連結属于第一種,前提是搜尋蜘蛛真的抓取了這個入口頁,拿到了 HTML 源碼,才能從中解析出連結地址。
如果 robots.txt 把入口頁本身屏蔽了,蜘蛛一般不會去請求這個 URL,自然也讀不到里面的連結。這时候“入口頁里放了哪些連結”對蜘蛛来说是看不到的。
屏蔽入口頁之後,通常會發生什么
- 入口頁 URL 依然可能被蜘蛛“知道”(別人鏈過来、sitemap 里寫過),但不會去抓取;
- 入口頁内部的目标連結,不會因為這一次屏蔽而被發現;
- 如果這批目标 URL 還有別的来源,比如 sitemap、其他可抓取的入口頁、外部連結,它們照样可能被抓;
- 已经被抓取並建立索引的舊頁面,不會因為新增一條 Disallow 就立刻從索引里消失。
別把 Disallow 和 noindex 混為一谈
noindex 需要蜘蛛抓到頁面才能看到;Disallow 是让蜘蛛压根不要抓。两者一起用,noindex 往往永遠生效不了,因為蜘蛛根本没机會讀到它。
如果你只是不想让入口頁出現在搜尋结果里,但仍然希望蜘蛛通過它發現目标連結,通常的做法是“可抓取 + noindex”。一旦改成屏蔽抓取,就同时切断了連結發現的路径。
蜘蛛池里常见的几類誤配置
- User-agent 分组寫错:多组規則堆在一起,蜘蛛可能只匹配到其中一组,實际屏蔽范围比你以為的大。
- 通配符用過头:比如寫成 /pool*,會顺带把 /pool-a/、/pool-tools/ 這類路径一起挡住。
- 入口頁禁了,目标連結却在同目錄:本想屏蔽入口目錄,结果目标連結也在同一路径下被一起挡掉。
- 直接寫 Disallow: /:一次挡住整站,這是最常见也最伤的寫法。
- 測試环境寫過 Disallow,上线忘了删:线上長期保持屏蔽狀態,自己却以為一直没動過。
怎么確認到底卡在哪一层
- 看服務器日誌:有没有對入口頁 URL 的抓取請求,来自哪些 UA,返回碼是什么;
- 用搜尋引擎站長平台提供的 robots.txt 測試工具,確認某條具体 URL 是否被屏蔽;
- 把 robots.txt 原文打開,逐條核對大小寫、结尾有没有 $、是否有多余空格;
- 對入口頁 URL 做一次抓取測試,看返回的是頁面内容還是被拒。
實际建议
想让入口頁承担連結分發的角色,就让它保持可抓取。担心入口頁本身占索引,可以给它 noindex,但不要屏蔽抓取。反過来,如果你已经不打算让蜘蛛走這個入口,就把它当普通頁面處理,別指望里面的連結還能被顺带發現——目标 URL 的發現工作要交给 sitemap 或別的可達頁面。
最後提醒一句,以上都是概率层面的判断,最终以實际日誌和索引情况為准,任何配置都無法保證一定被抓取或一定被收錄。