在服務器上把某個目錄用 robots.txt 的 Disallow 挡掉,過几周去搜尋结果里查一下,頁面還在,标题摘要也没變。這是很常见的一幕。問题不在搜尋引擎不听话,而在于屏蔽抓取和阻止收錄被当成了同一件事。
抓取、索引、展示是三件分開的事
一個 URL 想出現在搜尋结果里,大致要经過三步:先被發現(外鏈、sitemap、站内連結),再被抓取(蜘蛛讀取頁面内容),最後被索引並有机會展示。三道關卡各有各的控制手段,指令用错了關卡,自然看不到效果。
robots.txt 挡的是抓取這一步
Disallow 的作用是告诉蜘蛛“這個地址不要来抓”。它拦在抓取环节,蜘蛛不會讀到頁面内容,也就看不到頁面里寫的 noindex。已经被索引的頁面,不會因為後来加了 Disallow 就自動消失,搜尋引擎只是不再更新它,舊的快照和标题可能長期留在索引里。
反過来,Disallow 有时也拦不住索引。如果別處有連結指向這個地址,且锚文本提供了足够信息,搜尋引擎仍可能把它作為一個缺乏内容可抓的條目放進索引,表現通常是标题奇怪、摘要缺失。
noindex 才是阻止收錄的指令
noindex 寫在頁面的 meta robots 标簽里,或者通過 HTTP 响應头里的 X-Robots-Tag 下發,後者更适合 PDF、图片這類非 HTML 文件。它的前提是頁面必须能被抓取,蜘蛛進不来,就看不到這條指令。
几種常见组合的结果
- 只有 Disallow:新頁面不會被抓,已索引的頁面不會移除。
- 只有 noindex:蜘蛛能抓到並讀到指令,索引會逐步移除,但抓取請求仍在消耗。
- Disallow 與 noindex 同时加:noindex 起不到作用,因為蜘蛛看不到它,這是最典型的誤用。
- 先 noindex,確認索引清掉之後再 Disallow:可以省下後續抓取,但要確認狀態确實已经變化。
想把一批頁面從索引里收回来
- 先检查 robots.txt,把要清除的目錄從 Disallow 里放開,允许蜘蛛重新抓取。
- 在頁面上加 noindex,或通過 X-Robots-Tag 下發,並確認返回的是正常狀態碼,没有跳轉、登入墙或错誤頁。
- 等蜘蛛重新抓取並讀到 noindex,再用站内查询或搜尋控制台的網址检查確認索引狀態的變化。
- 確認索引中已無這批地址後,如果确實不希望再被频繁抓取,再考虑恢复 Disallow。
如果這批頁面已经彻底下线、不再對外提供内容,返回 404 或 410 往往比 noindex 更快也更干净。但要留意:不要把本该保留的頁面誤删成 404,那會同时丢掉外鏈和流量入口。
几個容易混在一起的细节
- canonical 指向別的頁面,不等于“不要收錄”,它只是一個合並信号,本頁仍可能被抓取甚至展示。
- noindex 加在公共模板上要格外小心繼承關系,一處誤加可能波及整個栏目。
- 被 noindex 的頁面没有必要再放進 sitemap,那是在白白消耗抓取配額。
- 對 301 跳轉頁寫 noindex 意义有限,搜尋引擎最终按跳轉目标頁的指令来處理。
- 用密碼保護或登入墙隔開的頁面,搜尋引擎一般看不到内容,也就谈不上索引。
简單记:不想内容被收錄,用 noindex;不想被频繁抓取,用 robots.txt。两者混用之前,先想清楚頁面正處在哪一步。
如果只是希望某些頁面不出現在搜尋结果里,同时又想让蜘蛛偶尔来確認狀態,noindex 通常是更合适的選擇;真正需要降低抓取压力的目錄,才轮到 robots.txt 出手。把工具放在正确的關卡上,比反复調整參數更有用。