想让某个页面不被搜索引擎收录,常见做法有三种:robots.txt 屏蔽、加 noindex、让页面返回 404 或 410。这三种方式在链路上的作用点不同,混用或用错位置,不但达不到目的,还可能让 URL 以另一种形式继续留在索引里。
作用点不同:一个拦抓取,一个管索引,一个说明页面没了
- robots.txt 的 Disallow:拦在抓取这一步。蜘蛛不会去取页面内容,自然也就读不到页面里的任何指令。
- noindex:作用在索引这一步,前提是页面被真实抓取到,meta 标签或 HTTP 响应头里的指令才会被读到。
- 404 / 410:告诉搜索引擎这个地址已经不存在,已收录的条目会随着后续抓取逐步清除。
三者不是同一层级的东西。很多人把它们当成「都是不让收录」的等价选项,结果就是看起来屏蔽了,实际还在索引里。
robots.txt 屏蔽之后,URL 仍可能出现在索引里
被 Disallow 的地址,搜索引擎不会抓取内容,但如果站外有链接指向它,这个地址本身仍可能以「只有 URL、没有标题和摘要」的形式出现在索引中。原因很简单:通过外链知道了地址存在,只是拿不到内容。
所以判断该用哪种方式,先问自己一个问题:我要的是「内容不被看到」,还是「这个地址彻底从索引消失」,还是「蜘蛛别来抓这些没用的路径」。如果只是不想让蜘蛛反复去爬动态参数、后台路径、筛选组合,robots.txt 是合适的;如果目标是让内容不出现在搜索结果里,robots.txt 通常不够。
noindex 的关键:蜘蛛得先抓到页面
noindex 写在 meta robots 或 HTTP 响应头里,两者都需要页面被抓取才能生效。如果一个目录在 robots.txt 里被 Disallow,同时又指望里面的页面靠 noindex 退出索引,那 noindex 基本不会被读到——蜘蛛压根不会去取那个页面。响应头形式的好处是,对非 HTML 文件(比如 PDF)同样适用。
这种矛盾状态下正确的顺序是:先放开该目录的抓取,让 noindex 能被读到并生效,等这些 URL 从索引中消失后,再考虑是否要重新屏蔽抓取。
一个页面从「已收录」到「退出索引」,可以按这个顺序做
- 确认页面确实已经被收录。用 site: 查询配合网址检查工具交叉验证,不要凭感觉判断。
- 确认该 URL 没有被 robots.txt 屏蔽,否则后面的 noindex 读不到。
- 加上 noindex,meta 或响应头均可。
- 等待搜索引擎重新抓取该页面。索引条目的移除通常滞后于抓取,几周甚至更久都属正常,不要因为几天没变化就反复改动。
- 如果是彻底下线的内容,可以在 noindex 生效后改为 404 或 410;页面短期还要保留(比如活动结束但可能复用),保持 noindex 就够了。
按页面状态选方式
- 页面要保留,只是不想出现在搜索结果里:noindex。
- 页面永久删除且有替代地址:301 到新地址。
- 页面永久删除且没有替代地址:404 或 410。
- 整站临时不可用:用 503 并给出 Retry-After,别直接返回 404,否则容易掉索引。
- 只是不想让蜘蛛浪费抓取预算去爬参数组合、后台路径:robots.txt Disallow。
判断标准其实很简单:如果你希望某个 URL 从索引里消失,就必须让搜索引擎能抓到它,并且读到「不要索引」的信号,或者拿到明确的 404 / 410。屏蔽抓取和退出索引,往往是两件事。
几个容易踩的点
- robots.txt 屏蔽和 noindex 同时用:noindex 失效,URL 可能长期留在索引里,只显示一个光秃秃的地址。
- 只改 robots.txt、不处理已收录页面:老条目不会自动消失。
- 把 noindex 放在错误位置:写在依赖 JS 渲染后才出现的标签里,或写在不被读取的模板区域,都可能不生效。
- 把 404 当临时方案:反复在 200 和 404 之间来回切换,会让搜索引擎对该站点的状态判断变得不稳定。
这些做法都无法保证多久生效,索引更新有自己的节奏。你能控制的是信号是否清晰、是否前后一致——先分清自己到底想拦抓取还是想退出索引,再动手。