仅在<head>中添加<meta name="robots" content="noindex">不够,必须静态写入服务端HTML、验证源码存在、格式严格正确,并配合robots.txt双保险。

只在 <head> 里加 <meta name="robots" content="noindex"> 不够,页面仍可能出现在搜索结果中——它只是“请求不索引”,不是“拒绝访问”。
meta name="robots" 必须静态写死在服务端输出的 HTML head 中
爬虫不执行 JavaScript,也不等 Vue/React 渲染完再读标签。用 mounted、useEffect 或 document.write 动态插入的 <meta name="robots">,Googlebot 和 Bingbot 基本看不到。
- 静态站点:手写进 HTML 模板的
<head>最上方,紧接<meta charset="utf-8">后 - SSR 框架(如 Next.js、Nuxt):确认该标签由服务端首次响应输出,不是 hydration 后补
- 纯 CSR 应用(如默认 Create React App):无法靠此标签控制路由页,必须改用
X-Robots-Tag响应头 - 验证方式:右键 →「查看网页源代码」→ 搜索
<meta name="robots",必须真实存在、拼写准确、位于<head>内部
content 值大小写、空格、逗号一个都不能错
主流爬虫(尤其旧版 Bingbot)对格式极其敏感,错一个字符整条指令就失效。
- ✅ 正确:
noindex,nofollow、noindex,follow、none - ❌ 错误:
NOINDEX, NOFOLLOW(大写+空格)、no-index,nofollow(连字符)、noindex, nofollow(逗号后空格)、noindex,nofollow(中文逗号) -
none等价于noindex,nofollow,但部分老爬虫兼容性差,推荐显式写全 -
noarchive和nosnippet在<meta>中基本已不被 Google 支持,别白加
noindex,follow 和 noindex,nofollow 效果天差地别
两者都让当前页不被收录,但对页面内链接的处理完全不同——选错会意外放行子页面,或切断首页权重传递。
立即学习“前端免费学习笔记(深入)”;
-
noindex,follow:适合分页(/blog?page=2)、筛选页、排序页——不索引本页,但允许爬虫顺着“下一页”“相关文章”等链接发现新内容 -
noindex,nofollow:适合登录页、测试环境页、用户私有页——既不想被搜到,也不希望爬虫乱点页脚的“关于我们”“帮助中心”等链接 - 错误示例:搜索结果页加了
noindex却漏写nofollow→ 爬虫虽不存这页,却顺着商品链接抓取全部详情页 - 错误示例:后台登录页加了
noindex,nofollow,但页脚有“文档中心”链接 → 文档中心失去重要入口权重
必须搭配 robots.txt 使用,单靠 meta 标签风险极高
robots.txt 控制“能不能抓取”,<meta name="robots"> 控制“抓了之后怎么处理”。两者缺一不可。
- 如果只设
noindex而不限制抓取,爬虫仍会频繁请求该页,浪费带宽和服务器资源 - 如果只禁
robots.txt,页面可能被其他站点链接后间接进入索引(比如通过引用 URL 的 snippet) - 典型配置(想彻底屏蔽某个目录):
User-agent: *+Disallow: /admin/ - 关键页面必须双保险:在
robots.txt中限制抓取 + 在页面 HTML 的<head>中加<meta name="robots" content="noindex,nofollow">
最容易被忽略的是缓存问题:CDN 或反向代理若缓存了带 X-Robots-Tag: noindex 的响应,之后即使撤掉指令,页面也可能长期无法被索引;而前端动态注入的 meta 标签,从一开始就没被爬虫看到过。



















