為什么屏蔽了還在索引里
经常遇到一種情况:某個頁面已经在 robots.txt 里寫了 Disallow,過了一段時間去搜,结果還在。于是判断「robots.txt 没用」。其實不是没用,而是用错了地方。robots.txt 管的是抓取,不管索引。当蜘蛛被挡在门外,它拿不到頁面目前的内容,也讀不到頁面里的 noindex,只能繼續沿用之前那一版快照。屏蔽得越早,舊版本留存的時間可能越長。
先把三段鏈路分開
- 抓取:蜘蛛能不能把頁面下载下来,受 robots.txt、服務器狀態、抓取预算影响。
- 索引:下载到的内容要不要存進索引库,受 noindex、canonical、内容质量影响。
- 展示:用戶查询时這條结果是否出現,受相關性、排序、地区語言等影响。
robots.txt 作用在第一段,noindex 作用在第二段。想让頁面從索引里消失,却只在第一段動手,等于關掉了门却指望屋里的人自己走。
想移除一個 URL,推荐的操作顺序
- 先確認這個 URL 現在還能不能被抓取。如果已经被 robots.txt 屏蔽,第一步是把屏蔽放開,让蜘蛛能正常訪問。
- 在頁面返回 200 的前提下,加上 noindex,或者通過响應头下發 X-Robots-Tag: noindex。注意 noindex 只有被讀到才生效,讀不到等于没寫。
- 保持這個狀態,等蜘蛛重新抓取。期間不要反复改動指令,来回切換會让狀態很难判断。
- 確認该 URL 從索引里消失之後,如果目的是省抓取预算,再考虑用 robots.txt 屏蔽它。
- 如果頁面本身已经不打算保留,直接返回 410 或 404 往往比 noindex 更干脆,因為狀態碼本身就說明頁面不存在。
- 需要更快處理时,可以使用搜尋引擎提供的移除工具,但它通常只是临时措施,長期還是要靠頁面自身的狀態。
顺序的核心是一句话:先让它能被抓到,再告诉它不要索引。
robots.txt 是给抓取用的,noindex 是给索引用的,两者解决的不是同一個問题。
几種意图對應的做法
- 頁面要留着给人看,只是不想出現在搜尋里:用 noindex, follow,頁面可以正常訪問,内鏈也可以繼續传递。
- 頁面彻底不要了:返回 410 或 404,或者用移除工具,不要用 301 指向一個毫不相關的頁面。
- 只是不想被下载,比如某些资源文件:用 robots.txt,但要清楚它不會让已经進入索引的 URL 自動消失。
- 參數頁、篩選頁這類重复版本:先確認哪個是主版本,再决定是收敛到主版本還是整体 noindex。
容易弄反的几處细节
- 先 Disallow 再加 noindex。顺序反過来,蜘蛛進不来,noindex 永遠讀不到,頁面就一直留着。
- 只在 robots.txt 寫 Disallow,就等着頁面從索引消失。多數情况下它不會消失,只是内容變舊。
- 加了 noindex,但頁面返回 404 或 5xx。這时候 noindex 讀不到,真正起作用的是狀態碼。
- noindex 加在 A 版本上,實际被抓取和索引的是 B 版本,指令落空。
- canonical 指向一個頁面,noindex 又寫在目前頁,两個信号互相矛盾,最终结果不好预判。
核對顺序小结
遇到「屏蔽了還在索引里」,按這個顺序看一遍:抓取狀態是否放行、HTTP 狀態碼是什么、索引指令寫在頁面還是响應头、目前索引狀態處于哪一档、查询时是否還能展示。一层一层往下走,別跳步。多數問题不是指令没用,而是指令加在了它起不到作用的那一层。