技术 2026年11月1日

canonical、noindex、hreflang:三个自己挡 AI 的设置

AI 答案里没有你时,很多人第一时间去查 canonical、noindex 和 hreflang。但三者不是同一类问题:一个是硬屏蔽,一个是把内容归属判给别人,一个从不屏蔽、只决定哪一版给了谁。本文给出分诊表、三个藏身处的取证方法,以及修复顺序与验收标准。

#GEO #canonical #noindex #hreflang

TL;DR / 核心要点总结

  • 三项不是同一类问题。 noindex 是硬屏蔽,canonical 是把内容归属判给另一个 URL,hreflang 从不屏蔽、只告诉引擎这几页是同一内容的语言版本。
  • 先分诊再动手。 如果 Google 侧能正常收录和引用、只有 ChatGPT 缺席,这三项大概率不是原因——它们作用于索引层与归属层,解释不了抓取层与表达层。
  • 三者藏的地方不一样。 noindex 可能藏在响应头或 CDN 规则里,源码里看不到;canonical 可能由 JavaScript 注入,不渲染的抓取器读不到。
  • 修复顺序固定: noindex(硬屏蔽)→ canonical(归属)→ hreflang(关联)。顺序反了,前一项的问题会掩盖后一项。
  • 验收只认配置证据。 同一个 URL,用纯 HTTP 头、指定爬虫 UA、渲染后 DOM 各取一次,三者一致才算修好。

一、先分诊:AI 答案里没有你,是哪一层出局?

「AI 不引用我」不是一个问题。按一次请求的顺序拆,页面可能在四层里的任何一层出局:抓取(请求有没有到)、索引(能不能进候选集)、归属(进的是不是这个 URL)、表达(内容能不能被摘走)。

canonical、noindex、hreflang 只作用于后两层中的一部分。先定位出局层,再决定查哪一项;直接上手改配置,很容易把一天花在并不是原因的地方。

你看到的现象更可能出局在哪一层这三项要不要查
site: 搜索里完全找不到这个页面索引要,先查 noindex
搜得到,但 AI 答案里的链接指向另一个 URL归属要,查 canonical
中文版本正常,英文版本完全缺席索引或归属要,查 canonical 与 hreflang
Google 正常,只有 ChatGPT 里没有抓取或表达基本不用查,先看爬虫放行与正文直出
被引用了,但答案句选错了段落表达不用查

最后两行最容易误判。Google 的 AI 概览与 AI Mode 建在同一套索引上,所以索引层的卫生会同时影响 Google 侧的 AI 答案。

ChatGPT 搜索有自己的抓取与索引。OpenAI 的公开文档把 noindex 定位为阻止在搜索结果里展示链接与标题的开关,但没有把 canonical 与 hreflang 列为检索控制项。

据此能说的只有一句:这三项解释的是「Google 侧也缺席」的那类问题。对「Google 有、ChatGPT 没有」,它们不构成解释,先去看爬虫放行与正文直出。

抓取层与表达层的排查不在本文范围:前者见AI 抓不到、也读不懂,后者见如何让 AI 引用你的网站。


二、noindex:唯一的硬屏蔽,也是最容易被误触的

三者的性质差别决定了排查顺序。noindex 是其中的硬屏蔽:它把页面排除在索引之外,经典搜索与 Google 侧的 AI 答案会同时失效。

它的载体不止一个。页面里的 <meta name="robots">、响应头里的 X-Robots-Tag、以及 CDN 或边缘规则下发的同名字段,效果完全相同,取证位置完全不同。

载体在哪里看典型来源
<meta name="robots">页面源码的 <head>CMS 模板、测试环境遗留
X-Robots-Tagcurl -sI 返回的响应头服务器配置、反向代理
边缘规则CDN 控制台临时下线、区域限制、按 UA 差异化
  • noindex 与 robots.txt 会互相掩盖。 想让 AI 不索引,用 noindex 没问题;但爬虫必须先抓到页面才读得到这个标签。同时用 robots.txt 禁止抓取,noindex 永远不会生效,页面仍然留在索引里。
  • 按 UA 下发的指令最难发现。 同一个 URL 对普通浏览器返回正常页面,对 AI 爬虫返回另一套响应头或状态码,只看源码永远查不出来。

