<meta name="robots" content="noindex,follow">仅建议爬虫抓取后不索引本页但可跟踪链接,不阻止访问;真正拦截请求需用robots.txt,下线已索引页有延迟,且content值须小写、无空格、逗号分隔才可靠生效。

直接说结论:用 <meta name="robots" content="noindex,follow"> 这类标签,只能告诉爬虫“抓到了之后别索引”或“别跟踪链接”,它完全不阻止爬虫访问页面——想拦住请求,得靠 robots.txt;想立刻下线已索引页,noindex 有延迟,不是秒删。
content 值怎么写才真正生效
拼错、大小写混用、加空格,都会让指令被忽略。爬虫解析严格,不是“差不多就行”。
-
noindex,nofollow✅ 安全写法:纯小写、英文逗号、无空格 -
NOINDEX, NOFOLLOW⚠️ 大写+空格,部分旧版 Bingbot 会截断为NOINDEX,NOFOLLOW丢弃 -
noindex, nofollow⚠️ 逗号后带空格,Googlebot 能识别,但 Yandex 或某些企业级爬虫可能失效 -
no-index❌ 连字符错误,所有主流爬虫都无视 -
none✅ 等价于noindex,nofollow,但语义模糊,建议显式写出
noindex 和 nofollow 不是一回事,别混着用
noindex 管的是“当前页面要不要出现在搜索结果里”,nofollow 管的是“当前页面里的链接要不要被爬虫点进去”。很多人给后台登录页加了 rel="nofollow" 就以为安全了,结果页面本身被外链引用,照样被 Google 收录。
- 要隐藏某页(如 /admin/dashboard.html)→ 必须在该页
<head>里加<meta name="robots" content="noindex"> - 要防止权重泄露(如广告位、用户评论里的外链)→ 用
rel="nofollow",但它对当前页是否被索引零影响 - 组合常见场景:
noindex,follow(禁止收录本页,但允许爬虫顺着里面链接发现新内容),适合测试页、分页第2页等
动态注入、JS 插入、服务端渲染的坑
Googlebot 默认不执行 JS,Bingbot 执行有限,Yandex 几乎不执行。你在 useEffect 或 mounted 里用 JS 插入 <meta name="robots">,等于没写。
立即学习“前端免费学习笔记(深入)”;
- 必须在 HTML 首次响应中就存在,且位于
<head>内、早于<body>渲染 - SSR 框架(如 Next.js、Nuxt)需确保
getServerSideProps或serverPrefetch阶段生成该标签 - 静态站点生成(如 Hugo、Jekyll)可直接写死;CMS 模板里加条件判断,比如
{% if page.url contains '/category?' %}<meta name="robots" content="noindex,follow">{% endif %} - 别依赖
document.write或innerHTML往<head>塞 meta,爬虫看不到
和 X-Robots-Tag、robots.txt 的关系别搞反
robots.txt 是门禁,<meta name="robots"> 是屋内告示,X-Robots-Tag 是物业统一发的通知——三者层级分明,冲突时按优先级执行。
- 如果
robots.txt里写了Disallow: /private/,爬虫根本不会请求/private/page.html,你在这页 HTML 里写一百遍noindex也没人读 - 如果 HTTP 响应头里有
X-Robots-Tag: noindex,同时 HTML 里有<meta name="robots" content="index">,爬虫以响应头为准 -
X-Robots-Tag可用于 PDF、图片、API 返回 HTML 片段等非标准页面,meta robots只能用于完整 HTML 文档 - 想封杀带参数的 URL(如
/product?id=123&ref=email)?robots.txt的通配符易误伤,更稳的方式是在服务端检测 query string,对这类请求返回X-Robots-Tag: noindex
最容易被忽略的一点:加了 noindex 不代表页面立刻从搜索结果消失。Google 需重新抓取、解析、处理,通常要 1–4 周;若页面已被大量外链引用,快照可能保留更久。真要快速下线,410 Gone 状态码比 noindex 更有效,但会丢失反向链接权重——得权衡。



















