很多人把 noindex 当成“别让蜘蛛来”的开关,结果在日志里看到这些 URL 仍被反复抓取,就觉得指令失效了。实际上,noindex 管的是索引,不是抓取。
蜘蛛必须先抓到,才能读到 noindex
noindex 写在页面 HTML 的 meta 标签或 HTTP 响应头里。蜘蛛只有实际请求了这个 URL、拿到响应,才知道页面写了什么。因此,只要页面还有内链、Sitemap 或其他入口,它就可能继续出现在抓取日志里。抓取和索引是两件事:抓取是把内容取回来,索引是决定要不要放进可检索的集合。
想拦住抓取,要用 robots.txt;想拦住索引,要用 noindex。两者混用常常互相打脸。
noindex 和 robots.txt 的配合顺序
如果先用 robots.txt 屏蔽某个目录,蜘蛛就不会去请求里面的页面,自然也读不到页面上的 noindex。此时如果外部还有链接指向这些 URL,搜索引擎可能仅凭外链信息把它们放进索引,通常没有摘要,反而更难处理。
- 希望 URL 彻底不被抓取、也不在结果里出现:robots.txt 拦截可以做到,但要接受“读不到 noindex”的副作用。
- 希望页面被抓到、确认内容后退出索引:放行抓取,加 noindex。
- 大量低质筛选页、参数页:优先用内链和 Sitemap 控制发现范围,再考虑 noindex,不要一律封 robots.txt。
nofollow 只是链接级别的提示
nofollow 通常加在链接上,表示“这个链接的目标我不背书”。它的作用是提示,不是硬性阻止。蜘蛛仍可能顺着链接发现 URL,只是不会把它当作信任投票。nofollow 不会阻止目标页面被抓取,也不会替代目标页面的 noindex。
如果某页面需要保留抓取、但不想让它传递信号,可以组合使用:链接加 nofollow,目标页加 noindex,两者各管一段。
非 HTML 资源的指令走 HTTP 头
对 PDF、图片、视频这类文件,HTML 里的 meta 标签用不上,需要在响应头加 X-Robots-Tag。写法与 meta 类似,只是放在服务器配置里。很多站点只改了模板,忘了这些资源,导致原本想排除的文件仍被索引。
常见误用与检查方法
- 用 robots.txt 挡 noindex:蜘蛛读不到指令,URL 可能以无摘要形式留在结果里。
- 用 noindex 挡抓取:抓取不会停,只是内容不进索引,抓取预算照样被消耗。
- noindex 页面还放在 Sitemap 里:等于主动告诉蜘蛛“来抓我,但别索引”,一般没必要,除非短期过渡。
- 只改模板不核对响应头:JS 渲染、CDN 缓存都可能让实际返回的 meta 与预期不同。
检查时可以先看服务器日志里这些 URL 的请求频率有没有下降,再对照抓取统计和索引覆盖报告。如果 noindex 生效,抓取量通常会在一段时间后逐步回落;若长期不降,多半是内链或 Sitemap 还在持续供给入口。
把指令用在合适的位置
抓取阶段考虑的是“蜘蛛来不来、来多少”,索引阶段考虑的是“来了之后留不留”。noindex 适合后者,robots.txt 适合前者,nofollow 处理链接关系。先想清楚目标,再决定用哪个工具,比把三种指令堆在一起更有效。