先分清两條指令分別管什么
robots.txt 的 Disallow 管的是抓取,告诉爬虫不要来抓這個 URL;noindex 管的是索引,告诉搜尋引擎即使抓到了,也不要把它放進索引。两者作用的环节不同,所以同时使用时,不一定得到“既不被抓、也不被索引”的结果。
關键点在于:如果 robots.txt 已经禁止抓取,爬虫通常無法讀取頁面上的 meta noindex,也看不到 HTTP 头里的 X-Robots-Tag。它只知道“這個 URL 被禁止抓取”,但並不知道你希望它不要索引。此时如果 URL 通過外鏈、歷史记錄或 Sitemap 被發現了,仍可能以“無摘要”的形式出現在索引里。
為什么會出現這種矛盾
常见路径是:頁面先被收錄,後来你在 robots.txt 里加了 Disallow,同时又在頁面上加了 noindex。之後爬虫不再抓取頁面,noindex 也就無法被重新讀取。已经存在的索引记錄可能長期停留,或者只保留一個 URL 占位,没有标题和描述。
另一種情况是頁面從未被收錄,但 URL 被大量外鏈指向。爬虫被 robots.txt 挡住,抓不到 noindex,URL 仍可能進入“已發現”甚至索引狀態。此时你看到的是“屏蔽了但還能搜到”,實际上是两條指令没有按预期配合。
几種容易踩坑的寫法
- robots.txt 用 Disallow 屏蔽目錄,頁面里又寫 noindex。爬虫讀不到 noindex,屏蔽只阻止抓取,不直接移除已有索引。
- 用 X-Robots-Tag 但服務器把响應头放在被屏蔽的路径下。同理,头部信息也無法被讀取。
- 只加 noindex 却忘了检查 robots.txt 是否允许抓取。如果頁面被 robots 屏蔽,noindex 不會生效。
- 把 noindex 寫在 JavaScript 渲染後的 DOM 里。部分抓取场景下可能来不及执行,最好放在初始 HTML 的 head 或 HTTP 头中。
- 用 404/410 與 noindex 混用。如果頁面确定要下线,直接返回 404/410 通常比 noindex 更明确;noindex 更适合保留頁面但不希望被索引的场景。
建议的排查顺序
- 先確認這個 URL 目前在索引里的狀態:是完全收錄、只顯示 URL,還是已经消失。
- 检查 robots.txt 是否 Disallow 了该 URL。如果屏蔽了,先决定:是要抓取後 noindex,還是直接下线返回 404/410。
- 如果希望 noindex 生效,需要先允许抓取,确保爬虫能讀到頁面 head 里的 meta robots 或 HTTP 响應头中的 X-Robots-Tag。
- 確認 noindex 的寫法正确,例如 <meta name="robots" content="noindex">,不要寫成 nofollow 或拼错属性。
- 观察一段時間,不要频繁改来改去。索引狀態的更新需要時間,频繁切換信号反而让排查更困难。
更省事的處理原則
如果頁面要彻底下线,優先考虑 404 或 410,並清理内鏈和 Sitemap;如果頁面要保留但不參與搜尋,使用 noindex,同时保證 robots.txt 允许抓取;如果只是不想浪費抓取预算,可以用 robots.txt 屏蔽,但要接受“URL 可能仍留在索引里且無摘要”的结果。三種目标對應三種工具,混用容易互相抵消。
把 robots.txt 当作“抓取開關”,把 noindex 当作“索引開關”。想让 noindex 生效,先別把抓取的路堵死。