
我是在一次周会上彻底意识到老一套 SEO 度量思路行不通的。内容组同事递给我一张 Excel问我“为什么我们官网在 AI 搜索里的排名从第 3 掉到第 7 了”我盯着那张表沉默了很久因为她说的那个“排名”在我们的监控后台里根本不存在。传统搜索里我们能看关键词排名、点击率、索引覆盖率可 AI 搜索是一个会自己组装答案的黑盒它不会老老实实告诉你原始网页排在第几甚至不会告诉你它有没有把你的页面作为生成依据。我们后来花了三个月时间做了一套 GEO 监测系统也就是面向生成式引擎优化的可观测体系把 AI 搜索会话里的可见性、引用关系、内容实体变化变成可量化指标。这篇文章不是概念科普而是把我们为什么这么设计、踩过哪些坑、指标怎么定才不被业务质疑完整复盘一遍。这套工程实践里你可能最需要的是一个认知转变GEO 监测系统真正要解决的技术问题不是“爬虫怎么写”而是“在信息被二次加工之后如何还原内容产生影响的证据链”。如果没有一套可靠的采集和指标口径你得到的只是一堆看起来每天都在跳的数字而数字背后的归因完全说不清楚。所以下面我先从为什么传统方法失灵讲起再展开整个系统的采集链路、指标设计和落地经验。1. 从 SEO 到 GEO为什么原来的度量体系突然不好用了1.1 你不再拥有“排名”这个概念传统 SEO 的世界里搜索引擎返回的是一张按顺序排列的蓝色链接列表。我们可以通过第三方工具查询某个关键词下网站排在第几位然后围绕排名做优化。排名的背后是一套相对稳定的抓取、索引、排序机制不管算法怎么调只要关键词和 URL 之间的映射存在你就有一个可以盯住的锚点。但在 AI 搜索场景里用户输入问题后得到的是一个综合了多篇资料的生成式回答。回答里可能引用三五篇来源也可能完全不展示来源而是把信息整合成一段自然语言。用户在页面看到的重点不再是“第几条链接”而是这段回答本身是否可信、是否满足需求。于是“排名”这个概念被消解了你需要跟踪的是你的内容有没有进入生成答案的候选依据有没有被选中作为引用来源以及你的品牌实体有没有被正确表述。拿一个对比型问题举例用户问“A 产品和 B 产品哪个更值得买”。传统搜索里你只要看 A 和 B 各自出现在结果第几位AI 搜索里则需要知道 A 品牌是否被写进结论句是否作为推荐项出现是否只在“不考虑价格”的前提下被提到以及它的官网链接是否出现在右侧来源卡片中。这几种情况对品牌的价值差异很大但如果只用一个笼统的“排名”指标这些信息全部会被吞掉。1.2 黑盒给工程团队带来的三个直接麻烦我们接入 AI 搜索监测之前团队里最乐观的假设是这东西跟传统爬虫差不多改一改解析规则就行。真正做起来后发现了三个非常具体的麻烦。第一没有官方数据接口。传统搜索引擎有 Search Console、百度站长平台这类工具可以拿到查询词、展示量、点击量。主流的 AI 搜索助手没有开放类似的后台我们既拿不到某个内容的曝光明细也拿不到用户点击行为。所以只能靠主动构造问题去“试探”AI 的回答这本质上是用外部探测的方式反推内部逻辑。第二结果不是静态页面。同一个问题AI 每次生成的文本可能不一样引用的来源顺序也会变化。你上午抓到的答案和下午抓到的答案虽然总体结论一致但具体措辞已经改了。这就导致我们不能像以前一样把网页快照存下来再用固定解析器提取排名。必须把每一次真实会话的上下文完整保留下来才能做后续比较。第三页面结构高度异构。不同 AI 搜索产品对回答的呈现方式完全不同有的用角标数字在句末标引用有的把来源折叠到“查看来源”按钮里有的直接在段落下方铺一排站点卡片还有的会生成一个单独的比较表格。解析器没法一套走天下必须针对每个客户端和展示形态单独适配。这也意味着“黑盒”不仅是内部逻辑不透明连外部的呈现格式都在快速变化给工程团队带来持续维护压力。2. GEO 监测到底该观测哪些信号2.1 先给监测对象分层我见过很多团队做 GEO 监测时第一步就是让后端去统计“品牌名出现在 AI 回答里的次数”。这个指标不能说错但它太粗糙了没法指导内容优化。我们内部把监测对象分成五层每一层对应一种业务动作。层级监测对象数据样例主要业务动作结果层AI 回答中是否出现推荐结论“如果你追求性价比可以优先看某品牌”判断整体内容策略是否有效来源层是否被引用引用 URL 的来源域名官方产品页出现在引用列表优化单页面的可引用性实体层品牌、产品、技术点是否被正确提及回答中是否出现“某平台”的完整名称检查实体信息是否被模型理解路径层推荐追问中出现品牌相关问题的频率“那么某品牌和另一品牌有什么差异”判断是否占据用户探索路径体验层图片、视频、站点链接是否被展示品牌官网链接作为“相关材料”展示优化站内媒体的结构化标记这五层不是并列关系而是可以叠加的。一个理想的监测结果应该是结论推荐你来源引用你实体表达不出错后续追问还能继续围绕你展开。只监测任何单层都容易产生误判。举个例子有些品牌发现自己的“AI 提及率”很高但来源列表里却一次都没出现过。这意味着模型可能从第三方文章里读到了品牌名并把它写进答案但最终生成结论时并没有选择品牌官网或官方文档作为依据。这种情况下品牌在用户认知里留下了印象但对官网的直接流量贡献可能很低。如果不分层看很难发现这种错位。2.2 三类观测手段和它们的性价比确定了观测对象之后下一步是决定数据怎么来。目前业内能落地的手段基本有三种各有适用场景。主动探测是核心。我们维护了一个动态问题库覆盖品类词、品牌词、竞品对比词、场景化问题比如“适合新手的入门款是什么”“某某和某某哪个更耐用”。系统按调度策略向 AI 搜索产品发起真实查询记录完整的回答快照。主动探测的好处是可控你能保证每一个核心问题每天都被覆盖到缺点是它毕竟不是真实用户的问题存在采样偏差。被动埋点是很好的补充。我们在自有 App 和浏览器插件里做了脱敏采集拿到用户真实提出的问题时会把问题的主体语义发给监测系统。因为是真实问题能帮我们发现很多主动问题库没覆盖的长尾表达。需要注意的是隐私合规我们只记录问题的语义向量和核心实体不关联任何用户身份。人工众包主要是用来校准。每隔两周我们会让外部标注员对一个固定问题集做人工判断看 AI 回答里是否出现了目标品牌、引用是否有效、情感是正面还是负面。然后把人工结果和系统的自动解析结果做差用来发现解析链路的系统性偏误。人工样本不用很大关键在于它是一把尺子能让自动化的数据不至于跑偏。从性价比来看主动探测的信噪比最高被动埋点最接近真实人工众包最烧钱但最有参考价值。只依赖任何一种都不可靠只做主动探测会陷入“自己问自己答”的封闭循环只做被动埋点会面临入口太少、样本不足的问题只做人工众包则必然无法支撑高频预警。2.3 一张可以拿去对齐团队的指标字典很多项目上线后死于指标口径不一致。市场部说“AI 提及量不太好”产品部说“AI 引用率在涨”两边用的根本不是同一个定义最后只能靠开会吵架。我们最开始就建立了一张公开的指标字典统一语言。品牌可见性在核心问题集中品牌出现在答案正文、引用列表或推荐追问中的问题占比。口径上只统计“主动生成结果”不统计用户追问后的内容。引用率生成答案的来源列表中包含目标域名或指向目标内容的链接的问题数占总问题数的比例。正面引用率在引用上下文的情感判定为正面或推荐倾向的引用数占全部引用数的比例。实体覆盖率AI 回答中出现品牌名称或产品名称的准确实体的比例。答案稳定度同一问题在同一版本模型下被多次重复查询品牌出现结果的一致性程度。推荐追问渗透率AI 生成推荐追问中包含品牌词或品牌相关问题的比例。确立指标字典最大的好处是任何指标变动团队都能对着定义倒查是数据采集问题、解析问题还是真实业务变化。避免了一上来就陷入“为什么分数降了”的情绪化讨论。3. 系统落地采集、解析、计算与告警的完整链路3.1 查询编排与真实会话采集整个系统最底层的是查询编排器它决定了你每天在“问 AI 什么问题”。我们没有简单地把所有关键词塞进去跑而是把问题库按照监控意图分了几类种草向问题比如“值得入手的XX推荐”。对比决策问题比如“XX和XX怎么选”。避雷向问题比如“XX有什么缺点”。场景化问题比如“通勤15公里买什么代步工具”。不同类型的问题对品牌的暴露方式不同必须分开统计不能混在一起。我们把问题库做成可配置化业务同事可以自己在后台添加新问题系统会自动为新问题建立基线数据大概跑 7 天后才会进入正式监控列表。采集执行器是一组分布在不同地域和执行环境的无头浏览器实例。执行器接收 Query 任务后会启动一个真实浏览器会话向 AI 搜索助手发起查询等待答案流式输出完全结束后再把整段生成结果保存下来。这里有一个很容易翻车的细节很多 AI 搜索产品返回结果是流式的你看到的“打字机效果”本质上是内容分块传输。如果采集器只读取首包数据你拿到的往往是不完整的开场白引用列表还没出现就被截断了。我们的执行器必须轮询等待直到页面出现“完成”状态或网络空闲超时后才把完整快照落地到对象存储。每一条快照我们都会记录一组环境标记包括任务 ID、查询时间、问题类型、执行终端类型、浏览器 UA、可识别的产品版本特征。这样后续数据出现异常时才有足够上下文做归因而不至于面对一堆孤零零的文本。{ task_id: 20250417-104523-091, query: 20寸行李箱和24寸行李箱哪个更适合短途旅行, question_type: comparison, raw_result_path: s3://geo-snapshots/raw/2025/04/17/20250417-104523-091.json, client_env: desktop_web, captured_version: gpt_answer_v2.4, status: completed }3.2 从流式页面到结构化快照原始快照只是第一步真正费精力的是把它转成结构化数据。AI 搜索结果的展示形式五花八门文本段落、引用角标、数据表格、图片卡片混在一起。我们一开始想过直接套用 HTML 解析器发现根本行不通——很多 AI 回答的文本被渲染在一个动态容器里引用标记和正文关系不是通过常规 DOM 结构表达的必须按内容特征去切分。我们最终的解析流程分四步。第一步做文本清洗把广告推荐位、登录弹窗、无用脚本隔离掉只保留回答主区域。第二步做引用拆分根据引用标记把整段文本切成若干块让每一句生成文字能对应到具体的来源索引。第三步是从页面尾部或来源卡片区提取引用列表把来源的标题、域名、URL 解析出来再与第二步的引用标记形成映射。第四步做实体抽取识别段落中出现的品牌名、产品系列名、人物和组织机构用于实体覆盖分析。这里我强烈推荐在解析链路里保留一份“原始答案摘要”。不要只存统计结果因为很多问题不是解析器能提前预判的。比如某天 AI 用了一个你从来没见过的表达方式提到你的品牌解析器可能没认出这是一个品牌变体但人工回看原文本时一眼就能看到。保留原文加上任务级别的回溯能力会让你在排查数据问题时从容得多。3.3 可见性计算把“有没有被提起”变成可比较的分数结构化数据落库后就到了指标计算层。我们内部没有一开始就上复杂的加权模型而是先用一套非常白的计数逻辑。对于每一个查询系统会检查品牌词是否命中正文、品牌域名是否出现在引用列表、品牌是否出现在推荐追问中。def compute_category(parsed_result, brand, brand_domains): in_answer brand.alias_hit(parsed_result[answer_text]) in_citation brand.domains_hit(parsed_result[citation_urls]) in_followup brand.alias_hit(parsed_result[followup_questions]) if in_answer and in_citation: return 核心推荐 elif in_answer and not in_citation: return 正文提及 elif not in_answer and in_citation: return 仅来源引用 elif in_followup: return 路径渗透 else: return 未覆盖可能有人会觉得这个分类太简单但它非常实用。业务团队早上打开看板一眼就能看出品牌在多少问题里属于“核心推荐”在多少问题里只是“仅来源引用”。前者代表 AI 在总结性表述里主动认可了你后者代表模型认可你的内容但没把你作为核心结论。这两种形态对应的优化手段完全不同核心推荐低问题可能出在外部评价和品牌声誉仅来源引用高问题可能出在页面表达不够有结论性模型读懂了内容但没在回答里做提炼。等到团队习惯这套原始分类之后我们才引入加权总分用来做趋势分析。规则的思路很简单命中答案正文记 5 分命中引用列表记 3 分出现在推荐追问里记 2 分出现在“相关搜索”里记 1 分。权重不是拍脑袋定的而是拿历史三个月的业务转化数据反推出来的。我们发现用户在 AI 搜索结果页停留后真正产生进一步行为的主要是那些品牌出现在答案正文前 200 字内的会话所以这部分权重给到最高。3.4 告警怎么定才不会被随机波动带偏数据系统一旦铺开最怕的就是每天邮件轰炸。我们最开始用的固定阈值是“可见性环比下降 20% 就告警”结果一周能触发七八次全是无效告警。原因是同一类 AI 模型在改版前后的随机波动很大有些查询本来就只有 20% 左右的命中概率单日下降 10 个百分点纯属数学噪声。后来我们换成了基于历史分布的动态告警。系统保留每个查询维度下过去 28 天的指标分布用 EWMA 指数加权移动平均做平滑再和当前观察值做偏差检验。只有当偏差超过历史标准差的 3 倍且当日有效查询样本数不低于 30 条时才会生成一条真正推送给人的告警。这个改动让告警准确率大幅度提升也避免了业务团队因为“狼来了”效应而忽视重要波动。另外告警里必须携带证据会话样本而不是只给一个抽象数字。比如系统检测到某个品类下的可见性异常下跌告警卡片里直接附上 3 条下跌前后的真实回答原文以及对应快照的访问链接。这样值班同学打开告警就能判断是真出问题了还是解析器出了 bug不需要再去数据仓库里捞一遍。4. 指标设计的真正难点不是统计而是语义4.1 被引用不等于被推荐这是我最想强调的一点。很多做 GEO 监测的团队会默认“被引用 好事”但实际情况远比这复杂。AI 在回答一个对比型问题时可能会引用某个品牌的官方参数页来证明“这款产品不适用于高负载场景”也可能引用一篇评测文章来佐证“该产品存在明显短板”。这种情况下你的官网 URL 进了引用列表但引用语义是负面的。我们的指标字典里专门设计了一个“引用上下文情感”字段。解析器在定位到引用位置后会把那一句生成文本截取出来交给情感分类层判断属于正面、中性还是负面。比如“XX 在续航方面表现优秀适合长途旅行”是正面引用“但是 XX 的售后服务普遍被吐槽”就是负面引用。负面引用率如果持续走高说明市场上出现了对你品牌不利的声量这时候 GEO 优化解决不了问题应该先去做舆情和产品质量排查。为了避免人工误解我们明确规定了只看三类粗粒度情感不做五档或十档细分。AI 生成文本的情感常常比较含蓄让模型硬分“轻微负面”和“中等负面”很容易造假象最后你会发现算法的一致性还不如人工判断。4.2 没有排名的“位置”才是最难归一化的传统 SEO 里位置很好定义。AI 搜索没有固定的视觉列表品牌出现在一段回答里的哪个位置影响很大的。我们监测时发现同一个品牌可能出现在“如果你更看重便携性也可以看看 XX”这样的让步句里也可能出现在“首推 XX”的绝对句里。这两句话在用户决策中的分量完全不同。所以我们对“答案正文位置”做了语义权重识别把首句结论、中间论证、末尾让步、推荐总结分别做标记。只有当品牌出现在“结论性表述”或“推荐性表述”中才会计入核心推荐指标。如果品牌只出现在一段中立列举里比如“市场上包括 A、B、C 三个品牌”那只能算“被提及”不能算“被推荐”。我曾看到有团队把一个品牌在 40 个问题里的“被提及率”包装成核心指标向管理层汇报说品牌在 AI 搜索里曝光很高。但真实内容是 AI 只是在列举竞争者时顺带提了一句没有任何推荐倾向。这种虚荣指标会让业务方向跑偏所以我们在设计指标时宁可先少报几个数字也要保证每个数字传递的语义是准确的。4.3 品牌与实体的双层覆盖另一个容易漏掉的维度是实体层和来源层的错位。AI 有时候会把你页面里的核心事实吸收进自己的知识库然后生成一段看似完全不依赖引用来源的回答。用户看到了品牌名但答案底部没有对应的 URL。这时候如果你的监测系统只统计引用 URL就会得到“品牌没有被 AI 提及”的错误结论。我们在实体层专门做了一套词典匹配加模型兜底的双层识别。词典负责覆盖品牌全称、简称、历史上出现过的错误别名模型兜底负责发现那些词典里没有的新表达比如某天 AI 突然用了一句“那个主打轻量化的国产品牌”来代指你词典匹配会漏掉但语义模型能从上下文里识别出它指向的目标。实体层识别出的结果会单独建表不和来源层合并因为它们的业务含义不同来源层体现的是内容作为论据的有效性实体层体现的是品牌在模型知识体系中的渗透度。4.4 归因怎么识别一次下跌是内容问题还是模型更新有一次我们遇到了一个特别让团队崩溃的场景核心品类引用率在一个晚上跌了 40%。当时内容团队的第一反应是官网出了故障检查之后发现页面一切正常。后来我们调取数据环境变量表才发现当晚这家 AI 搜索产品发布了一个新版本模型。新模型在回答用户问题时明显倾向生成“总结型答案”不再像旧版那样频繁展示引用来源列表。换句话说不是你的内容变差了而是 AI 呈现内容的方式变了旧的引用类指标在这个新版本下整体失真。这件事给我们最大的教训是必须把“模型版本环境”作为第一归因维度。我们在每次采集时都会尽量记录可识别的版本特征并且在指标看板上加了一个环境变量图层。遇到明显跳变时先看当日是否有版本变更标记再用新旧版本的同期数据做对比确认指标变化是普遍性的还是只影响特定内容。如果某个品牌的表现与整体大盘走势背离那才更有可能存在真正的内容层问题。5. 上线半年踩过的坑5.1 假跌破模型更新与真实业务下滑的混淆上面提到的模型更新场景在实际操作里是最容易误导团队的。我们的报警系统曾经在某个周末推送“某品牌可见性大幅下跌”当时我第一反应是检查采集任务有没有大面积失败。随后发现失败率正常、解析率正常、覆盖率也正常于是陷入了一个更尴尬的局面数据没问题但结论明显离谱。后来通过对照产品版本号发现答案生成策略已经切到了新版本。新版本把很多开放式问题的回答从“段落引用列表”改成了“先给总结再给一个极简来源列表”导致旧解析器对来源列表的识别率大幅下降。解决方式是在解析链路里增加针对新展示模板的适配器然后对历史数据做重算。这里提醒一句任何监测系统都要建立环境版本变更台账否则你会浪费大量时间在“是真的跌了”还是“统计口径失真”之间反复横跳。5.2 桌面端和移动端对同一问题的回答不一样我们还遇到过同一时间维度下品牌在移动端搜索结果里出现率很高在桌面端却几乎为零。最开始怀疑是采集节点有问题后来把移动端和桌面端的原始快照放在一起对比才发现两款终端背后的检索器配置确实不同。移动端的召回策略更偏向通用知识库桌面端则更依赖实时网页检索所以同一个页面的可见性在两个终端上出现分化。这个问题的解法不是抱怨不公而是把监测维度拆开。最终的看板里桌面端和移动端的指标完全分开展示核心问题的分析报告也会标注终端差异。这样内容团队能明确知道某个优化动作到底改善的是移动端的实体渗透还是桌面端的引用覆盖。5.3 低频 Query 的置信度陷阱长尾问题的采集频次通常很低有些问题一天只跑 10 次哪怕品牌命中次数从 3 次变成了 1 次引用率也会出现暴跌。用这种低样本数据生成的告警对业务没有任何参考价值只会制造焦虑。我们后来对低频 Query 做了两个限制一是低频问题不参与日级趋势判断只参与周级或月级汇总二是在展示引用率时为每个指标计算 Wilson 置信区间。报告里数字后面会带上下界比如“引用率 42%95% 置信区间 32%—53%”。业务团队看到这个区间以后就不会因为单日从 45% 变到 35% 而紧张因为他们知道这个波动本来就在正常范围之内。5.4 用 LLM 做解析时引入的二次污染我们在实体抽取和情感分类环节大量使用了 LLM。LLM 带来便利的同时也带来了新问题它会在文本里补充原本不存在的因果关系把一句中性的列举解读成推荐或者把品牌 A 的内容错误关联到品牌 B 上。系统自动标注的时候看着很有逻辑抽样人工复核时才发现错误率并不低。现在我们的做法是凡是 LLM 产出的标签都要经过规则层的二次校验。比如品牌实体抽取的结果至少要在原始文本中出现过或者能通过品牌词典的别名映射关联到正文片段引用上下文情感分类结果如果与引用来源页面的标题语义存在明显冲突系统会要求人工复核而不是直接写入指标库。靠规则层兜底之后自动标注质量才达到可以放心推送的水平。6. 业务团队拿到 GEO 指标之后怎么用才有效6.1 内容团队把引用率当“更新触发器”GEO 监测最直接的使用方是内容团队。以前内容团队更新一篇产品评测只能被动等搜索引擎收录然后看自然流量变化整个反馈周期很长。现在我们在内容系统里接入了“引用率预警”机制每篇核心内容都绑定了一组问题集当它在 AI 答案中的引用出现连续下跌时系统会自动给内容负责人推送提醒附带 AI 的最新表述和引用上下文。内容团队拿到提醒后会先确认文章中的关键信息是否已经过时。曾经有一篇关于产品参数的指南在竞品发布新版本后引用率快速下滑。内容团队更新了参数对比表并在开头增加了一段结论性摘要大概三周后引用率回升到历史均值以上。这个案例让我更确信一点AI 搜索在当前阶段对新鲜度和结论清晰度的敏感度往往比你想象的更高。6.2 实验设计AI 搜索场景下没有干净的对照组任何优化动作都需要验证效果但在 AI 搜索场景里做实验很棘手因为你没法把用户随机分成两组分别看到“有优化”和“没优化”的 AI 回答。于是我们采用了时间序列交叉设计。拿内容改版来说先观察一个核心问题集 4 周的基线表现再执行内容改版观察 4 周实验期表现然后选择一部分内容撤掉改版再观察 4 周恢复期表现。通过这种前后对照尽量把季节因素和平台算法漂移的影响剥离出来。这个周期比较长但得到的结论远比“改完第二天引用率涨了”可靠。实际操作中真正有效的内容改版通常集中在三个点把结论性表达提前到页面首屏把关键参数用表格和结构化数据呈现在文章内增加可验证的外部数据源引用。这些动作本质上是帮助 AI 更快地从你的页面里抽取“值得引用的事实”。6.3 从引用率走向“被理解”的监测最后说一点我的个人判断。GEO 监测现在还处在比较初级的阶段大家盯的主要是“有没有被引用”“有没有被提及”。但 AI 搜索接下来一定会更强调答案的整合性和可解释性单纯被引用可能不再稀缺稀缺的是模型是否真正理解了你内容的适用边界、核心优势和差异化定位。这就需要监测系统从引用指标走向理解类指标比如模型能否准确回答“你的产品适用于谁”“和竞品的本质区别在哪里”。我们已经在实验一种新的评估方式让一个独立的评估模型阅读我们的品牌核心文档然后生成品牌画像再用 AI 搜索的实际回答去对比画像的一致性。如果两者差距变大说明模型对品牌的理解发生了漂移。这类指标虽然没有引用率那么直观但它更能反映品牌在生成式引擎中的长期心智占位。这套系统运行到现在我最大的体感是AI 搜索不是没有规律只是规律的粒度更细、变化更快。我们要做的不是找到一个永远不变的公式而是建立一套能快速感知变化、并能解释变化原因的基础设施。如果你所在的团队也正在做类似的事建议先把预期的核心问题和指标字典确定清楚再动手写采集器而不是先写两万行代码抓了几百万条数据之后再来争论你到底想要什么答案。