robots.txt 常被当成一個“藏東西的地方”,但它實际是抓取通道的第一道闸门。它决定的是蜘蛛能不能下载某個 URL,而不决定這個 URL 會不會出現在搜尋结果里。這两件事被混在一起,是很多抓取問题的起点。
一、抓取與收錄是两件事
Disallow 只阻断抓取。如果一個被禁的 URL 從站外拿到了連結,搜尋引擎仍可能把它收進索引,只是没有摘要、没有正文,用戶点進去看到的是一個空壳结果。反過来,想让某個頁面不被收錄,正确顺序是让它能被抓取,然後由頁面返回 noindex;如果既 Disallow 又 noindex,蜘蛛讀不到那行 noindex,目的就落空了。
二、一條 Disallow 的真實成本
当整個目錄被屏蔽,蜘蛛不抓這些頁面,也就不會顺着頁面里的連結繼續往下走。代價有两层:這些 URL 本身很难被發現;被它們指向的下游頁面,也少了一條内鏈入口。所以在批量加規則之前,先看一眼被禁目錄里有多少條連結通向你還想被收錄的頁面。測試站全站屏蔽、上线时忘了删規則,是這類事故里最常见的一種。
三、通配符、Allow 與匹配顺序
- *:匹配任意長度的字符序列。
- $:表示 URL 到此結束,用来区分 /a 和 /a.html 這類後缀。
- Allow 與 Disallow 都能匹配时,按最長匹配優先;規則長度相同时 Allow 優先。具体行為建议以官方文档和實测為准。
几種常见寫法與它們的代價
- Disallow: /search:屏蔽站内搜尋结果頁,多數情况下合理;但如果站内搜尋頁有稳定的自然流量词,可以考虑只屏蔽结果參數,而不是整個目錄。
- Disallow: /*?:一刀切掉所有带參數的 URL,顺带把分頁、排序和追踪參數一起砍掉。用之前要想清楚哪些參數頁是要留的。
- Disallow: /*.js$ 與 /*.css$:蜘蛛拿不到渲染所需的资源,由 JS 生成的連結和内容可能就看不见了。
四、robots.txt 自己也會坏
這個文件本身也有狀態碼。返回 404,通常等同没有限制,全部可抓;返回 5xx,蜘蛛一般會先按“暂时全部允许”處理,過一段時間再来確認。如果它長期超时或持續报错,抓取的稳定性就會受影响。所以別把它放在临时重定向後面,也別让 CDN 的規則把它拦掉——它的可用性值得和首頁同等對待。
五、關于 Crawl-delay
Crawl-delay 是被多數主流搜尋蜘蛛忽略的字段。真正影响抓取节奏的是站点响應速度和服務器承载能力。想把抓取压下来,更可靠的做法是减少慢頁面和無用參數頁的入鏈,而不是在 robots.txt 里寫一個期望值。
六、可以逐條核對的清單
- robots.txt 返回 200,纯文本,没有被 HTML 包裹。
- Sitemap 里的 URL 没有被 Disallow 掉。两邊矛盾时,抓取通常以 robots.txt 為准。
- CSS、JS、图片目錄處于放行狀態。
- 需要保留訪問、不想收錄的頁面,用 noindex 處理,而不是 Disallow。
- 規則調整後,用官方測試工具加日誌一起驗證,確認蜘蛛走的是你预期的路径。
規則寫得越粗,蜘蛛手里的地图就越像被剪過——不是走不通,而是很多本来该去的地方,從来没被标出来。