robots.txt 是蜘蛛進入站点时最先讀的文件之一,它不控制收錄,只控制抓取。也正因為作用直接,一處寫错就可能让整批 URL 在短時間内從抓取日誌里消失。麻烦的是,這類問题通常没有任何报错,只有在日誌里才能看到抓取量突然掉下去。
匹配規則:前缀匹配,Allow 與 Disallow 比長度
多數搜尋引擎對 robots.txt 的處理是前缀匹配,而不是正則表達式。寫 Disallow: /news 會同时挡住 /news、/news/1、/newsletter 這類同前缀路径。如果只想挡目錄,寫成 /news/ 更稳妥。
当 Allow 和 Disallow 同时命中时,通常按規則越長越優先来判定,長度相同时 Allow 優先(各引擎略有差异)。所以想放開某個子目錄,可以寫一條更長的 Allow 覆盖掉更宽的 Disallow。
- 通配符 * 匹配任意字符,$ 表示结尾,二者支持程度因引擎而异,不要把核心規則押在這上面。
- 路径区分大小寫,/Images/ 和 /images/ 是两條不同的規則。
- User-agent 分组用空行分隔,同一分组的規則要寫在一起,中間不要插入別的 agent。
三類最容易誤伤的寫法
一、顺手屏蔽资源目錄
為了减少抓取,有人會把 /js/、/css/、/static/ 一起屏蔽。渲染型蜘蛛如果拿不到這些文件,頁面内容可能拼不出来,抓到的就是一個空壳。资源文件确實占抓取配額,但省下的那点配額,通常抵不上頁面渲染失敗的代價。
二、用屏蔽代替頁面下线
頁面已经废弃,與其在 robots.txt 里 Disallow,不如让它返回 410 或 404,並把内鏈清理掉。被 Disallow 的 URL,蜘蛛拿不到狀態碼,頁面會長期停留在未知狀態,反而拖長處理周期。
三、拿 Disallow 当限速器
robots.txt 里的 Crawl-delay 只有部分引擎支持,主流引擎並不一定認。真正的限速應该靠 429 加 Retry-After 這類响應信号,或者直接提升服務端承载能力,而不是在規則文件里绕弯。
改完之後怎么驗證
- 把 robots.txt 完整抓下来一份,確認返回 200 且内容是最新版本,没有被 CDN 缓存住舊文件。
- 挑几條有代表性的 URL 逐條對規則:首頁、栏目頁、詳情頁、资源文件、带參數的頁面。
- 在搜尋引擎提供的抓取測試工具里跑同一批 URL,看结果是否和你的判断一致。
- 改動後的三到七天盯着抓取日誌,看總請求量和重点目錄的請求量有没有異常下滑。
文件本身也要可靠
robots.txt 返回 5xx 或超时,比返回 404 更麻烦:部分引擎會降低抓取节奏甚至暫停抓取,等文件恢复稳定後再逐步放量。所以它最好是一個静態文件,不经過复杂逻辑、不依赖資料库,CDN 缓存時間別设太長,改動之後要能及时刷新。
Sitemap 声明可以放在 robots.txt 里,但別寫错域名和大小寫。声明存在的意义只是给蜘蛛一個額外入口,並不等于頁面一定被收錄。
robots.txt 的每一條規則,最终都會在抓取日誌里留下對應结果。改之前先想清楚要挡的是哪一類 URL,改之後用日誌驗證,比反复猜测有效得多。