做站点运营时,经常遇到两種诉求:一種是“這個頁面別進索引”,另一種是“別再抓它了”。這两句话听起来接近,對應的手段却完全不同——前者用 noindex,後者用 robots.txt。把两者混着寫,是頁面迟迟不登出索引最常见的原因之一。
先分清抓取和索引是两件事
抓取是搜尋引擎把 URL 取回本地,索引是判断這個 URL 值不值得放進结果頁。robots.txt 管的是第一件事:它告诉爬虫哪些路径不要抓。noindex 管的是第二件事:它告诉搜尋引擎“抓到了,但別放進索引”。
關键在于先後關系:noindex 是一條指令,必须被爬虫真正讀到才生效。如果這個 URL 已经被 robots.txt 挡住,爬虫拿不到頁面内容,也就看不到里面的 noindex。
用 robots.txt 屏蔽之後,頁面會怎样
- 正常情况下该路径不再被抓取,服務器日誌里對應的請求會明顯减少。
- 但已经進入索引的 URL 不會因此自動消失,robots.txt 里没有“移除索引”的语义。
- 搜尋结果里可能出現只顯示 URL、没有标题和摘要的條目。
- 其他站点指向该 URL 的外鏈仍然存在,這個地址依然被搜尋引擎“知道”。
noindex 的正确用法
两種寫法效果一致:頁面 HTML 的 head 里寫 meta robots noindex,或者服務器在响應头里返回 X-Robots-Tag: noindex。後者更适合非 HTML 资源。
- 頁面需要返回 200,並且允许被抓取。
- 指令要出現在爬虫實际拿到的内容里。如果 noindex 是靠 JS 注入的,風險明顯更高。
- 生效要等下一次抓取,延迟從几天到數周不等,不是提交後立刻消失。
几種典型誤用
- 同时寫 Disallow 和 noindex:爬虫被挡住,讀不到頁面里的 noindex,頁面可能長期停留在既没登出索引、也没被更新的狀態。
- 以為 robots.txt 里能寫 noindex:语法上不成立,寫了也没有作用。
- noindex 的 URL 還留在 sitemap 里:這是在主動邀請抓取一個不想收錄的地址,信号自相矛盾。
- 整站加 noindex 做“临时维護”:如果维護時間較長,恢复後重新收錄需要一段時間,風險通常比返回 503 更大。
按场景選手段
- 临时下线、希望保留頁面和排序:優先考虑返回 503。
- 頁面永久不要了:410 或 404 比 noindex 更直接。
- 頁面要留着给用戶訪問,只是不想進索引(後台、篩選结果、重复内容):noindex,並允许抓取。
- 只是不想让爬虫反复来,不介意是否收錄:robots.txt 里的 Disallow。
- 敏感目錄,頁面本身也不该被訪問:robots.txt 配合訪問權限控制,不要指望索引指令代替權限。
調整後的核對顺序
- 確認目标 URL 返回 200,且 robots.txt 没有挡住它。
- 確認 noindex 出現在原始 HTML 或响應头中,而不是渲染之後才出現。
- 用抓取測試類的工具看一次實际返回的指令,避免模板繼承導致的誤加。
- 观察索引狀態變化以周為尺度,不要每天反复改指令。
- 對确實需要尽快消失的已收錄 URL,可以先用搜尋引擎提供的移除工具做临时處理,再等 noindex 生效。
一句话记法:robots.txt 决定“来不来”,noindex 决定“收不收”。两者叠加使用时,先想清楚爬虫到底能不能讀到那條 noindex。