在排查收錄問题时,经常會看到這样的操作:頁面不想被搜到,就直接在 robots.txt 里 Disallow;過一段時間發現它還在搜尋结果里,于是又补了一條 noindex。两個動作分開看都没错,合在一起却常常互相抵消。原因在于,這两個開關作用在收錄鏈條的不同环节上。
抓取和索引是两個先後動作
搜尋引擎處理一個 URL,大致會经過:發現 URL、抓取頁面内容、解析並判断是否索引、索引後再决定是否展現。robots.txt 管的是第二步,noindex 管的是第三步。跳過任何一步,後面的動作都無從谈起。
robots.txt:挡住抓取,不等于摘掉索引
- Disallow 只是請求爬虫不要抓取某個路径,它不會刪除已经進入索引的頁面。已经收錄的 URL,即使之後被屏蔽,仍可能因為外部連結、标题等信息繼續出現在结果里。
- 更關键的是,禁止抓取之後,爬虫讀不到頁面上的 noindex,也就無法確認這個頁面應该被移除。想用 noindex 下线頁面,前提是頁面必须可被抓取。
- 整站屏蔽還會连带影响 sitemap 的提交、canonical 的讀取(需要抓取目标頁才能確認指向),以及新内容的發現。
noindex:只對能被讀到的頁面生效
- meta robots:寫在 HTML 的 head 里,只對 HTML 頁面有效,PDF、图片等资源讀不到。
- X-Robots-Tag:寫在 HTTP 响應头里,可以覆盖非 HTML 资源,适合批量處理某類文件。
- 两種寫法都要保證頁面返回 200 且允许抓取,否則指令讀不到;同时注意別把 noindex 寫在 robots.txt 已屏蔽的目錄下。
几種常见的用反场景
- 站点改版期間整体 Disallow,上线後忘了撤掉,導致新内容長期只有“已發現”没有抓取。
- 想让某批頁面登出索引,先 Disallow 再加 noindex,结果两邊都不生效。
- 用 noindex 處理不想收錄的 URL,但没有同步清理内鏈,站内連結持續把爬虫引向這些頁面。
- 測試环境加了 X-Robots-Tag,上线时配置没有一起迁走。
排查时的顺序建议
- 先看 robots.txt 是否對该路径有 Disallow,確認目标 URL 可被抓取。
- 再看頁面返回碼:noindex 指令只有在 200 狀態下才有意义,301、404 走的是另一套逻辑。
- 接着確認 noindex 的载体:HTML 頁面看 meta,非 HTML 资源看响應头。
- 最後看内鏈與外鏈。只要還有入口,爬虫就會反复来,這也解释了為什么屏蔽之後日誌里仍能看到抓取尝试。
一個實用的判断:如果既不希望頁面被抓取,也不希望它被索引,通常用“允许抓取 + noindex”;如果只是不想浪費抓取资源(比如搜尋结果頁、無限篩選參數),才用 robots.txt 屏蔽。
撤销屏蔽之後
把 Disallow 去掉或者把 noindex 移除,不等于索引狀態立刻同步。爬虫需要重新抓取到這個變化,索引才會跟着更新,快慢取决于頁面重要程度和抓取频次。這期間可以配合 sitemap 提交和内鏈加强,让關键頁面更快被重新抓取。對已经收錄但想下线的頁面,除了加 noindex,還要確認頁面本身是否應该返回 404 或 410,避免長期停留在“可抓取但标记不索引”的狀態。
把這两個開關分開理解,收錄問题就少了一半誤判:抓取是前提,索引是结果,先確認前提是否成立,再谈结果。