给蜘蛛池入口頁做 robots.txt 屏蔽,是很常见的一步操作:有人想减少無關目錄被抓,有人誤以為屏蔽能“集中抓取權重”。但如果屏蔽的位置不對,最直接的後果就是搜尋蜘蛛压根不訪問入口頁,頁面上的目标 URL 自然也就無從被發現。下面按几種常见寫法分別說明。
先分清:robots.txt 管的是“能不能抓”,不是“能不能收錄”
robots.txt 是抓取协议,作用對象是爬虫的訪問行為。它不控制索引层面的判断,也不保證被屏蔽的頁面一定不出現。反過来,一個頁面没被屏蔽、能被抓,也不等于會被收錄。這两件事常被混在一起,導致很多誤判。
所以判断入口頁能不能给目标 URL 带路,第一件事是確認:蜘蛛到底會不會来讀這個 HTML。
三種常见屏蔽方式,结果完全不同
1. 直接 Disallow 入口頁本身
如果寫的是:
Disallow: /entry/
而入口頁正好在 /entry/ 目錄下,那么搜尋蜘蛛在抓取前就會放弃這個 URL。多數情况下它不會再請求頁面,也就看不到里面的連結列表。此时目标 URL 只能靠其他途径被發現,比如被別的頁面連結、被 sitemap 声明、被手動提交。
2. 只屏蔽静態资源目錄
如果屏蔽的是 /assets/、/js/、/img/ 這類目錄,而連結寫在 HTML 里,那么 HTML 仍可被抓,蜘蛛照样能解析出 a 标簽里的目标 URL。這種做法通常影响不大,前提是連結确實在 HTML 源碼里,而不是靠 JS 渲染出来。
3. 用 Disallow 屏蔽带參數的通配規則
有些站点為了阻止爬虫抓取篩選參數,會寫類似 Disallow: /*? 的規則。這類規則很容易誤伤:如果入口頁本身带參數,或者目标 URL 本身就带參數,结果可能一並被挡住。加規則前最好用工具逐條測試,不要凭感觉寫。
noindex 和 Disallow 不是一回事
有人给入口頁加了 noindex 就以為萬無一失,其實 noindex 属于索引层面:蜘蛛仍然會抓頁面、仍然會看到連結、仍然可能顺着連結去抓目标 URL。反過来,Disallow 才是让蜘蛛不抓。两者混用的典型後果是:入口頁没被抓,noindex 标簽压根没被讀到,頁面反而可能以其他形式出現。
如果你的目的是“入口頁別進索引,但連結照常被跟”,用 noindex 更贴合;如果目的是“別抓這個頁面”,才用 Disallow。目的不同,選的手段就不同。
怎么確認蜘蛛有没有来讀入口頁
- 看服務器日誌:篩選常见搜尋蜘蛛 UA,確認 /entry/ 這類路径是否有請求记錄,以及返回碼是否為 200。
- 用搜尋引擎的 robots.txt 測試功能:輸入入口頁 URL,看是否被規則命中。
- 站内搜尋或 site 指令观察入口頁是否出現在结果里,作為辅助參考,不作唯一依據。
- 检查入口頁是否有 JS 渲染依赖:若連結由前端脚本生成,即使 robots.txt 放行,也要確認蜘蛛能否拿到渲染後的 HTML。
更稳妥的做法
如果入口頁的职责就是给目标 URL 提供發現路径,一般建议:
- 让入口頁本身可被抓,返回稳定的 200。
- 只對确實無意义的目錄(如後台、临时文件、日誌)做屏蔽。
- 避免全站通配規則,規則越宽,誤伤概率越高。
- 定期用日誌驗證,規則和目錄结构變化後重新检查一遍。
robots.txt 只能表達“希望蜘蛛怎么抓”,最终抓不抓、多久抓、抓多少,由搜尋引擎自己决定。屏蔽了就一定不被抓、放行了就一定被抓,這两種想法都不成立。
回到最初的問题:入口頁被 robots.txt 挡住,上面的目标 URL 還有没有机會被發現?如果挡的是入口頁本身,通過這個頁面带路的机會基本就没有了;如果只挡了無關目錄,連結仍寫在可抓的 HTML 里,發現路径一般不受影响。先確認屏蔽范围,再谈優化,比反复換域名或加連結更有效。