發現某個頁面不该被搜到时,很多人的第一反應是在 robots.txt 里加一條 Disallow。過几周再去搜,頁面還在,于是判断“屏蔽無效”。其實問题往往不在屏蔽本身,而在于用错了顺序,或者把两件不同的事当成了一件。
robots.txt 管的是抓取,不是索引
robots.txt 的作用是告诉爬虫:這個 URL 不要来抓。它属于抓取层面的限制。而頁面是否進入索引,取决于搜尋引擎是否已经抓到了這個頁面,並判断它值得保留在索引中。
一個已经被抓取並收錄的頁面,即使随後被 robots.txt 屏蔽,搜尋引擎不會因為抓不到就立刻把它移出索引——它手里還留着之前抓到的内容副本。更麻烦的是另一種情况:頁面從没被抓過,你用 robots.txt 把它挡在外面,爬虫永遠讀不到頁面里的 noindex 标簽,也就無從知道你想让它登出。如果這個 URL 通過外鏈、站点地图或其他途径已经被搜尋引擎知道,它仍可能以僅有 URL 的形式出現在结果里。
几種常见的错誤组合
- 頁面已经被收錄,只在 robots.txt 里加了 Disallow,頁面上没做任何處理。
- 同时用了 robots.txt 屏蔽和 noindex 标簽。noindex 因為頁面抓不到而無法被讀取,等于白寫。
- 測試站或測試环境用整站 Disallow,上线後忘了删,導致已有頁面的更新長期無法被抓取。
- 只對部分 UA 做屏蔽,另一類爬虫照常抓取,狀態判断因此出現偏差。
- noindex 和 canonical 同时把頁面指向別處,两個信号互相冲突。
想让頁面登出索引,顺序應该是這样
- 先確認頁面目前狀態:是已经收錄,還是僅有 URL 被索引。
- 让頁面重新可以被抓取:删掉或放開 robots.txt 中针對该頁面的 Disallow。
- 在頁面上加 noindex,可以通過 meta robots 标簽,也可以通過 X-Robots-Tag 响應头。
- 等待搜尋引擎重新抓取该頁面,確認 noindex 已经生效,頁面逐步從索引中消失。
- 確認消失之後,如果還想减少無意义的抓取消耗,再考虑用 robots.txt 屏蔽抓取。
這個顺序的關键只有一句:noindex 必须先被抓取才能被讀到,所以開放抓取是前置條件,不能反過来。
已经收錄的頁面多久會消失
没有固定時間。它取决于頁面被重新抓取的频率、站点整体情况、頁面本身的重要程度等。能做的加速動作是:在站長工具里提交移除請求作為短期處理,同时用 noindex 做長期處理;减少指向该頁面的内鏈和外鏈,降低它在站内的權重传递。
不要指望提交一次就立刻消失。搜尋引擎需要重新抓取並處理,中間存在時間差,几周甚至更久都有可能。
批量下线时的注意事項
整站改版、批量下线栏目的场景,顺序更要注意。如果直接把 robots.txt 寫成 Disallow: /,搜尋引擎抓不到頁面,也就看不到你的 noindex 或者 404、410 狀態,已有的收錄可能長期留在索引里,形成“明明下线了還能搜到”的结果。
比較稳妥的做法是:先保持頁面可抓取,让頁面返回 410 表示永久刪除,或者加上 noindex;等大部分頁面從索引中消失後,再整体屏蔽抓取。如果站点只是临时维護,用 503 而不是 404,避免把正常頁面誤标成已刪除。
自查清單
- 用站点查询或 URL 检查工具,確認頁面現在到底在不在索引里。
- 打開 robots.txt,確認目标 URL 没有被自己誤屏蔽。
- 確認頁面 HTML 或响應头里确實有 noindex,而不是靠 JS 後置注入。
- 確認 noindex 頁面没有被 canonical 指向別處,避免信号打架。
- 在服務器日誌里確認爬虫近期是否真的抓取過這個頁面。
把這几個环节分開看,很多“屏蔽了却還在”的問题都能解释清楚。robots.txt 是抓取開關,noindex 是索引開關,两者不能互相替代,用错顺序還會互相抵消。