在 robots.txt 里寫了 Disallow,過一阵再去搜,發現那條地址還挂在索引里,有的甚至還能看到舊标题和舊摘要。于是有人以為規則没生效,回头反复改寫法。其實這是两類動作被混在一起了:robots.txt 管的是能不能抓,索引管的是這條地址要不要留在库里。
為什么屏蔽了還會出現在索引里
搜尋引擎發現 URL 的渠道很多:站内連結、外鏈、sitemap、歷史抓取记錄,甚至用戶主動提交。發現之後,它不需要抓取正文,也能先把這條地址记下来。robots.txt 只禁止抓取,不禁止“知道這個地址存在”。
更麻烦的是顺序問题:一旦頁面被 Disallow,爬虫就抓不到内容,也就讀不到頁面上寫的 noindex。两邊同时落空——既不给抓,又拿不到移除指令,索引里便留下一條没有摘要、或者停留在舊版本的记錄。
先確認屏蔽范围對不對
動手之前先花几分钟核對規則本身,因為最常见的失誤是誤伤。
- 規則里有没有通配符或目錄級寫法,把不该屏蔽的路径一起圈進去,例如一條規則盖住了整站或整個栏目。
- CMS、插件、缓存层有没有自動生成 Disallow 行,手動加的和自動加的叠在一起。
- 是否存在多份 robots.txt:測試环境、CDN 邊缘节点、主域和子域各返回一份,你看到的那份未必是爬虫拿到的那份。
- 用官方測試工具驗證某個具体 URL 是被允许還是被拦截,而不是凭規則字面去猜。
范围確認清楚之後,再回头看索引里的残留记錄:它是完全没有摘要,還是仍挂着舊标题,還是能正常展示。形態不同,處理方式也不同。
按頁面去留分成两種處理
頁面不要了
- 先把该地址從 robots.txt 的屏蔽名單里移出去,让它能被抓取。
- 同步让頁面返回 404 或 410,或者保持 200 並在頁面上加 noindex,二選一,不要同时上。
- 確認 sitemap 里不再列出這條地址,站内指向它的連結也一並撤掉。
- 等待重新抓取,观察索引记錄的變化。量大的话分批推進,別一次全放開。
顺序不能反。很多人先把 noindex 加上、又留着 Disallow,结果爬虫根本進不来,noindex 等于没寫。
頁面要保留,只是不想被抓
這種需求本身值得再想一遍:如果頁面有價值、有内鏈入口、有外鏈指向,屏蔽抓取並不會让它從索引里消失,反而會让它以残缺形態繼續存在。要么接受這個形態,要么把它改成一個允许公開抓取、但明确 noindex 的頁面,让指令能被真正讀到。
几個容易漏掉的入口
- sitemap 文件里還在列被屏蔽的地址,這等于主動提醒搜尋引擎去發現它。
- 舊頁面的跳轉、站内推荐位、评论区、RSS 里残留着這些連結。
- 外鏈和轉载把地址带到了站外,這部分你控制不了,只能靠頁面自身的信号收口。
屏蔽抓取和移除索引是两件事。想让索引里不再出現,前提通常是先让它能被抓,然後由頁面自己给出明确態度。
別指望改完立刻见效
索引记錄不是實时同步的。改完規則就马上去搜,大概率還看得到舊结果,這類變動以天甚至周為單位。频繁改規則只會让狀態更难判断。记錄下每次改動的時間和内容,隔一段時間用同一批 URL 對照,比一天查三次有用得多。
把“能不能抓”和“要不要留”分開看:先核對屏蔽范围有没有誤伤,再按頁面去留决定動作顺序,最後清理還在往這些地址上引的入口,大多數残留记錄都能理清。