一个很常见但顺序反了的做法
想清掉一个页面时,不少站点会把两招一起用:在 robots.txt 里 Disallow 掉路径,同时在页面里写 noindex。看起来是双重保险,问题却出在顺序上——Disallow 先生效,蜘蛛就不会去请求这个地址,页面上的 noindex 也就没机会被读到,索引条目反而更容易长期留着。
这种情况在日志里往往表现得很安静:该 URL 几乎没有蜘蛛访问记录,站长以为是“蜘蛛不来”,实际是自己把门锁上了。
robots.txt 管的是抓取,不是索引
robots.txt 传达的是“别来抓”,而不是“请把这页从索引里删掉”。当搜索引擎无法抓取内容时,它仍可能依据外链锚文本、历史数据保留一个索引条目,表现形式通常是没有摘要、只显示一行网址。也就是说,阻止抓取和退出索引是两件独立的事,前者不会自动带来后者。
要取消的是索引条目,要限制的是抓取行为。两个目标不同,动作顺序就不能颠倒。
想让页面退出索引,顺序应该是这样
- 先放开抓取:确认该 URL 没有被 robots.txt 拦截,能正常返回 200 状态码。
- 再放 noindex:通过页面头部区域的 meta robots noindex,或响应头里的 X-Robots-Tag,保证它在原始 HTML 或 HTTP 头中真实存在。
- 保持可访问:让页面继续被抓取,直到蜘蛛重新访问并处理这个标签。等待时间取决于站点被抓取的频率。
- 复查结果:用搜索框查该 URL,或用站点管理工具里的 URL 检查与移除请求功能确认状态。
- 最后再考虑屏蔽:确认索引条目已经处理掉之后,如果出于服务器压力或版权原因要限制抓取,再添加 Disallow。如果页面包含不该公开的信息,必须靠登录权限或直接删除内容,robots.txt 挡不住普通用户的访问。
这几步之间都要给蜘蛛留出重新抓取的机会。中途急着把 Disallow 加回去,前面的工作基本作废。
noindex 明明写了却没生效
- 标签写在页面正文区域,或由 JS 动态插入,原始 HTML 里并不存在。
- 页面返回 404、500 等状态码,抓取失败,标签自然读不到。
- 响应头里有 X-Robots-Tag,与页面里的 meta 设置互相冲突,或中间层覆盖了响应头。
- 写法有误,例如标签名拼错、写成键值对形式、写成注释。
- 该 URL 仍被 sitemap、内链、分页链大量指向,蜘蛛反复抓到的是旧状态。
顺带核对 canonical 与 sitemap
已决定 noindex 的页面,不应该继续出现在站点地图里,否则等于一边说别收录,一边又主动提交地址。canonical 也要一并检查:如果它指向的是一个需要保留的正常页面,处理方式就应该是做规范归属,而不是整页删除;如果 canonical 与 noindex 各自指向不同的目标,蜘蛛的判断会更犹豫,处理周期也会拉长。
动手前的自查清单
- 该 URL 现在能不能被正常抓取?robots.txt 是否还拦着它?
- noindex 在原始 HTML 或响应头里能否直接看到?
- 页面返回的状态码是否稳定在 200?
- sitemap 和内链里是否还大量指向这个地址?
- 是否与 canonical 等其他指令冲突?
- 页面内容是否涉及敏感信息?如果是,是否已经用访问权限或删除来处理?
回到那个最常见的误判:索引里还能搜到,往往不是标签写错了,而是抓取被拦在了前面。把放行抓取、写入 noindex、等待处理、复查结果这几步按顺序走完,再决定要不要屏蔽抓取,处理的确定性会高很多。