不少人在页面上加了 noindex,过几天去搜,发现结果里还挂着这条 URL,于是怀疑指令没写对、或者搜索引擎没听话。多数情况下,问题不在指令本身,而在于对它的预期:noindex 是一句请求,不是一个立刻执行的删除动作。
noindex 管的是索引,不是抓取
这两个概念经常被混在一起。抓取是蜘蛛来取页面内容,收录是内容进入索引并有可能出现在结果里。noindex 属于索引层指令,它不会阻止蜘蛛来抓页面——恰恰相反,蜘蛛必须先把页面抓下来,才能读到这条指令。
所以"加了 noindex 蜘蛛就不来了"是误解。你依然会在日志里看到它对这条 URL 的访问,这是正常的。
把它理解成贴在门口的一张便条:请别把这里登记进册子。便条要被人看到才算数,而看的人什么时候来,不由你定。
为什么加了指令,索引里还留着它
常见原因大致分三类,排查时可以按这个顺序看。
- 时间差。已经进入索引的 URL,需要等蜘蛛重新抓取、重新处理后,才可能被移出。这个间隔取决于页面的抓取频率、站点体量和整体抓取安排,几周是常态,冷门页面更久。
- 指令没被读到。比如 robots.txt 屏蔽了这个目录,蜘蛛抓不到内容,自然看不到页面里的 noindex;比如 meta 标签被写进了 body;比如靠 JavaScript 后期注入,渲染环节没跑到;比如 X-Robots-Tag 拼写有误,或者加在了不该加的那层响应上。
- 留在索引里的是另一个 URL 版本。带追踪参数、大小写不同、http 与 https、带与不带结尾斜杠、甚至另一个域名下的镜像页面。你 noindex 的是 A,索引里留的是 B,看上去像是没生效。
和 robots.txt 撞车时最麻烦
这是最容易被忽略的一种组合。如果某批 URL 同时被 robots.txt 屏蔽、页面里又写着 noindex,蜘蛛抓不到内容,noindex 就永远读不到。结果可能是:这些 URL 因为曾经被抓过或有过外链,以缺少摘要的形式长期挂在结果里,而你手上没有任何有效工具把它清掉。
处理顺序建议是反过来的:先放开抓取,让 noindex 被读到,等它真正掉出索引之后,再考虑是否用 robots.txt 屏蔽。如果一定要屏蔽(比如抓取压力太大),至少心里清楚这批 URL 会处于一个无法用指令控制的状态。
canonical 和 noindex 一起用会怎样
这两个指令方向是相反的。canonical 的意思是"这一页要留下,但请把权重算给另一个地址";noindex 的意思是"这一页不要留下"。同时给,搜索引擎通常以 noindex 为准,canonical 被忽略。
所以选择很简单:想让页面留在索引里,就只用 canonical;想让它彻底出去,就用 noindex。不要指望两个一起写能拿到"既留又不留"的中间态。
上线前后的检查清单
- 确认 meta robots 写在 head 里,内容是 noindex 还是 noindex,follow,按需要选。
- 用官方的 URL 检查类工具看渲染后的 HTML,确认指令确实出现在里面,而不是只出现在源码里。
- 如果走的是响应头,确认响应头里真的有这条,且没有在中间层被覆盖。
- 确认该 URL 没有被 robots.txt 拦住。
- 确认同内容的其他 URL 版本(参数、协议、大小写)也一并处理了。
- 记下时间点,隔三四周再抽查一次,别当天就下结论。
哪些页面值得考虑用 noindex
判断标准不是页面好不好看,而是它有没有独立价值、会不会和别的页面争同一批需求。站内搜索结果页、筛选和排序参数组合出来的页面、内容极少的标签页、测试页、纯功能性的感谢页和登录跳转页,通常都在这类清单里。
但也不必一刀切。有些筛选页确实有稳定搜索量,那就该给它正经的内容和规范 URL,而不是简单遮掉。
移除之后,别急着删页面
noindex 生效并不要求页面消失。页面仍然可以正常访问、承接内链、服务用户,只是不进索引。如果直接删掉让它返回 404,反而可能有一段时间索引里还留着旧记录,用户点进去看到错误页。
更稳的节奏是:先 noindex,等掉出索引,再决定这个地址是保留、做 301 跳转,还是用 410 明确告知已删除。
它不是一次性动作
加 noindex 之后真正要做的只有两件事:确认指令真的被读到了,然后给它时间。如果这两步都没问题,索引里的旧记录自己会走;如果第一步就有问题,等多久都不会有变化。