先分清:阻止抓取和阻止收录是两件事
很多站长把“不让搜索引擎抓取”和“不让页面进索引”当成同一件事,结果用了 robots.txt 屏蔽目录,过一段时间用 site: 查询,发现 URL 还在。原因在于,搜索引擎处理一个页面的流程大致是:发现 URL、抓取页面、判断是否编入索引。robots.txt 管的是第二步,noindex 管的是第三步。跳过抓取,不代表前面发现的 URL 会自动消失。
noindex:允许抓取,但要求不进索引
noindex 是页面级指令,通常写在 HTML 的头部 meta 标签里,或者通过 HTTP 响应头 X-Robots-Tag 下发。它的意思是:可以抓取这个页面,但不要把它作为搜索结果展示。对大多数“页面本身有价值、只是不想公开被搜到”的情况,noindex 更合适。
用法和常见坑
- 放在页面头部:使用 noindex 的 meta 标签。如果只想限制某个搜索引擎,可以写具体蜘蛛名,但一般用通用写法即可。
- 非 HTML 文件用不了 meta 标签,比如 PDF、图片、视频,需要通过服务器配置返回 X-Robots-Tag 响应头。
- 页面必须能被抓取,noindex 才会生效。如果 robots.txt 同时屏蔽了该 URL,爬虫看不到 noindex,指令等于没写。
- noindex 不是立即生效。页面被重新抓取并处理之后,索引里的记录才会逐步移除,时间从几天到几周不等。
一个常见误操作:先在 robots.txt 里 disallow 整个目录,又在页面里加 noindex。结果爬虫进不来,noindex 读不到,URL 可能长期停留在索引中。
robots.txt:阻止抓取,不等于阻止收录
robots.txt 是抓取层面的协议。它告诉爬虫哪些路径不要抓,但搜索引擎仍然可能因为外链、历史记录或其他信号知道这个 URL 存在,并在结果里显示一个没有摘要的链接。也就是说,robots.txt 适合用来节省抓取配额、保护服务器压力,或者挡住某些动态路径,但它不是“从索引里删除页面”的工具。
如果你希望某个 URL 彻底不出现在搜索结果里,通常应该让它可抓取,然后返回 noindex;如果页面已经不存在,返回 404 或 410 也是明确信号。单纯用 robots.txt 屏蔽,往往达不到“看不见”的效果。
登录墙与密码保护:解决的是访问,不是索引
把页面放在登录之后,或者用 HTTP 密码保护,确实能挡住普通用户和大部分爬虫。但要注意两点:第一,搜索引擎可能仍然知道 URL 存在,尤其是外链指向它的时候;第二,如果页面内容对用户有价值,登录墙会让它无法被搜索到,这本身可能是你想要的,但它不属于精细的收录控制。对于“只想让特定人群访问”的内部页面,登录墙是合理的;对于“公开页面但不想被搜到”,noindex 更直接。
已经进了索引怎么办
如果发现不该收录的页面已经在搜索结果里,可以按下面的顺序处理:
- 先确认页面状态。用 site: 查询、URL 检查工具或搜索控制台里的 URL 检查,看看是“已收录”还是只是 URL 被提及但没有摘要。
- 决定页面未来是否还存在。要保留,就加上 noindex,并确保它可以被抓取;不再需要,就返回 404 或 410。
- 移除内部链接和 sitemap 里的入口。减少发现路径,有助于它更快退出。
- 如果页面已经被大量外链指向,移除索引可能需要更长时间,耐心观察即可,不必反复改指令。
怎么选:按目的来定
- 不想被搜到,但页面还要给用户看:用 noindex,保持可抓取。
- 只想减少抓取,不介意 URL 出现:可以用 robots.txt。
- 非 HTML 文件不想被收录:用 X-Robots-Tag 响应头。
- 内容只给特定人看:登录墙或密码保护,但要知道它不解决“URL 是否被知道”的问题。
最后提醒一句:这些指令影响的是搜索引擎如何处理页面,不承诺一定收录或一定不收录。实际结果还取决于抓取频率、外链情况和搜索引擎自己的判断。定期检查索引状态,比一次性设置更可靠。