很多站点在“不想让某個頁面被搜到”的时候,第一反應是打開 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。
按目标選擇手段的顺序
- 希望這個頁面出現在搜尋结果里——什么都不要加。
- 不希望,但以後可能還想让它被看到——用 noindex,並保留抓取。
- 不希望,也不想让它消耗抓取资源——robots.txt Disallow,但要接受 URL 可能仍以無摘要形式出現。
- 頁面已经彻底不要了——让它返回 404 或 410,比一直遮罩更彻底。
改完配置之後,给自己留一段观察期。索引狀態的更新不是即时的,從索引里移除往往比收錄更慢。這段時間里,用服務器日誌確認爬虫是否還来、請求返回什么狀態碼、命中的是哪條規則,比反复刷新搜尋结果更有參考價值。