让一个页面从搜索结果里消失,常见做法有两种:在 robots.txt 里禁止抓取,或者在页面上加 noindex。单独用哪一种都能达到部分目的,但如果同时用,往往会出现“屏蔽了几个月,索引里还在”的情况。原因不复杂,只是两种手段作用的环节不同。
先分清两种手段作用在哪个环节
抓取、索引、展现是三个前后相继的环节。robots.txt 管的是第一环——蜘蛛能不能来抓;noindex 管的是第二环——抓到之后要不要留下索引记录。指令写在页面里,就必须先被下载下来才生效。
- robots.txt 禁止抓取:蜘蛛不下载页面正文,自然也读不到页面里的任何 meta 指令。
- 页面 noindex:蜘蛛能正常抓取并读到该指令,随后把页面从索引中移除,但前提是抓取没有被拦截。
- X-Robots-Tag:写在 HTTP 响应头里,适合 PDF、图片等非 HTML 资源,同样需要请求能正常到达。
为什么叠加使用会互相抵消
如果 robots.txt 里写了 Disallow 禁止抓取,蜘蛛连 HTML 都不会请求,页面上的 noindex 就永远读不到。此时页面可能因为外链、历史记录等原因仍留在索引里,只是标题和摘要缺失,显示为一条没有描述的结果。换句话说,你希望它消失,反而让它以更尴尬的形式留着。
要让 noindex 生效,页面必须可被抓取;要彻底禁止抓取,就别指望页面指令起作用。这两件事只能选一件先做。
建议的处理顺序
- 先确认目标:只是想减少抓取压力,还是想让页面从索引中彻底消失,或者页面本身要下线。三种目标对应不同做法。
- 只减少抓取压力:用 robots.txt 屏蔽即可,接受页面可能仍以无描述形式出现在结果里。
- 想让页面从索引消失:先放开 robots.txt 对它的屏蔽,保证可正常返回 200,再保留 noindex 或返回 410,让蜘蛛能读到明确信号。
- 观察移除进度:在日志里确认蜘蛛重新抓取了该 URL,之后索引状态才会逐步变化,不要刚改动就反复修改。
- 确认消失后再决定是否需要屏蔽:如果页面已彻底下线,通常没必要再叠加 robots.txt;若仍存在且无价值,可保留 noindex。
常见误操作
- 页面加 noindex 的同时用 robots.txt 屏蔽整个目录,导致目录下所有指令都读不到。
- 把 noindex 写在 JS 动态插入的内容里,蜘蛛拿到初始 HTML 时并不存在该指令。
- 测试环境用 robots.txt 全站屏蔽,上线后忘记移除,新页面迟迟进不了索引。
- 改完就立刻去站长工具查“已排除”数量,看到没变化就继续加码限制。
核对时值得看的几个点
第一,确认该 URL 返回的状态码,200、404、410、301 对应的处理路径不同。第二,确认 robots.txt 里是否真的有匹配它的规则,避免被通配符误伤。第三,看蜘蛛实际抓到的 HTML 里有没有 noindex,而不是只看自己本地环境。第四,区分“未抓取”“已抓取未索引”“已索引”三种状态,它们的下一步动作并不一样。
整体思路其实很简单:先想清楚是拦抓取,还是要去索引,只选一个主手段,另一个作为补充。两个一起上,往往谁都不生效,还多花时间排查。