Front-End-Checklist 中的 noindex 审计规则:全面排查被屏蔽索引页面的方法与验证流程
在 Front-End-Checklist 这个"面向人类与 AI Agent 的现代 Web 开发清单"仓库中,all-noindex-pages(Audit all noindex pages)是一条 SEO 技术类审计规则:它要求你列出并复核所有被 noindex 指令屏蔽索引的页面,确保被挡在搜索结果外的只有预工具页(如管理后台、登录页、内部搜索结果),而没有把高价值页面误伤。读完本文,你将掌握这条规则的元数据定义、noindex 指令的正确用法(noindex, follow 与 noindex, nofollow 的取舍)、noindex 与 robots.txt 的机制差异、常见索引信号冲突的排查清单,以及自动+人工双重验证的完整落地流程。
规则定位与元数据
这条规则在仓库中有两处对应实现:面向 AI Agent 的技能定义 skills/all-noindex-pages/SKILL.md,以及供人阅读的完整规则参考文档 skills/all-noindex-pages/references/rule.md。两者的核心元数据一致:
| 属性 | 取值 |
|---|---|
| 分类(category) | seo |
| 优先级(priority) | medium |
| 难度(difficulty) | intermediate |
| 预计耗时(estimatedTime) | 10 分钟 |
| 内容来源 | frontendchecklist.io 的规则库,在仓库中以 MDX 形式收录于 packages/content/rules/en/seo/all-noindex-pages.mdx |
规则的一句话定位是:列出并复核所有被屏蔽索引的页面,确保关键内容可被访问。其核心风险点在于——一条错误的 noindex 标签可能把重要页面完全逐出搜索结果;而正确使用 noindex 则有助于管理爬虫预算、防止重复内容问题。
SKILL.md 中还给出了 aiContext 指引:审计时应检查渲染后的 HTML 和 HTTP 响应,而不是仅依赖源码文件——这一点是本规则区别于普通静态检查的关键。
第一步:识别所有 noindex 页面
SKILL.md 的 Quick Reference 给出了三步排查基线:
- 找出所有在 meta 标签或 HTTP 头中使用
noindex指令的页面; - 确认关键页面(商品页、文章页)没有被意外屏蔽;
- 确认
noindex确实只作用于薄内容页、管理页或预工具页。
noindex 指令有两个载体,审计时都要覆盖:
- Meta 标签:
<meta name="robots" content="noindex">,写在页面<head>中; - HTTP 头:
X-Robots-Tag: noindex,常见于 HTML 之外的资源类型(PDF、图片等),爬虫无法从 HTML head 中读取这些资源的指令时,只能依赖响应头。
指令写法:noindex 与 follow/nofollow 的取舍
references/rule.md 给出了标准代码示例,区分了两种语义:
<head>
<!-- 用于"谢谢页"、内部搜索结果等预工具页:不索引本页,但允许沿出链继续抓取 -->
<meta name="robots" content="noindex, follow">
<!-- 用于希望被完全忽略的页面:不索引本页,也不抓取本页出链 -->
<meta name="robots" content="noindex, nofollow">
</head>
两者的差异在于出链处理:noindex, follow 表示"本页不进索引,但页面上的链接仍有价值,请继续沿着它们抓取",适合内部搜索结果页这类本身无收录价值、但链接指向有价值内容的页面;noindex, nofollow 则表示"这一整块完全不用管"。审计时如果发现本应传递链接权重的页面被误配为 noindex, nofollow,就属于典型误伤。
Check 与 Fix 的判定标准
规则自带的 prompt 定义(收录于 packages/content/rules/en/seo/all-noindex-pages.mdx 的 frontmatter)明确了检查与修复动作:
- Check:验证
noindex指令只被应用于不应出现在搜索结果中的页面; - Fix:从本应被索引和排名的页面上移除
<meta name="robots" content="noindex">; - Code Review:审查与索引性相关的元数据生成、渲染后 HTML、结构化数据与响应头,精确标记违规的路由或模板,并说明如何验证最终页面输出。
注意这里的审查对象是"渲染后输出"——对于 SSR/静态生成框架,noindex 可能是在元数据生成阶段按路由条件动态注入的,源码里的模板不等于线上最终产物。
noindex 与 robots.txt 的机制差异
这是本规则 Explain 环节要求回答的核心问题:解释 robots.txt 中 noindex 与 disallow 的区别,以及各自适用于什么场景。两者的作用阶段完全不同:
robots.txt的Disallow是抓取指令(crawl directive):告诉爬虫"不要抓取这个 URL";noindex是索引指令(indexing directive):告诉搜索引擎"可以抓取,但不要收录这个页面"。
关键推论是:被 robots.txt 屏蔽的页面永远不会被抓取,因此其中的 noindex 标签永远不会被读取。此时 URL 仍可能通过站点地图或站内链接被搜索引擎知晓,处于一种"既无法确认也不可排除"的悬置状态,白白消耗爬虫预算。仓库中同系列的规则文档 indexability-conflicts.mdx 给出了正反示例:
# ❌ 错误做法:robots.txt 屏蔽了带 noindex 的页面
# robots.txt
User-agent: *
Disallow: /private/ # 阻止抓取
<!-- /private/page.html —— 因为被 robots.txt 屏蔽,noindex 永远不会被读到 -->
<meta name="robots" content="noindex">
# ✅ 正确做法:只用 noindex(移除 robots.txt 屏蔽规则),让爬虫读到标签
# robots.txt —— 不再 Disallow /private/
User-agent: *
Disallow: /admin/ # 只屏蔽真正绝不能被抓取的
<!-- /private/page.html -->
<meta name="robots" content="noindex, follow">
选择原则可归纳为:
- 想让页面不收录、但允许被读取指令 → 只用
noindex,移除 robots.txt 屏蔽; - 页面含敏感数据或抓取成本高、绝不允许被抓取 → 只用 robots.txt 屏蔽(此时
noindex写了也无效); - 两者同时出现即构成冲突,属于审计要标记的问题。
常见冲突类型与审计清单
审计 noindex 页面时,真正的难点不是"找到 noindex",而是发现信号之间的相互矛盾。结合仓库中的关联规则,可以整理出以下冲突矩阵(源自 indexability-conflicts.mdx 的 Common Conflict Types 表):
| 冲突 | 后果 |
|---|---|
robots.txt 屏蔽 + 页面带 noindex |
noindex 永远不会被读取 |
meta 中 noindex + X-Robots-Tag 中 index |
取最严格者生效(noindex 胜出) |
canonical 指向一个 noindex 页面 |
行为未定义,canonical 可能被忽略 |
站点地图(sitemap)中列入了 noindex URL |
收录/排除信号相互矛盾 |
其中"canonical 指向 noindex 页面"的矛盾在 indexability-conflicts.mdx 中有专门示例:/product?color=red 的 canonical 指向 /product,而 /product 自身是 noindex——这等于一边说"这是首选 URL"一边说"别收录它"。正确做法是让 canonical 指向可索引页面,或移除目标页的 noindex。
"sitemap 列出 noindex 页面"的冲突则被独立为高优先级规则,见 noindex-in-sitemap.mdx。该文档给出了决策树和明确的取舍逻辑:
该 URL 是否列在 sitemap 中?
↓
它是否带有 noindex 指令?
↓ YES
你希望它被收录吗?
↓ YES ↓ NO
移除 noindex 从 sitemap 中移除
要点是:Google 会优先遵循 noindex 而不会收录该页,但 URL 仍会被抓取,浪费爬虫预算;sitemap 应只包含"canonical、可索引、200 状态"的 URL。该文档还附了一个 Next.js 的 sitemap 生成示例,在输出前用 pages.filter(page => !page.noindex) 过滤掉被屏蔽的页面,可作为实现层面的参照。
系统性审计四步法
indexability-conflicts.mdx 的 How to Audit 章节给出了可执行的审计流程,正好覆盖"all noindex pages"的排查动作:
- 解析 robots.txt,提取全部
Disallow模式; - 爬站,对每个 URL 判断是否命中 Disallow 规则;
- 对命中的 URL 抓取页面(模拟屏蔽前的读取),检查 HTML 或
X-Robots-Tag头中是否存在noindex; - 用 Google Search Console 的 Coverage 报告交叉核对:找出同时处于"Blocked by robots.txt"状态又收到 noindex 信号的 URL。
每条被标记的 URL 都应报告具体的冲突类型,而不是笼统地记一个"noindex 问题"。
适用例外(Exceptions)
references/rule.md 明确列出了三类不应机械判为违规的例外情形,审计时需要逐条对照:
- 预工具页面例外:staging 环境、预工具页、登录页、账户页或内部搜索页,如果本就不打算参与排名,允许有意使用不同的抓取/索引信号;
- 迁移过渡态例外:临时迁移状态会产生嘈杂的中间信号,应标记的是生产环境中真实存在的 URL 模式,而非一次性的过渡产物;
- 冲突优先级例外:当重定向、canonical、robots 指令或索引性信号相互冲突时,先修复最强的最终信号(final signal),而不是把每个下游症状都当作独立 blocker 报告。
判定标准(Standards)
规则要求以最终面向搜索的 HTML、元数据与抓取行为为判定基准,并对照 Google Search Central 的 Search Essentials 与 Google Search Central 文档核对实现,之后才可认为规则"已满足"。这些外部参考源在仓库中以结构化的 sources 字段记录在 all-noindex-pages.mdx 的 frontmatter 中,authority 均标记为 primary,role 分别对应 search(检索依据)与 implementation(实现依据)——这套元数据让 AI Agent 也能明确知道"以什么标准判定规则是否通过"。
验证:自动检查 + 人工检查
自动检查(Automated Checks)
- 检查渲染后的 HTML 与 HTTP 头,确认预期的元数据或可抓取性信号确实存在(而不是只看源码);
- 在适用场景下,用 Google Search Console 或等效工具测试受影响的 URL;
- 部署后对一组有代表性的页面重新爬取,确认线上行为与预期一致。
人工检查(Manual Checks)
- 确认变更没有引入 canonical-url、robots 或结构化数据层面的新冲突——例如修复一个页面的
noindex后,要回看它的 canonical 目标、sitemap 收录状态与结构化数据是否仍然自洽。
这一"确认无冲突"的要求与仓库中 schema-noindex-conflict、robots-meta-conflict 等关联规则形成闭环:noindex 从不孤立存在,它总与 canonical、结构化数据中的可见性字段(如 schema 中的 noindex 冲突场景)联动。all-noindex-pages.mdx 的 relatedRules 字段将 indexability-conflicts、robots-meta-conflict、indexability、schema-noindex-conflict 列为同组审阅对象,说明在 seo/technical 领域中这几条规则常被一起检查。
落地小结
在 Front-End-Checklist 仓库中,这条规则的价值在于把"noindex 审计"从一个模糊的 SEO 概念固化为一套可执行流程:
- 全量盘点:同时扫描 meta 标签与
X-Robots-Tag头,列出所有noindex页面(参考 SKILL.md 的 Quick Reference); - 误伤筛查:确认商品、文章等高价值页面不在其中;
- 冲突排查:按上文的四步审计法,检查 robots.txt、canonical、sitemap 与结构化数据四路信号是否自洽;
- 验证收尾:以渲染后 HTML 与 HTTP 响应为准做自动+人工双重验证,并对照例外条款避免误报。
规则的完整定义可继续查阅:技能入口 skills/all-noindex-pages/SKILL.md、参考文档 skills/all-noindex-pages/references/rule.md、规则源文件 packages/content/rules/en/seo/all-noindex-pages.mdx,以及关联规则 indexability-conflicts.mdx 与 noindex-in-sitemap.mdx。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00