對多數蜘蛛来说,抓取一個站点的第一步往往不是首頁,而是根目錄下的 robots.txt。它决定接下来哪些路径允许被訪問。這個文件寫得太随意,影响的不只是某個頁面是否被抓,而是整條 URL 發現鏈路還能不能走通。
Disallow 拦的是抓取,不是索引
一個常见誤解是:把頁面 Disallow 掉,就等于不让它出現在搜尋结果里。實际情况是,蜘蛛無法抓取這個 URL,但如果站外或站内別處仍有連結指向它,它依然可能以“無摘要”的形式出現在结果中。想阻止索引,應该用 noindex,而前提是该頁面必须允许被抓取——否則蜘蛛讀不到 noindex 這條指令。
想让頁面不被索引,先得让它被抓到;不想让它被抓,就別指望 noindex 生效。
目錄級封禁如何改變 URL 發現
寫下 Disallow: /tag/ 這類規則後,蜘蛛不只是不進标簽頁,也不會再從标簽頁里顺着連結發現文章。列表頁、篩選頁、分頁同理。抓取路径是串联的:中間一段被封,後面的 URL 就少了一條被發現的路。
- 被封禁目錄里的内鏈無法繼續传递發現價值,等于把這一块從抓取图里摘掉。
- Sitemap 里提交的 URL 如果同时被 Disallow,通常也無法作為有效入口,清單作用大打折扣。
- 規則按最長匹配生效,寫得過宽时,可能连 CSS、JS、图片一起挡掉,渲染型頁面就更容易讀不完整。
通配符和结尾符,容易寫宽也容易寫窄
* 與 $ 的用法直接决定拦截范围。Disallow: /*?sort= 會把任何带 sort 參數的 URL 一並挡掉,包括你本来希望被發現的列表頁;而 Disallow: /search 挡不住 /search/。寫規則时,最好拿真實 URL 逐條對照,而不是凭印象判断。
Crawl-delay 與抓取节奏
部分蜘蛛會讀取 Crawl-delay,但主流搜尋蜘蛛並不完全依赖它,更多依據自身對服務器响應速度和站点质量的判断来調整频率。與其在這里设一個很大的值,不如先解决响應慢、连接不稳的問题。
robots.txt 本身返回什么狀態碼
這個文件自己也是被請求的 URL,它的返回狀態同样會影响行為:
- 200 且内容正常:按規則执行。
- 404:多數蜘蛛會视為没有限制,按可抓取處理。
- 5xx 或超时:部分蜘蛛會暂时降低或停止抓取,等文件恢复後再繼續。
- 被重定向到其他域名或登入頁:行為不确定,相当于把規則的解释權交了出去。
與 Sitemap、内鏈的配合
Sitemap 是候選清單,不能替代抓取路径。如果清單里的 URL 恰好落在 Disallow 范围内,這份清單基本失效。内鏈則是發現新 URL 的主干通路,被封鎖的目錄意味着那些等着蜘蛛顺連結走来的頁面,可能很久都等不到一次訪問。两者要一起看:允许被抓的目錄,才值得放進 Sitemap;放進 Sitemap 的目錄,也不该被規則挡住。
一份可以照着做的自查
- 打開 robots.txt,把每條規則拿到真實 URL 上逐條驗證。
- 检查是否有目錄級封禁,挡住了列表頁、标簽頁、分頁這類聚合入口。
- 確認 CSS、JS、图片等渲染资源没有被誤挡。
- 確認 robots.txt 返回 200,且没有跳轉到別的地址。
- 對照 Sitemap,看提交的 URL 是否與 Disallow 冲突。
- 改動後观察抓取日誌中對應目錄的訪問變化,作為驗證依據,而不是当作效果承诺。
小结
robots.txt 是一道门,不是一块牌子。它不只在回答“能不能抓”,也在悄悄决定蜘蛛還能顺着哪條路走、能發現多少新 URL。規則越简洁、越贴近真實目錄结构,抓取路径就越不容易在中途被截断。