失败指纹按范围就能分:多个不相关页面同时消失,先查边缘规则;只有个别页面消失,先查模板与响应头;只有某个 UA 看不到,就按 UA 逐个取一次响应头。

最直接的两条命令是看响应头与看原始 HTML:

curl -sI https://example.com/page | grep -i x-robots-tag
curl -s  https://example.com/page | grep -i 'name="robots"'

再换一个爬虫 UA 取同一地址,对比两次结果。具体的 UA 字符串从爬虫日志或官方文档里取,不要凭记忆拼。


三、canonical:不是屏蔽,是把归属判给别人

canonical 与 noindex 常被并列讨论,但它们不是同一种东西。Google 官方把 rel=canonical 定位为合并重复 URL 的提示,而不是强制指令。写错的结果不是页面消失,而是你主动声明:这一页的代表 URL 是另一个。

四种错法最常见:模板默认值指向首页;跨语言互指;分页与筛选页互相归并;由 JavaScript 注入,导致不渲染的抓取器读不到。

错法你会看到为什么难发现
模板默认指向首页大量页面声明「代表 URL 是首页」单页检查时看起来完全正常
跨语言互指一种语言版本从索引里消失两个版本都能打开,只是一个不参与
分页、筛选页归并深层内容进不了候选集用户点得到,抓取器把它合并了
JavaScript 注入部分抓取器视为没有 canonical浏览器里一切正常

改版后集中出现这类问题,成因与排查顺序见迁移与改版后的引用排查。

AI 侧的边界要说清楚。Google 的 AI 界面与经典搜索同索引,这里的归并会间接决定你在 Google 侧 AI 答案里的资格;对自建索引的引擎,公开文档没有说明它们会像 Google 一样执行归并。

所以「canonical 修好了,AI 就会引用我」不是可以承诺的因果。能承诺的只有一条:写错时,你主动把归属交给了另一个 URL。

失败指纹是:页面能打开、能被搜到,但 AI 答案给出的链接是另一个 URL——首页、另一个语言版本,或者去掉参数的版本。看到这个现象再查 canonical,比无条件全站扫一遍更有针对性。

取证分两步:源码里确认 canonical 指向页面自身;再用不执行 JavaScript 的抓取,确认这条标签在原始 HTML 里就存在。跨语言互指的具体修法,见中英文站点的引用落差排查。


四、hreflang:从不屏蔽,只决定哪一版给了谁

hreflang 与另外两项不属于同一类。它既不控制抓取,也不控制索引;它表达的是一组关系——这几页是同一内容的不同语言或地区版本。配置错误的后果是整组标注被忽略,而不是页面从索引里消失。

完整标注要求三件事齐备:每个版本自引用;双向互指,A 指向 B 时 B 也指向 A;整组有一个 x-default。缺任何一项,都可能让整组标注失效。

它和 canonical 的关系最容易出错。canonical 必须指向同语言版本自身;如果 hreflang 声明这几页等价,而 canonical 说代表 URL 是另一个语言版本,两条信号互相矛盾,通常以 canonical 为准,结果是某个语言版本被合并掉。

AI 侧该怎么期待:公开文档没有把 hreflang 列为自建索引引擎的检索输入。所以它不该被当成 AI 可见度的开关。它真正影响的是 Google 侧的语言匹配,以及多个语言版本之间会不会互相稀释。

失败指纹:搜英文关键词,返回的却是中文页面的标题;或者某一语言版本完全没有出现在候选结果里,但页面本身访问正常。


五、三个藏身处:源码、响应头、边缘

三项设置看起来都在页面里,实际可能出现在三个地方,检查方式完全不同。

