很多站点在需要“不让某個頁面出現在搜尋结果里”时,第一反應是打開 robots.txt 加一行 Disallow,或者给頁面加個 noindex。這两個指令看起来目标一致,實际作用的环节完全不同:一個拦在抓取之前,一個作用在抓取之後。用错了组合,常见的结果是——你屏蔽了抓取,頁面却仍然带着 URL 留在索引里。
一個管抓取,一個管索引
把爬虫處理一個 URL 的過程拆開看:發現 URL、抓取頁面、解析内容、决定是否编入索引。robots.txt 只在“抓取”這一步之前起作用,它告诉爬虫這個路径不要抓。既然頁面没被抓取,爬虫也就讀不到頁面里的 noindex,更無從判断内容质量。
noindex 是頁面被成功抓取、解析之後才生效的指令,表達的是“可以看,但不要收錄”。因此两者的观察位置也不一样:
- robots.txt 的效果体現在抓取日誌里,表現為對该路径的請求减少或消失;
- noindex 的效果体現在索引狀態里,頁面可能仍被抓取、被讀取,但不進入可搜尋集合。
两者叠在一起时會發生什么
如果同一個 URL 既被 robots.txt 屏蔽,又带着 noindex,實际结果通常是:爬虫不抓頁面内容,只凭外鏈锚文本或歷史信息保留一個“僅有 URL”的條目。用戶搜到它,看到的是标题和連結,没有摘要——這往往不是站点想要的狀態。
想让頁面從索引中消失,先让它可被抓取;想减轻抓取压力,才用 robots.txt。同一時間通常只需要其中一個。
按需求選,而不是按习惯選
希望頁面彻底不出現在搜尋结果里
允许抓取,加上 noindex;對非 HTML 资源則用 X-Robots-Tag 响應头。頁面被抓到後,爬虫讀到指令,在後續的索引更新中移除。已经收錄的頁面不會立刻消失,需要等下一次重新抓取與處理。
只是不想让爬虫反复消耗资源
用 robots.txt 屏蔽路径,比如後台、站内搜尋结果頁、大量參數组合。這類頁面本来也不指望被收錄,重点是別让它們占用抓取配額。
頁面已经收錄,現在要下架
顺序上先放開抓取,再確認 noindex 生效。如果頁面本身要刪除,配合 404 或 410 會更直接。只加 noindex 却不放開抓取,移除過程會被拖長。
希望保留連結關系、只去掉内容展示
robots.txt 可以让頁面不被抓取,但指向该 URL 的外鏈依然可能使它留在索引里。如果接受“只留 URL、不留内容”,這是一種折中;如果不接受,還是要走可抓取加 noindex 這條路。
几個容易踩的细节
- canonical 與 noindex 同时出現容易互相矛盾。一個说“用另一個版本代表我”,一個说“不要收錄我”,爬虫需要自行判断,结果不稳定。
- 被其他頁面 canonical 指向的 URL,其 noindex 可能被忽略。動手前先確認是否存在這類關系。
- HTML 之外的资源用不了 meta 标簽。PDF、图片、视频要靠 HTTP 响應头里的 X-Robots-Tag。
- robots.txt 是公開文件。不要在里面寫任何不希望被看到的路径說明。
- 指令的效果需要時間。不同搜尋引擎的處理节奏不一样,改動後要留出观察周期,不要凭一两天的日誌下结论。
怎么確認設定真的生效了
- 用 URL 检查類工具看该地址目前是否可被抓取,以及頁面實际返回的指令是什么。
- 用站点查询看目标 URL 是否還在结果中,注意“僅有 URL”條目的存在。
- 看服務器日誌里该路径的抓取记錄,判断 robots.txt 是否真的减少了請求。
- 改動後間隔一段時間复查,避免在同一天内反复調整指令。
把“不想被看到”和“不想被收錄”分開表述,是這類設定里最容易做對、也最容易做错的一步。先想清楚要拦在哪一個环节,再决定寫哪一行。