站点里總有一些頁面不希望出現在搜尋结果里:後台入口、測試頁、篩選參數頁、重复的打印版。處理這類 URL 时,很多人的第一反應是寫進 robots.txt。但 robots.txt 和 noindex 管的是两件事,用错了,往往既没達到目的,還让蜘蛛白跑一趟。
robots.txt 挡的是抓取,noindex 管的是索引
robots.txt 里的 Disallow,意思是蜘蛛不要去請求這個路径。既然不請求,就看不到頁面里的任何指令。noindex 則寫在頁面内部(meta robots 或响應头 X-Robots-Tag),意思是“你可以来抓,但別放進索引”。
把 URL 寫進 robots.txt 却指望 noindex 生效,是最常见的死循环:蜘蛛抓不到頁面,就看不到 noindex;如果這個 URL 在別處還有連結,它依然可能被当成一個可索引的對象處理。
被 noindex 的頁面,蜘蛛還會不會抓
會。noindex 不改變抓取路径,蜘蛛照样沿着内鏈、Sitemap、外鏈走到這個 URL,發出請求、讀取 HTML,只是讀完不收錄。這意味着:
- 它會占用抓取资源,這些請求換不来收錄;
- 頁面里的連結仍可能被發現,蜘蛛會繼續往下走;
- 日誌里看到的是正常的 200 响應,從狀態碼上看不出“已经拒收”。
所以一個站点里如果存在大量 noindex 頁面,而且它們互相連結成一張大網,抓取路径會被拖得很長,真正想被發現的頁面反而排在後面。
什么时候用 noindex,什么时候用 robots.txt
- 想保留頁面可被抓取、只是不收錄:用 noindex。典型是内容太薄的參數頁、已下架但還想保留訪問的詳情頁、用戶個人主頁。
- 完全不想让蜘蛛訪問:用 robots.txt 或服務器端鉴權。典型是後台、接口、站内搜尋结果頁。
- 既不想抓也不想留痕:robots.txt 配合登入校驗。但要意识到,別處指向它的連結會變成一個“看不到内容的入口”,這種入口多了對抓取並不友好。
抓取路径上的三種收口方式
如果 noindex 頁面數量可控,直接保留、让蜘蛛抓完即可。如果數量很大,就要考虑收口:
- 断鏈入口:把指向這些頁面的内鏈去掉,改為前端交互触發,蜘蛛走不到自然就不抓。
- 合並:多個相似 URL 用 canonical 指向一個主 URL,避免蜘蛛在參數簇里来回走。
- 分层:Sitemap 里不列這些 URL,内鏈也不给,靠少量外鏈進来的請求可以接受。
几個容易踩的坑
- 把 noindex 頁面放進 Sitemap:等于主動請蜘蛛来抓一個不打算收錄的 URL,属于典型的無效抓取。
- 分頁頁全部 noindex:後續頁碼不索引,但蜘蛛仍會抓;内鏈密集时,抓取會集中在這一段。
- 用 noindex 處理错誤頁:内容已经没有了,就應该返回 404 或 410,而不是 200 再挂一個 noindex 标簽。
- 忘记 X-Robots-Tag:PDF、图片等非 HTML 资源放不了 meta,只能用响應头声明。
怎么驗證有没有起作用
可以看抓取日誌:noindex 頁面的請求量、返回碼、以及蜘蛛是從哪個引用頁走到它的。如果這類 URL 長期占據不小比例的抓取,同时頁面本身没有什么收錄價值,那就该從入口上做减法,而不是只在頁面里加一個标簽。
小结:noindex 是一句“可以抓、但別收錄”的声明,不是抓取開關。真正决定蜘蛛會不會走這一趟的,是連結和 Sitemap 构成的路径。