网站收录

noindex 加了却没掉:先查 robots.txt 有没有拦住抓取

给页面加了 noindex,索引里却一直还在,很多人以为是搜索引擎没理会。更常见的原因是那条指令根本没被读到:robots.txt 挡住了抓取、noindex 由脚本注入、响应头与页面 meta 不一致。本文把抓取许可、索引许可、代表页三件事拆开,给出核对顺序与常见组合的处置方式。

网站收录

noindex 加了却没掉:先查 robots.txt 有没有拦住抓取

给一批页面加了 noindex,过了一个月去查,索引里还在,有的甚至还能看到旧的摘要。这时候第一反应往往是搜索引擎没理会,但更常见的情况是:那条 noindex 根本没被读到。

先把三件事分开:能不能抓、要不要收、谁代表它

这三件事对应三套不同的机制,实际工作中经常被混着用:

  • 能不能抓:由 robots.txt 决定,管的是蜘蛛能不能来取这个地址。
  • 要不要收:由 meta robots 的 noindex 或 HTTP 响应头里的 X-Robots-Tag 决定,管的是取到内容之后要不要放进索引。
  • 谁代表它:由 canonical 决定,管的是多个相似地址里哪一个算正式版本。

关键在顺序:不能抓,就取不到内容;取不到内容,页面里那句 noindex 就是一句蜘蛛看不到的话。所以 robots.txt 里把一个目录 Disallow 掉,同时又指望目录内页面的 noindex 生效,这个组合基本是自相矛盾的。

noindex 没生效,常见是这几种原因

  • robots.txt 把该地址或整个目录禁止抓取,蜘蛛进不来,读不到 noindex。
  • noindex 由脚本动态插入,原始 HTML 里没有,第一次抓取时看不到。
  • 页面 meta 写的是 noindex,但服务器响应头里带着 index,两者不一致,实际以响应头为准。
  • 没注意到还有别的地址写法指向同一份内容,比如带参数的变体,你只处理了其中一个。
  • 页面仍然被大量内链和外链指向,蜘蛛反复来抓,状态更新得慢。

核对顺序建议

  1. 取一次 robots.txt,确认目标地址是否放行,注意通配符和目录写法的差别。
  2. 看 HTTP 响应头里的 X-Robots-Tag,再看原始 HTML 里的 meta robots,两边都记下来。
  3. 看 canonical 指向哪里。如果 noindex 和 canonical 同时存在,先确认你到底想要哪个结果。
  4. 确认 noindex 写在服务端返回的 HTML 里,而不是靠脚本事后插入。
  5. 把同一内容的其它地址写法找出来,逐个确认处理方式是否一致。
  6. 确认页面上没有仍然指向它的入口链接,尤其是导航、列表页和 sitemap。

几种常见组合分别怎么处理

  • robots.txt 允许 + noindex:这是正常做法,接下来只是等重新抓取,时间不做保证。
  • robots.txt 禁止 + noindex:noindex 不生效。要么放开抓取让它读到,要么改用 301 或 404、410 这类更直接的方式。
  • 既想屏蔽抓取又想让它掉出索引:单靠 robots.txt 做不到。可行的是先把页面处理成不再返回正常内容,再考虑屏蔽抓取。
  • 整站或整目录要下线:用 410 配合移除内链,通常比逐个加 noindex 更省事,也更容易核对。

两个容易踩的坑

一个是把 noindex 当成删除来用。noindex 只是不让它进索引,地址本身还在,被访问时依然返回内容。如果目标是彻底下线,用 404 或 410 更贴近意图。

另一个是只看工具状态就下结论。不同查询入口显示的状态和更新时点可能不一致,最好以自己取到的响应头、HTML 和 robots.txt 为准,把这三份证据对齐再判断。

核对这类问题时,顺序比结论重要:先确认蜘蛛能不能进来,再谈它读到了什么、要不要收。

最后提醒一句,任何指令生效都需要一次重新抓取,节奏取决于站点被抓取的频率和页面本身的重要程度,没有固定的时间承诺。与其反复改指令,不如按上面的顺序走一遍,确认每一步的实际返回值,避免几套机制互相打架。