站点里总有一些页面不希望出现在搜索结果里:后台登录地址、站内搜索结果页、带参数的筛选页、测试页面、重复的打印版本。最常被提到的两个手段是 robots.txt 和 noindex,但它们管的事情并不一样,顺序用错,页面可能既屏蔽不掉,也移除不了。
两者管的不是同一件事
robots.txt 管的是抓取,相当于在门口放一块路牌,告诉蜘蛛哪些路径不必进来;noindex 管的是索引,是页面自己声明“不要把我放进搜索结果”。一个是入口层面的限制,一个是页面层面的表态,作用位置完全不同。
robots.txt 能省抓取,但不会移除已有收录
如果某个地址已经被抓取并收录,再把它写进 robots.txt 的 Disallow,蜘蛛通常不会再去读取这个页面,也就看不到你后来补上的任何新指令。已经建立的索引记录可能长期保留,只是内容快照会逐渐变旧。
所以 robots.txt 更适合挡住那些你根本不想浪费抓取预算的地址,比如无限翻页、会话 ID、后台路径,而不是用来做“下线”操作。
noindex 生效的三个前提
- 页面要能被抓取。如果同一路径已被 robots.txt 挡住,蜘蛛读不到 noindex 标签,标签等于没写。
- 页面要返回可索引的状态码。通常是 200 才谈得上“抓取后判断是否索引”;301、302 会把判断交给跳转目标。
- 标签要出现在能被读到的地方。HTML 的 meta robots 需要放在 head 里,或者改用 X-Robots-Tag 响应头,后者对 PDF 等非 HTML 文件也适用。
只想靠 noindex 做下线,速度往往偏慢
noindex 是“下次抓取时生效”的机制,抓取节奏不由站点决定。页面越深、被链接得越少,生效越慢。着急的场景更合适的做法是:先让页面返回 404 或 410,或者用 301 指到替代页面,再配合 Search Console 的移除工具做临时处理。临时移除有期限,到期后需要重新提交,因此它只是缓冲,不是长期方案。
一条常见的错误链路:robots.txt 挡住路径 + 页面加 noindex + 什么都不做,过了几个月页面还在索引里。原因不是指令无效,而是蜘蛛根本没机会读到它。
几类典型页面怎么处理
- 站内搜索结果页:通常不希望被大量收录,可以先用 robots.txt 挡掉参数路径,同时页面加 noindex 做双保险。
- 分页第 2 页之后:如果决定不收录,用 noindex 让蜘蛛能读到;直接 Disallow 会让蜘蛛无法顺着翻页继续发现更深的内容。
- 打印页、纯文本版本:优先用 canonical 指回主版本;如果确实不想要这个地址,再补 noindex。
- 已下线的旧活动页:不要只加 noindex,直接返回 410 更干脆。
- 需要登录的页面:靠权限控制而不是靠元标签,蜘蛛看不到内容时也可能保留 URL 记录。
noindex 和 canonical 别混着写
两个信号方向不同:canonical 的意思是“请把权重算给另一个地址,但这个页面本身可以存在”;noindex 的意思是“别收录这个页面”。同时出现时,搜索引擎可能只采纳其中一个,最终结果难以预测。想让页面存在但不被收录,用 noindex;想让两个地址合并成一个,用 canonical。
一个可执行的自查顺序
- 先确认这个地址目前是否已经被收录。
- 如果是长期屏蔽、且想节省抓取预算,考虑用 robots.txt。
- 如果要移除已有记录,先保证页面能被正常抓取。
- 在页面级加 noindex,确认返回 200、标签位置正确。
- 着急的场景用移除工具做临时处理,同时准备长期方案。
- 观察日志与收录状态,避免叠加互相冲突的指令。
屏蔽这件事没有万能开关。先想清楚你要的到底是“别来抓”还是“别收录”,是“以后别再收”还是“现在就要下线”,再选工具,通常比一次堆上好几条指令更有效。