两种方式告诉 Google 不索引页面:HTML 中的 robots meta 标签,或 HTTP 响应标头中的 X-Robots-Tag。它们作用相同。它们不可互换。选择合适的方案取决于文件类型(HTML vs PDF vs 图片)、你能编辑的位置(模板 vs 服务器配置),以及是否需要大规模应用(单个页面 vs 数万个)。
关键要点:robots meta 标签和 X-Robots-Tag 做的是同一件事;HTTP 响应头版本是对 PDF、图片和其他非 HTML 文件进行 noindex 的唯一方法。The robots meta tag and the X-Robots-Tag do the same job; the header version is the only way to noindex PDFs, images, and other non-HTML files.
一句话概括两种机制
robots meta 标签:HTML 文档 <head> 中的 <meta name="robots" content="noindex, nofollow">。仅适用于 HTML 页面,因为 PDF / 图片 / JSON 元数据中没有等效项。可通过页面模板轻松添加。
X-Robots-Tag: X-Robots-Tag: noindex, nofollow 作为 HTTP 响应头。适用于服务器返回的任何资源类型,包括 HTML、PDF、图像、视频、JSON 等。可在服务器(Apache、Nginx、Vercel 边缘头部、Cloudflare Workers)或框架的响应 API 中配置。Vercel edge headers, Cloudflare Workers) or via the framework's response API.
何时选择 robots meta 标签
- 单页排除:你想不被索引的特定页面。将 meta 标签添加到该页面的模板,发布变更。
- 模板控制的页面:当按页面类型做出noindex决策时(例如,所有/thank-you/页面都应该被noindex)。在这些页面使用的布局模板中添加meta标签。
- 动态决策:当noindex取决于运行时数据时(例如,noindex少于200字的页面)。meta标签在模板中有条件地呈现。
- 当你没有服务器配置访问权限时:共享主机、锁定的CMS、只能编辑模板但不能编辑htaccess的机构部署。meta标签是你的唯一选择。
X-Robots-Tag是正确选择的情况
- 非HTML资源:PDF、图片、JSON端点、网站地图。你无法向PDF添加meta标签。HTTP响应中的X-Robots-Tag是唯一的方式。
- 基于模式的排除:「noindex /admin/*下的所有内容」或「noindex每个.pdf文件」。在服务器中配置一次,永久应用于每个匹配的URL。比编辑200个模板干净得多。
- 大规模排除:10,000个动态生成的URL不应被索引。单个Nginx位置块优于模板级条件。
- 当你想要多层防御时:在服务器上结合X-Robots-Tag和模板中的robots meta。任一层都能捕获noindex;两层意味着模板bug不会意外重新索引该页面。
两者都能设置什么
两种机制接受相同的指令集。最常见的有:noindex(不索引)、nofollow(不跟踪此页面的链接)、none(= noindex, nofollow)、noarchive(不显示缓存版本)、nosnippet(不在 SERP 中显示摘要)、max-snippet:N(限制摘要长度)、max-image-preview:standard|large|none(控制 AI Overviews 中的图像预览,与 2026 GEO 工作相关)、max-video-preview:N(限制视频预览长度)、unavailable_after:date(在指定日期后自动 noindex)。
Google 会读取相同的指令,无论通过哪种机制传递这些指令。机制选择关乎规模和资源类型,而非指令支持。
如何在常见平台上设置 X-Robots-Tag
Vercel (vercel.json)
使用 [[headers]] 块,配合源模式和 X-Robots-Tag 值条目。示例:[[headers]] source = "/admin/(.*)" [[headers.values]] X-Robots-Tag = "noindex, nofollow"。适用于所有匹配该模式的 URL。
Netlify (netlify.toml)
[[headers]] 块,配合路径 glob 和 values.X-Robots-Tag 设置。示例:[[headers]] for = "/admin/*" [headers.values] X-Robots-Tag = "noindex, nofollow"。
Apache (.htaccess)
<FilesMatch "\.pdf$"> Header set X-Robots-Tag "noindex, nofollow" </FilesMatch> 用于文件模式匹配。或使用 <Location /admin> Header set X-Robots-Tag "noindex, nofollow" </Location> 用于路径匹配。
Nginx
location ~ /admin/ { add_header X-Robots-Tag "noindex, nofollow"; } 在 server 块内。location ~ 按正则表达式匹配;使用 location ^~ 进行前缀匹配。
Cloudflare Workers / Edge
在 worker 脚本中修改响应头:response.headers.set('X-Robots-Tag', 'noindex, nofollow')。适用于源服务器无法轻松发送该头部的站点。
验证头部是否已设置
curl -I https://example.com/page 会返回所有响应头,包括 X-Robots-Tag。查找输出中的 X-Robots-Tag 行。如果缺失,则表示头部未被设置。
对于 Search Console 验证:URL 检查工具会显示 Google 从元标签和 HTTP 头部两层获取的指令。如果任一层设置了 noindex,Google 将不会索引该页面。值得检查两层,因为配置不当的 CDN 可能会无声地删除头部。
纵深防御模式
最强的生产环境设置使用两层。服务器级别的 X-Robots-Tag 用于路径模式(例如 /admin/*),加上模板级别的 robots 元标签在页面 <head> 中针对相同页面。两层防御意味着模板 bug 或 CDN 配置错误无法意外重新索引应该保持私密的页面。
本站的管理员部分就是这样配置的:vercel.json 在 /admin/* 上设置 X-Robots-Tag: noindex, nofollow,同时 AdminLayout 模板在 head 中发送 <meta name="robots" content="noindex, nofollow">。双重保险。
常见错误
- 在已由 robots.txt 阻止的页面上添加 noindex。robots.txt 中的 Disallow 会阻止 Googlebot 获取该页面,所以它永远看不到 noindex 指令。该页面最终可能在没有摘要的情况下被索引,因为 Google 在其他地方看到过该 URL 但无法获取它。删除 Disallow 规则,让 bot 可以获取并看到 noindex。
- 通过 JavaScript 渲染的 HTML 中的 meta 标签设置 noindex。有些爬虫执行 JS,有些则不执行。最保险的方式是在服务器端渲染 noindex meta 标签,或在 HTTP 头中使用 X-Robots-Tag,它不需要 JS 执行。
- 在有反向链接的页面上设置 noindex。Google 会尊重 noindex,但那些反向链接的链接权益就浪费了。更好的做法是用 301 将页面重定向到一个相关的 URL,让它吸收这些权益。
- 忘记 X-Robots-Tag 是按响应计算的,而不是按服务器计算的。CDN 缓存命中有时会剥离自定义头;部署后用 curl 验证。
总结
robots meta 标签:按页面,在 HTML 中,在模板级别编辑。X-Robots-Tag:按响应,在 HTTP 头中,在服务器级别编辑。两者都适用于 HTML;只有 X-Robots-Tag 适用于非 HTML。当 noindex 很重要时,两者都使用。
相关阅读:410 与 404 涵盖退役情况(URL 消失);301 与 302 与 307 与 308 涵盖重定向情况(URL 移动)。结合 noindex,它们是告诉 Google 如何处理 URL 的三个主要工具。
常见问题
X-Robots-Tag 和 robots meta 标签有什么区别?
两者都控制编入索引,但 robots meta 标签位于页面的 HTML head 中,而 X-Robots-Tag 作为 HTTP 响应头发送。响应头版本可以控制非 HTML 文件(如 PDF 和图片),而 meta 标签无法控制。它们支持相同的指令,如 noindex 和 nofollow。
何时应该使用 X-Robots-Tag 而不是 meta 标签?
当你需要控制非 HTML 文件(如 PDF 和图片)的编入索引时,或者想在服务器级别为许多 URL 一次性设置指令时,使用 X-Robots-Tag。对于编辑 head 更简单的单个 HTML 页面,使用 meta 标签。
X-Robots-Tag 可以对 PDF 进行 noindex 吗?
是的,这是它的主要优势。robots 元标签无法放在 PDF 内,但 X-Robots-Tag HTTP 标头可以对 PDF、图像或任何非 HTML 文件应用 noindex。这是将文档排除在搜索结果之外的正确方法。
robots.txt 的作用与 noindex 相同吗?
不同。robots.txt 阻止抓取;noindex 阻止索引。在 robots.txt 中被阻止的页面仍然可能出现在搜索结果中而无需被抓取。要从索引中删除页面,应让其被抓取并返回 noindex,不要在 robots.txt 中阻止它。
