網站收錄

robots.txt 與 noindex:想挡住收錄,该用哪個不是一回事

不少站点想挡住某個頁面时,第一反應是在 robots.txt 里加 Disallow,结果 URL 依然出現在搜尋结果里。這篇文章把抓取和索引两道關分開讲清楚,說明 robots.txt、noindex、canonical、登入墙和 404 各自负责什么,列出几個常见的誤用,並给出一套按目标選擇手段的简單顺序。

網站收錄

robots.txt 與 noindex:想挡住收錄,该用哪個不是一回事

很多站点在“不想让某個頁面被搜到”的时候,第一反應是打開 robots.txt 加一條 Disallow。過几天去搜尋结果里一查,URL 反而出現了,于是得出“robots 没用”的结论。問题通常不在工具本身,而在于把两件不同的事混成了一件:抓取和收錄。

抓取和索引是两道關

抓取是搜尋引擎派爬虫把頁面内容取回去;索引是取回来的内容经過處理,進入可以被检索的库。挡住前一道,不等于挡住後一道。

  • robots.txt 管的是“能不能来抓”。
  • noindex(通常寫在 meta robots 标簽或 HTTP 响應头里)管的是“能不能進索引”。

robots.txt 里 Disallow 的實际效果

Disallow 掉一個 URL,爬虫通常不會去請求它,所以它看不到頁面上寫的 noindex。但如果這個地址被其他站点連結、被 sitemap 提交,或者被站内其他頁面提到,搜尋引擎仍然可能把它作為一個“知道存在、但没去過”的地址放進索引——展示形式可能是一條没有摘要的連結。

也就是说,robots.txt 能减少抓取,却不能保證 URL 從索引里消失。把它当成“刪除開關”,期望往往會落空。

想让頁面不進索引,正确做法是 noindex

前提是這個頁面必须允许被抓取。如果同一路径既被 robots.txt Disallow,又寫了 noindex,noindex 實际上不會生效,因為爬虫進不来,讀不到這條指令。两者不要叠在同一個 URL 上,否則看起来是双保險,實际只有一层起作用。

其他几種常见的“挡住”手段

  • 登入墙或權限控制:不登入看不到内容,爬虫同样看不到,頁面可能仍被索引成一個入口,但没有正文。它适合内部系統,不适合希望被搜到的内容。
  • canonical:它的作用不是阻止收錄,而是告诉搜尋引擎“多個相似地址里哪個是主版本”。用 canonical 去達到“這一頁不要收錄”的目的,通常會落空。
  • 刪除頁面後返回 404 或 410:這是让已经進索引的頁面登出的常規做法,410 表達更明确一些。
  • 返回 403 或彈驗證碼:容易被视為“暂时訪問不了”,索引里的舊内容可能留存一段時間,並不是干净的移除方式。

几個反复出現的誤用

把“临时不想被搜到”和“永久不想被收錄”用同一套配置處理,往往是多數事故的起点。
  • 上线測試期間在 robots.txt 里 Disallow 整站,上线後忘记删掉,導致整站頁面逐渐從索引里消失。
  • 把 noindex 寫在 robots 已经挡住的路径里,以為做了两层保險。
  • 用 noindex 處理重复内容,而不是用 canonical 做版本归一,结果几個版本都没進索引。
  • 临时遮罩用完後只删了頁面上的标簽,忘了服務器响應头里還有一條 noindex。

按目标選擇手段的顺序

  1. 希望這個頁面出現在搜尋结果里——什么都不要加。
  2. 不希望,但以後可能還想让它被看到——用 noindex,並保留抓取。
  3. 不希望,也不想让它消耗抓取资源——robots.txt Disallow,但要接受 URL 可能仍以無摘要形式出現。
  4. 頁面已经彻底不要了——让它返回 404 或 410,比一直遮罩更彻底。

改完配置之後,给自己留一段观察期。索引狀態的更新不是即时的,從索引里移除往往比收錄更慢。這段時間里,用服務器日誌確認爬虫是否還来、請求返回什么狀態碼、命中的是哪條規則,比反复刷新搜尋结果更有參考價值。