抓取和收录分属两个环节,robots.txt 管的是前者,noindex 管的是后者。不少站点的问题不是蜘蛛不来,而是这两类指令写反了、写漏了,或者互相打架,最后表现出的现象却很相似:页面进不了索引,或者明明消失了又迟迟不掉。
robots.txt:决定蜘蛛能不能把页面拿回去看
Disallow 阻止的是抓取行为,而不是收录结果。一个被屏蔽的 URL 如果早就进了索引,通常不会因为加了屏蔽就立刻消失,只是搜索引擎再也看不到它的新内容,只能继续用旧快照或外链信息判断,页面的状态会慢慢变差。
常见的几种写错方式
- 为了让筛选页、隐私页不被收录,直接用 Disallow 屏蔽整个目录。结果是这些页面上写的 noindex 永远读不到,反而可能长期挂在索引里。
- 测试站的 robots.txt 一直留着 Disallow: /,上线后忘了改,整站抓取被挡在门外。
- Allow 和 Disallow 规则互相覆盖,实际生效的和自己以为的不是同一条。一般来说按最长匹配路径生效,长度相同时 Allow 优先。
noindex:告诉搜索引擎别把这个页面放进索引
它的常规写法有两种:HTML 的 head 区域里放 meta robots 标签,content 值写 noindex;或者由服务器在 HTTP 响应头里返回 X-Robots-Tag。后者对 PDF、图片等非 HTML 文件同样有效,这是 meta 标签做不到的。
容易失效的情形
- 标签被模板渲染到了 body 里,抓取时不被识别。
- 标签由 JS 动态插入,而抓取没有走到渲染那一步。
- 同一页面既有 noindex,又有指向别处的 canonical,信号互相矛盾,处理结果和预想不同。
- 页面被 robots.txt 屏蔽,导致谁都看不到这个 noindex。
- 响应头里的 X-Robots-Tag 和页面里的 meta 写法不一致,此时通常取更严格的一方。
冲突时的处理逻辑
可以记一个粗糙但好用的口径:越严格的指令越可能生效。index 和 noindex 同时出现时按 noindex 处理;robots.txt 屏蔽与可索引标记同时存在时,抓取被挡住,索引状态只能靠历史信息和外链推断。真正麻烦的是第三种组合——屏蔽目录加 noindex 标签,本意是彻底移除,实际效果往往相反。
按顺序排查,比盲目改标签更省时间
- 确认目标 URL 在 robots.txt 里命中的是 Allow 还是 Disallow,注意通配符和最长匹配。
- 用抓取测试或 URL 检查工具看返回的响应头,以及 HTML 里是否真的带上了目标 meta 标签。
- 看状态码。200、301、404、5xx 分别对应不同的后续动作,先解决状态码问题,再谈指令。
- 检查 canonical 与 noindex 是否同时存在,两者指向是否一致。
- 确认屏蔽范围有没有波及 JS、CSS 资源目录,这会影响渲染,进而影响收录判断。
- 修好之后提交站点地图,观察抓取日志和索引状态的变化趋势,而不是盯着某一天的数字。
改回来之后,多给一点时间
去掉 noindex 后,页面不会马上回到索引,需要等下一次抓取和重新评估,通常是几天到几周不等,取决于页面重要性和站点抓取频率。反过来,想让一个已经收录的页面退出索引,正确顺序是先允许抓取、让 noindex 被读到、等它真正消失,再考虑要不要彻底屏蔽。
把 robots.txt、noindex、canonical 三件事放进上线检查清单,尤其是模板级改动。这三处一旦写错,影响的是整批 URL,而不是单个页面。
日常维护时不必频繁改动这些设置。每次动之前先明确目标:是要阻止抓取,还是要阻止收录,还是两者都要。目标分清楚了,指令就不会写反。