藏身处能看到什么检查方式
原始 HTMLmeta robots、link rel=canonical、link rel=alternate hreflang查看源代码,不用「审查元素」
响应头X-Robots-Tag、Linkcurl -sI,逐个 UA 取一次
边缘与 CDN按路径、地区、UA 下发的规则控制台看规则,或对比不同 UA 的响应

有一条纪律要先立住:本地或浏览器里看到的正常,不构成证据。同一个 URL 在不同 UA、不同边缘节点上可能拿到不同的响应头;由脚本注入的标签,在不执行 JavaScript 的抓取器眼里等于不存在。

先用站内工具做第一轮筛查是划算的。免费的 Crawler Access Test 会用多个爬虫 UA 探测同一批 URL,快速看出放行状态与响应差异。但要记住它的边界:它回答「抓不抓得到」,不回答 canonical 指向哪、hreflang 是否成组。

后者仍然要回到源码与响应头里逐条看。工具给的是线索,配置本身才是证据。


六、修复顺序与验收:先硬屏蔽,再归属,最后关联

顺序不是习惯问题,是依赖问题。noindex 没解除,后两项改得再对,页面也不在候选集里;canonical 没统一,hreflang 的整组标注仍然会和它打架。

顺序动作通过标准
1解除 noindex 的三个来源三种取法都拿不到 noindex,关键爬虫取到的是正常状态码
2统一 canonical每页指向自身,原始 HTML 里可见,与 hreflang 不冲突
3修正 hreflang 组自引用、双向、x-default 齐备,且与 canonical 同语言

验收时不要把两本账记在一起。索引状态与 AI 答案里的实际引用不是同步变化的两个指标,前者恢复不代表后者立刻跟上。

判断修没修好,看配置证据;判断有没有效果,看引用证据。引用怎么记录,见三关拆解里的测量方法。


行动清单

今天做

  • 用 curl -sI 取三个代表性页面(首页、一个栏目页、一篇内容页)的响应头,记录 X-Robots-Tag 与 Link
  • 在源码里确认这三页的 canonical 是否指向自身
  • 用两个不同 UA 各取一次同一 URL,比对状态码与响应头

本周做

  • 抽样一批主要页面,批量确认 canonical 自指与 noindex 缺失
  • 检查 CDN 与边缘规则,确认没有按 UA 或地区下发的索引指令
  • 多语言站点核对 hreflang 三件套:自引用、双向、x-default

本月做

  • 把三项检查写进模板验收,新页面发布前自动过一遍
  • 建立索引状态与 AI 引用的两本账,分开记录、分开判断

结语

这三项设置的价值,不在于「改完就会被引用」。它们更像资格线:不修,永远没有资格;修了,也只是回到同一起跑线。

真正决定 AI 会不会引用你的,是抓取之后的实体、证据与可摘性。实体怎么写见结构化数据指南,整条路径的顺序见GEO 优化怎么做。

所以排查时别把它们当成增长手段。它们筛掉的是「本来就不该缺席却缺席」的那一类问题,而这一类通常最便宜,也最容易被忽略。


📩 需要帮助?GEO 咨询团队可以为你做什么

三项设置查完仍然缺席,说明问题不在指令层。我们可以把这一步并入一次完整的 SEO 全站诊断,与技术通道、实体层、内容可提取性一起出具。

  • 自我屏蔽核查:逐页核对 canonical、noindex 与 X-Robots-Tag,区分源码、响应头与边缘注入三种来源
  • 技术通道体检:AI 爬虫放行、渲染方式与内容一致性一并检查
  • 诊断报告:每条发现带现象、证据、影响与修复方向

了解 SEO 全站诊断服务 →


本文依据 Google Search Central 关于 canonical、noindex 与 hreflang 的官方文档口径,以及 OpenAI 关于 OAI-SearchBot 与 noindex 的官方说明整理。对自建索引引擎的判断以公开文档是否给出明确口径为界,未公开的部分不作推断。本文不含搜索量、引用率或见效周期数据。