抓取權限和索引權限,是两套開關
很多人在搭蜘蛛池的时候,把注意力放在入口頁數量、連結结构和跳轉方式上,却忽略了最底层的一段配置:robots.txt 和頁面里的 meta robots。這两個東西寫错,前面做的優化可能直接失效——蜘蛛要么進不来,要么進来了也看不到该看的連結。
先明确分工:robots.txt 管的是能不能抓,它是放在域名根目錄下的文本文件,告诉爬虫哪些路径可以訪問;meta robots(以及 HTTP 响應头里的 X-Robots-Tag)管的是要不要收錄,属于頁面級的索引指令。两者互相獨立,不能互相替代。
robots.txt 是约定,不是防火墙。它拦不住恶意爬虫,但正規搜尋引擎爬虫會遵守,所以配错的时候,吃亏的往往是自己。
入口頁最常见的四類配置错誤
- 整站 Disallow: /。測試环境改上线时忘了删,爬虫進来只能讀到一行 robots.txt,其余全被拒。表現是日誌里大量 403,或者只請求 /robots.txt 就离開。
- 入口頁被加了 noindex。頁面能抓、連結能跟,但這個 URL 不會進索引。如果入口頁本身是需要被索引来做 URL 發現的,等于把發現通道關掉了一半。
- robots.txt 返回 5xx。404 通常被理解為没有限制,但 500、502 這類错誤可能让爬虫降低抓取频率,甚至暫停一段時間再来。
- 全站連結挂 nofollow。有些模板為了所谓集中權重,给所有連結统一加 nofollow,结果入口頁到目标頁的路径也一起被掐断,蜘蛛没有可走的路。
比較稳妥的分层配置
第一层:robots.txt 只拦没有抓取價值的路径
後台目錄、站内搜尋结果頁、带大量參數的篩選頁、临时測試目錄,這些通常没有让蜘蛛訪問的必要,可以 Disallow。寫路径时要寫全,比如 Disallow: /search,不要寫成 Disallow: search,後者的匹配结果不一定符合预期。
第二层:入口頁允许抓取
入口頁的作用是给蜘蛛提供入口,一般不建议屏蔽。如果某類入口頁纯粹是跳轉层、不需要出現在搜尋结果里,可以用 noindex, follow:允许蜘蛛顺着連結繼續走,但頁面本身不進索引。這個组合在跳轉层比較常见。
第三层:確認目标頁没有被誤伤
批量生成頁面时,meta 标簽常常是通過模板统一注入的。要检查 noindex 這類指令有没有跟着模板跑到目标頁上。做法很简單:随机抽几條目标 URL,直接看源碼里的 meta robots,或者用命令行工具看响應头里有没有 X-Robots-Tag。
一個容易踩的坑:robots 和 meta 的冲突
如果某個 URL 在 robots.txt 里被 Disallow,爬虫就不會去請求它,自然也就讀不到頁面里的 meta noindex。结果是這個 URL 仍然可能以無摘要的形式出現在索引里,因為搜尋引擎從別處拿到了連結。想阻止索引,正确做法是放行抓取、再加 noindex;想彻底不让抓,才用 robots.txt,但這时就不要指望 noindex 生效。
部署後怎么驗證
- 用搜尋引擎官方的 robots.txt 測試工具跑一遍,確認目标路径是被允许還是被拦截。
- 看服務器訪問日誌,篩選入口頁路径,观察返回碼是 200、403 還是 404,有没有異常集中的拦截。
- 抽查目标頁源碼和响應头,確認没有多余的 noindex、nofollow。
- 模板或 CMS 升級後重新跑一遍上面的检查,這一步最容易被跳過。
寫在最後
robots.txt 和 meta robots 不會直接带来收錄,它們只能决定蜘蛛能不能看、要不要留。把這两項配清楚,至少不會让前面做的入口頁和連結结构白白浪費。建议把這几條做成一份检查清單:路径是否寫全、入口頁是否放行、跳轉层是否用 noindex follow、目标頁有没有被模板誤伤、robots.txt 是否稳定返回 200。