不少站長改完 robots.txt 之後,會盯着日誌等一個结果:昨天已经 Disallow 的路径,今天怎么還有蜘蛛在抓?于是開始怀疑規則寫错了、蜘蛛不听话,或者服務器返回了错誤内容。多數情况下,問题不在規則本身,而在于你把 robots.txt 当成了一個實时開關。
對蜘蛛来说,robots.txt 也是一個普通文件,需要先抓取、再讀取、再應用。這個過程中存在缓存和抓取周期,新規則從發布到被真正执行,中間會有一段延迟。
robots.txt 自己也會被缓存
蜘蛛不會每次訪問站点前都重新下载一遍 robots.txt。它會在本地儲存一份,並按自己的节奏回訪更新。不同蜘蛛、不同站点規模、不同抓取压力下,這個回訪間隔並不固定,常见的是几小时到一天左右,也可能更長。
也就是说,在你修改文件的那一刻,蜘蛛手里可能還拿着上一次抓到的版本。它繼續按舊規則抓取,並不代表新規則無效,只是還没轮到重新讀取。
把 robots.txt 理解為一份“定期同步的约定”,而不是“即时下發的命令”,很多現象就解释得通了。
影响生效時間的几個變量
- 蜘蛛的抓取周期:抓取频繁的站点,robots.txt 回訪也更勤;小站或新站可能間隔更久。
- 缓存头設定:如果服務器或 CDN 给 robots.txt 設定了較長的缓存時間,蜘蛛和中間层都可能繼續返回舊内容。
- 規則變化幅度:只調整某條路径,和整份文件大改,蜘蛛的處理没有本质区別,但大改後更容易被观察到。
- 上次抓取時間:如果你刚好在蜘蛛上次抓取後不久修改,等待時間就會接近一個完整周期。
- 文件可用性:robots.txt 返回 5xx 或超时,蜘蛛可能暂时沿用舊規則或采取保守策略,而不是立刻接受新規則。
怎么確認新規則已经生效
與其反复刷新日誌焦虑,不如按下面几步做一次確認。
- 在服務器日誌里篩選 /robots.txt 的請求,看最近一次抓取發生在什么时候,返回狀態碼和响應字节數是否正常。
- 如果日誌顯示蜘蛛已经重新抓取,並且返回 200、内容長度與你修改後的文件一致,說明新版本已经被取走。
- 繼續观察被 Disallow 的路径,看是否還有新的抓取记錄。注意区分修改前残留的請求和修改後新發起的請求。
- 用搜尋平台提供的抓取測試工具或 robots.txt 測試功能,確認規則语法没有寫错,尤其是通配符和结尾匹配。
- 如果站点前面有 CDN 或反向代理,检查這一层是否缓存了 robots.txt,必要时主動刷新该文件的缓存。
几個容易踩的坑
- 用 Disallow 處理已收錄頁面:robots.txt 管的是抓取,不是移除。已经進入索引的 URL,屏蔽抓取後可能仍然留在结果里,只是蜘蛛看不到最新内容。
- 規則寫得太宽:一條不小心覆盖全站的 Disallow,會让蜘蛛在重新讀取後迅速减少抓取,恢复时同样需要等待下一個周期。
- 改完立刻删舊規則:如果你在排查問题,最好保留修改记錄,方便對照日誌判断哪一版規則在起作用。
- 忽略小众蜘蛛:不同蜘蛛讀取 robots.txt 的频率不同,主流量蜘蛛生效了,不代表所有抓取工具都已同步。
改完之後的稳妥做法
修改 robots.txt 之前先想清楚目标:是减少無效抓取,還是临时屏蔽某個目錄。改完後不要反复来回改,给蜘蛛留出一個完整的回訪周期。與此同时,保持服務器稳定、robots.txt 可正常訪問,並让 Sitemap 和内鏈繼續提供清晰的 URL 线索。
如果几天後日誌里仍然没有新的 robots.txt 抓取记錄,再去检查服務器狀態、CDN 缓存和文件權限。大多數“蜘蛛不遵守新規則”的情况,只是更新還没走到它手里。