<meta name="robots" content="noindex">仅控制索引不阻止抓取,真正拦截请求需靠robots.txt的Disallow规则;content值须小写、无空格、英文逗号分隔;标签必须服务端静态输出于<head>内且验证源码存在。

meta name="robots" 不能限制抓取,只能控制索引行为
直接写 <meta name="robots" content="noindex"> 不会阻止爬虫请求该页面,它只告诉爬虫“抓到了,但别存进索引”。真正拦住请求的,是 robots.txt 里的 Disallow 规则。如果你看到页面仍被频繁访问、服务器日志里有大量爬虫请求,那说明你只用了 meta,没配 robots.txt。
content 值必须严格小写、无空格、英文逗号分隔
拼写或格式错一个字符,主流爬虫(尤其是 Bingbot)就直接忽略整条指令。常见翻车点:
-
noindex,nofollow✅ 正确写法;noindex, nofollow❌(逗号后空格) -
noindex,follow✅;NOINDEX,FOLLOW❌(大写) -
noindex,nofollow✅;noindex,nofollow❌(中文逗号) -
none理论等价,但部分旧爬虫不识别,不推荐
标签必须由服务端静态输出,且位于 <head> 最前
Vue 的 mounted、React 的 useEffect、甚至 document.write 动态插入的 <meta name="robots">,Googlebot 和 Bingbot 都看不到——它们只解析初始 HTML 响应,不执行 JS。
验证方式很简单:右键网页 →「查看网页源代码」→ 搜索 <meta name="robots",确认它真实存在于 <head> 内部,且紧接在 <meta charset> 后面。如果是 Next.js/Nuxt,要检查是否通过 getServerSideProps 或 head 配置静态注入;纯 CSR 应用(如默认 Create React App)根本没法靠这个标签生效,得改用 X-Robots-Tag 响应头。
立即学习“前端免费学习笔记(深入)”;
必须和 robots.txt 双保险,尤其对敏感路径
只靠 meta 标签,风险很高。比如你在 /admin/login.html 加了 noindex,nofollow,但 robots.txt 放行了 /admin/,又恰好有外部链接指向该页——爬虫照样会来抓,只是不索引。更糟的是,如果 robots.txt 里写了 Disallow: /admin/,爬虫压根不请求页面,也就永远看不到你的 noindex 指令。
稳妥做法:
- 在
robots.txt中明确禁止抓取路径,例如:Disallow: /admin/ - 同时在对应页面 HTML 的
<head>中写入<meta name="robots" content="noindex,nofollow"> - 上线后清掉 CDN 缓存,否则爬虫可能还在读旧版 HTML
真正容易被忽略的不是怎么写,而是缓存没清、源码没验证、JS 动态加的标签白写了——这些地方一错,noindex 就等于没加。



















