做入口頁时,很多人會顺手在 robots.txt 里加一條 Disallow,想低調一点,別让入口頁本身被收錄。但這样做的同时,往往會连带影响目标 URL 的發現。這篇把机制说清楚。
先说结论
如果 robots.txt 明确禁止搜尋蜘蛛抓取入口頁,蜘蛛就不會下载這個頁面的 HTML,也就没有机會解析里面的 a 标簽,目标 URL 自然不會被從這條路径發現。robots.txt 挡的是抓取動作,不是索引结果,這一点常被混淆。
為什么禁止抓取會直接断掉連結路径
URL 發現依赖的是一個鏈條:蜘蛛先拿到入口頁的响應体,再去解析 HTML 里的連結。如果第一步被 robots.txt 拦住,蜘蛛只能看到一份禁止訪問的規則狀態,頁面内容對它来说是不存在的。
注意区分两種情况:
- 入口頁被 Disallow:蜘蛛不抓内容,頁面里的連結不會被解析。
- 入口頁返回 404 或 403:蜘蛛尝试過抓取但失敗,同样拿不到連結。
两者的共同点是,連結發現的鏈條都断在了入口頁這一环。
它和 noindex、nofollow 不是一回事
meta robots 的 noindex 需要蜘蛛先把頁面抓下来讀一遍才起作用;robots.txt 的 Disallow 是抓取前的拦截。顺序不同,结果也不同:
- 只寫 noindex:蜘蛛仍會抓取頁面,能讀到里面的目标連結,只是该入口頁本身可能不進索引。
- 只寫 Disallow:蜘蛛根本不讀頁面,頁面里的連結也讀不到。
- 两者同时寫:如果頁面被 Disallow,爬虫就不會看到 noindex,noindex 基本失效。
想让入口頁自己不進索引、但保留連結發現能力,通常更适合用 noindex 而不是 Disallow。
几種常见的誤伤寫法
- 整站寫成 Disallow: /,本意是屏蔽後台,结果把入口頁和站内正常頁面一起挡了。
- 規則寫成 Disallow: /pool,但入口頁路径是 /pool-entry/xxx,前缀不匹配或匹配過头都可能出問题。
- CDN 或 WAF 返回了一份預設 robots.txt,站長没留意,規則和源站的不一致。
- robots.txt 里没寫 Disallow,但寫了很長的 Crawl-delay,蜘蛛進站频率被压得很低,URL 發現速度明顯變慢。
這些寫法不一定让蜘蛛完全發現不了連結,但會让發現效率變差,或者把本来该抓的頁面挡在外面。
如果确實想限制入口頁,怎么做更稳妥
- 先確認目的是入口頁別被收錄,還是入口頁別被抓取。前者用 noindex,後者才考虑 robots.txt。
- robots.txt 的屏蔽范围尽量寫细,只针對具体目錄,不要用全站通配。
- 用 Search Console 的 robots.txt 測試工具或抓取日誌確認規則的實际命中结果。
- 入口頁上保留可被解析的普通 a 标簽,避免完全依赖 JS 渲染或表單提交。
- 目标 URL 另外通過 sitemap 等常規渠道声明,不要把發現路径全押在入口頁上。
自查清單
- robots.txt 里有没有意外覆盖入口頁目錄的 Disallow 規則。
- 入口頁返回的狀態碼是否正常,有没有出現 403、429 這類被拦截的响應。
- 入口頁的 HTML 里是否存在可抓取的静態連結。
- 蜘蛛抓取日誌里,入口頁的抓取记錄是否還在持續出現。
小结
robots.txt 屏蔽入口頁,等于把連結發現的第一环剪断。蜘蛛既不會讀到入口頁内容,也不會顺着它找到目标 URL。真正需要限制的往往是入口頁的收錄狀態,而不是抓取權限,這两件事分開處理,很多問题就不會互相牵连。具体能發現多少、多久發現,還取决于抓取预算、連結结构和蜘蛛的調度,實际效果要通過日誌和站点資料去观察。