把一批頁面寫進 robots.txt 的 Disallow 之後,過一阵去搜,發現它們還挂在索引里,這是很常见的困惑。原因其實不复杂:robots.txt 限制的是抓取,不是索引。地址一旦被拦在门外,蜘蛛就看不到頁面上的 noindex 声明,只能维持原来的判断。
先分清抓取、索引與展現三层
- robots.txt:入口管控,告诉爬虫哪些地址不必来抓。
- noindex(meta 标簽或 X-Robots-Tag 响應头):可以来抓,但不要放進索引,必须被成功抓取才能讀到。
- 404 / 410:頁面已不存在,是下线的自然信号。
- canonical:說明目前地址只是副本、正主在別處,属于合並信号,不等于刪除。
可以這样记:想让一個地址從索引里登出,得先让蜘蛛進得来、看得见“別收錄”的声明。先把门鎖上,声明也跟着被鎖在屋里了。
為什么屏蔽之後反而更难下线
已收錄的地址被 Disallow 之後,爬虫通常不會再請求它,也就讀不到之後新增的 noindex,頁面狀態容易停在舊版本上。更麻烦的是,如果這個地址還被站内連結、sitemap 或外鏈指向,蜘蛛依然能知道它存在,只是不進去看,索引里的舊快照就可能長期不動。
還有一種情况:為了减少服務器压力而整目錄屏蔽,结果目錄里那些本该下线的頁面既抓不到也删不掉,只能等着慢慢過期。
内容下线时的推荐顺序
- 先確認頁面属于哪一類:彻底刪除、迁到新地址,還是保留但不想被搜到。
- 如果是保留但不希望被索引:先撤销對它的 robots.txt 屏蔽(至少允许该地址被抓取),再加上 noindex。
- 如果是彻底刪除:让地址返回 404 或 410,不要让 200 加空内容、或跳到一個無關頁面来顶替。
- 如果内容已迁走:用 301 指到新地址,並确保舊地址没有同时挂着 noindex。
- 從 sitemap、站内導航、相關推荐里撤掉指向该地址的連結,减少它被反复發現的机會。
- 過一段時間再检查索引狀態,確認舊地址确實登出後,才考虑把 robots.txt 的屏蔽加回去。
几個高频誤會
以為屏蔽等于刪除
屏蔽只是不欢迎来抓,索引里已有的记錄不會因此自動消失。想让它消失,要么明确 noindex,要么让地址真實返回 404 / 410。
noindex 和 Disallow 同时開着
两者同时存在时,屏蔽往往先起作用,noindex 反而讀不到。要么只屏蔽、接受它可能長期留在索引里;要么先允许抓取、用 noindex 完成下线,两者不要叠在一起處理同一個地址。
整站屏蔽後再想放開
測試站或临时屏蔽整站之後忘记撤销,會让正常頁面一起從索引里淡出。恢复时按目錄或按环境逐條放開,比一次性全開更容易观察影响。
noindex 寫在脚本里
如果 noindex 依赖前端脚本注入,抓取和渲染任何一环没跟上,声明都可能讀不到。能放在 HTML head 或响應头里的,就放在那里。
動手前的自查清單
- 目标地址是否同时被 robots.txt 屏蔽和 noindex 声明覆盖?
- 是否需要放開抓取權限,noindex 才可能生效?
- sitemap、站内連結、结构化資料里是否還留着该地址?
- 刪除的頁面返回的是 404 / 410,還是 200 的空壳?
- 被其他域名镜像或轉载的版本,是否需要單獨處理?
把這些顺序理清之後,下线動作會變得可预期:先判断頁面去留,再决定用哪種信号,最後才是收紧抓取權限。顺序反了,信号就传不到。