抓取和收錄是两個不同环节。不少站点想屏蔽某個目錄时,第一反應是在 robots.txt 里寫一條 Disallow,過一阵子再看,這些頁面仍然出現在搜尋结果里,只是标题和摘要看着不太對。問题往往不在收錄系統,而在于指令用错了對象。
两個指令各自管什么
robots.txt 告诉爬虫哪些路径可以訪問、哪些不要訪問,它限制的是抓取行為,本身並不直接决定頁面能不能進索引。noindex 則不同,它通常寫在頁面的 meta robots 里,或者放在响應头的 X-Robots-Tag 中,意思是“這個頁面抓到了,但請不要放進索引”。前提是爬虫能實际抓到頁面並讀到這條指令。
一句话概括:抓取是進门,索引是登记。挡在门外,登记處自然收不到你的說明。
為什么 robots.txt 常常挡不住收錄
当一個 URL 被 robots.txt 禁止抓取,爬虫拿不到頁面正文,也就看不到頁面里的 noindex。此时如果有外鏈或其他来源指向這個 URL,它仍可能被索引,只是索引里缺少正文,可能只顯示标题、網址或少量可见文字。另一種情况是頁面此前已经被收錄,之後加上 Disallow,索引中的舊版本還會保留一段時間,不會立刻消失。
容易用反的几種情况
- 想彻底移除頁面,却只在 robots.txt 里寫了 Disallow,頁面本身仍是 200 且没有 noindex。
- 想屏蔽一批低價值頁面,既加了 noindex,又用 Disallow 挡了整個目錄,结果 noindex 根本讀不到。
- 用 Disallow 屏蔽參數或目錄,但该目錄下其實有希望被收錄的頁面。
- 一邊在 robots.txt 里封禁某些路径,一邊還在 sitemap 中提交這些 URL。
下线一個頁面的推荐顺序
- 先判断意图:是彻底不要這個頁面,還是只是不想被搜尋展現。彻底不要就刪除並返回 404 或 410;只想不進索引就用 noindex。
- 如果選了 noindex,確認该 URL 没有被 robots.txt 挡住,让爬虫能正常抓到並讀到指令。
- 移除站内指向该頁面的連結,减少爬虫反复發現它的机會。
- 對已经收錄的頁面,可以在站長平台提交移除請求,缩短舊结果在索引中停留的時間。
- 留出一段观察期,確認索引中的舊结果處理完毕,再做下一步動作。
Disallow 加 noindex 通常不是“双保險”,而是無效组合:爬虫被挡在门外,讀不到 noindex,頁面狀態往往维持原样。
非 HTML 资源改用 X-Robots-Tag
PDF、图片、视频這類文件没法在文件内部寫 meta 标簽,需要在 HTTP 响應头里加 X-Robots-Tag 来實現類似 noindex 的效果。如果這類资源只靠 robots.txt 屏蔽,同样可能出現没被抓取、却仍出現在索引里的情况。
canonical 和 noindex 別叠在一起
有的頁面同时寫了 canonical 指向另一個地址和 noindex。两個信号指向不同,取舍时容易产生不确定性。想把内容合並到另一個頁面,用 canonical;想從索引中移除,用 noindex 並让頁面返回合适的狀態碼,一般不需要两者並存。
動手前的自查清單
- 目标 URL 在 robots.txt 中是否被允许抓取
- 頁面或响應头里是否寫了 noindex
- 頁面的 HTTP 狀態碼是否符合预期(200 / 404 / 410)
- sitemap 中是否還留着已下线的 URL
- 站内連結與外部連結是否還指向该 URL
指令本身並不复杂,麻烦多半来自把它們用在了同一件事上。先确定要達成的是“不被抓取”還是“不進索引”,再挑對應的工具,多數冲突都能提前避開。