很多站点在清理頁面时,會同时做两件事:在 robots.txt 里加一條 Disallow,再在頁面上加一個 noindex。看起来是双保險,實际效果往往相反——頁面没被抓取,却可能仍然留在搜尋结果里,展示成一條没有标题描述的空壳。要避免這種情况,先要把這两個工具各自管哪一段分清楚。
两者作用的环节不一样
蜘蛛訪問一個 URL,大致经歷發現、抓取、解析、判断是否入索引几個阶段。robots.txt 和 noindex 分別卡在不同的位置。
- robots.txt:作用是告诉蜘蛛“這個路径不要来抓”。它在抓取之前生效,蜘蛛看到規則後通常不會請求頁面内容。它本身不表達“不要收錄”的意思。
- noindex:寫在頁面里(meta 标簽或 HTTP 响應头),只有頁面被真正抓取並解析後才會被讀到。它的意思是“内容可以抓,但不要放進索引”。
- canonical:解决的是“多個地址指向同一份内容”的問题,属于規范化,和上面两個不是同一類開關。
一句话概括:robots.txt 拦的是抓取,noindex 拦的是收錄。要拦住收錄,前提是頁面得先能被抓到。
最容易踩的几種组合
用 robots.txt 来阻止收錄
這是最常见的誤用。路径被 Disallow 之後,蜘蛛拿不到頁面内容,也就讀不到 noindex。如果這個 URL 之前已经被索引過,或者有足够多的外鏈指向它,它有可能繼續留在索引里,只是展示信息不完整。想让它登出索引,正确做法是先放開抓取,保證 noindex 能被讀到,等頁面從索引里消失後,再决定要不要重新屏蔽抓取。
noindex 頁面同时被 robots.txt 屏蔽
和第上面是同一種問题的另一種表現。两個開關叠加,反而让 noindex 失效。如果确實不想让蜘蛛消耗抓取額度,可以用 X-Robots-Tag 响應头,但要確認蜘蛛能請求到這個响應头所在的那一层。
noindex 與 canonical 指向自己以外
頁面一邊寫 noindex,一邊用 canonical 指向別的地址,两個信号會互相打架。規范的做法是:想让這個地址登出索引,就只留 noindex;想把它合並到另一個地址,就用 canonical,不要額外加 noindex。
把 robots.txt 当成隐私或權限控制
robots.txt 是公開文件,任何訪問者都能讀取,被屏蔽的 URL 也仍然可能出現在其他地方。真正的敏感内容應该放在登入之後,而不是靠 robots.txt 挡住。
處理下架頁面的推荐顺序
- 先確認頁面是否還需要被抓取。如果需要退索引,就放開 robots.txt 對该 URL 的屏蔽。
- 在頁面或响應头中加上 noindex,確認返回的是正常狀態碼,不是 404 或跳轉。
- 等頁面從索引中登出,這個過程可能需要數周,具体取决于抓取频率。
- 登出之後,如果不想繼續被抓取,再考虑重新加回 Disallow;如果頁面已经刪除,返回 404 或 410 同样能让它逐步登出。
- 整個過程中用站点地图的收錄狀態、URL 检查工具或索引报告观察變化,不要凭感觉判断。
上线前後怎么自查
- 抽查頁面的 HTML 源碼,確認 noindex 出現在正确的位置,且没有被模板條件判断漏掉。
- 打開 robots.txt,逐條核對 Disallow 的路径是否覆盖了本来打算收錄的目錄。
- 測試环境加過 noindex、上线後忘了去掉,是批量漏收錄的常见来源,發布流程里最好留一道检查。
- 對重点頁面做一次抓取视角的驗證,確認蜘蛛拿到的是最终版本,而不是中間层的临时規則。
把抓取和收錄当成两個獨立的開關来管理,比把它們捆在一起更省事。多數“屏蔽了却還在”“没屏蔽却不收錄”的問题,都能在這两個開關的先後顺序里找到原因。
最後提醒一点:無论用哪種方式,索引狀態的更新都需要時間,也不會因為提交了某個指令就立刻生效。定期复查規則的残留,比临时补救更有用。