在 robots.txt 里写了一条 Disallow,过几天去搜一下,那条 URL 还在,标题摘要里甚至还能看到内容。于是不少人判断“屏蔽没生效”,回头又去改规则。其实多数情况下不是没生效,而是屏蔽和移除本来就不是同一件事。
robots.txt 管的是抓取,不是索引
robots.txt 里的“robots exclusion”容易被理解成“搜索引擎看不到这个页面”。但它约束的范围只有一个:爬虫是否可以抓取这个 URL。至于这个 URL 要不要进入索引、要不要在搜索结果里被搜到,属于索引环节的判断,和抓取许可是两条线。
搜索引擎完全可以直接把它放进索引,信息来源可能是外链的锚文本、URL 本身包含的词、历史上抓取过的旧版本,或者其他页面的引用。此时结果页通常会显示一句“由于此网站的 robots.txt,我们无法提供该页面的具体描述”,但地址依然在。
判断标准很简单:搜索结果里出现这个地址,不代表爬虫读过它;反过来,爬虫读不到,也不代表它不会出现。
屏蔽、抓取、移除是三件事
- 屏蔽(Disallow):告诉爬虫不要请求这个 URL。页面还在,用户访问正常,索引可能仍然保留。
- 不索引(noindex):告诉搜索引擎不要把这个页面放进索引。前提是爬虫必须能抓到页面,才读得到这个标记。
- 移除:页面本身返回 404 或 410,或者用临时移除工具清掉已有索引。这是最彻底的一步。
三者混在一起用,最典型的事故是:robots.txt 里 Disallow 了某个目录,同时页面上加了 noindex。爬虫被挡住,读不到 noindex,索引里的旧版本就长期存在,谁也清不掉。
想把页面从索引里拿掉,按这个顺序核对
- 确认这条 URL 是不是真的需要移出索引。后台页、参数筛选页、测试页和站内搜索结果页,处理方式并不一样。
- 先看 HTTP 状态码。页面已经废弃,直接返回 404 或 410,比任何标记都干净。
- 页面必须保留(比如老页面要跳转给用户看),就让它可被抓取,然后在页面头部或响应头里放 noindex。
- 检查 X-Robots-Tag,它和 meta robots 同样有效,而且更适合非 HTML 资源。
- 同步清理 robots.txt 里对应的 Disallow 规则,否则爬虫进不来,noindex 永远不会被读到。
- 在工具里查看该 URL 的索引状态,必要时提交一次移除请求,作为过渡手段。
几个容易反向操作的地方
- 把敏感目录写进 robots.txt。规则文件是公开的,等于主动把这个路径公布出去。
- 以为 Disallow 等同于删除,放着不管,索引和缓存长期留在结果里。
- 临时下线时先删 robots 规则、等爬虫进来抓取,却忘了页面还开着,收录反而更多。
- 规则写得过于宽泛,例如 Disallow: /search 把正常栏目一起挡住。
还需要留意匹配方式。robots.txt 是前缀式匹配,/abc 会同时命中 /abcd、/abc/1、/abc.html。写规则时用 $ 或更具体的路径收窄,能减少误伤。至于页面什么时候从索引里消失,取决于再抓取和索引更新,通常不是当天就能看到结果,隔几天再看一次状态即可,不必反复改规则。