做SEO这行的人,应该都有同感:过去几年我们盯的是排名、收录、外链,这三个指标几乎构成日常工作全部。但是某搜索平台的AI答案上线之后,事情变了。用户搜一个问题,平台直接生成一段完整回答,把原本属于自然结果的点击截走。这时候再用老办法去优化,会发现排名明明在前面,流量却没有涨。这篇文章聊的是我用一套多模态智能体规划智能体来拆解SGE流量抓取、关键词拓词、排名维稳这套流程的完整记录,适合正在做搜索流量、SEO、内容增长,又对AI智能体工具化感兴趣的朋友。
先说清楚一件事:这套流程并不是什么黑科技,而是把“搜索生成体验(SGE)”环境下的三个核心工作——流量抓取、关键词拓词、排名维稳——用智能体的方式重新组织了一遍。核心思路是让一个规划型智能体负责拆任务,让一组执行型智能体负责跑数据,最终把原来靠人工翻页面、凭经验判断的SEO工作流,变成一套半自动化的数据流水线。下面我把整个拆解过程、每个环节的原理、遇到过的问题和最终的方案取舍,完整地写出来。
1. 项目核心逻辑:为什么用智能体规划智能体
1.1 传统SEO工作流的三个痛点
我最早接触这套需求时,第一反应是它并不复杂——不就是抓SGE结果、拓词、监控排名吗?但真正深入做下来才发现,传统工作流在这里有三处明显的断点。
第一个断点是数据散。排名数据要在某搜索平台后端看,SGE答案要单独去搜索结果页抓,关键词来源又分散在各类工具和平台。这三类数据平时是分开管理的,分析的时候要先手动导出,再拼在一起看,费时费力,而且拼完通常已经过了大半天,参考价值明显下降。
第二个断点是决策慢。比如你发现某个核心词排名从第3掉到第8,传统做法是先打开搜索结果页看看什么情况,再猜是不是内容更新不及时、是不是竞品加了内容、是不是之前的模板页面被降权。这一串排查动作非常依赖个人经验,新人根本无从下手。
第三个断点是维护难。SGE环境下,排名稳定不再只是一个位置的数字问题。同样排在第3,如果SGE答案占据了首屏大半空间,用户根本看不到第3名;如果没有SGE,第3名反而能吃到不错的曝光。这意味着做排名维稳,必须把SGE的状态和排名状态放在一起看,而传统工作流里这两个信息是割裂的。
这三个痛点叠加在一起,结论很直接:靠人工做SGE环境下的SEO,成本高、反馈慢,而且很难形成可复用的方法论。于是我想把决策过程交给一个“规划型智能体”,让它在前面拆解需求、调度后面的执行任务。
1.2 规划智能体到底在“规划”什么
“多模态智能体规划智能体”这个表述,我拆成两层来理解。
第一层是“多模态智能体”。SGE数据不只是纯文本,搜索结果页里有AI答案段落、产品卡片、对比表格、图片模块,甚至视频卡片。解析这些内容,不仅要读文字,还要理解页面结构和视觉信息。所以我采用的是多模态能力的模型来做页面理解,把复杂的搜索结果页转成结构化数据。
第二层是“规划智能体”。这是整个系统的大脑。它不直接抓页面,也不直接做内容修改,而是负责把一个高层目标——比如“这个月让某品类词的流量涨20%”——拆解成子任务:先抓SGE数据、再拓词、再分析排名变化、最后输出行动建议。它像项目主管一样,把任务分配给它下属的执行智能体。
打个生活化的比方:你是一家餐厅老板,以前买菜、切菜、炒菜、尝味道都是你自己干。规划智能体就是帮你请了个后厨主管,你说一句“今天要招待一桌客人”,主管会自动拆成买菜清单、备菜顺序、炒菜时间和试菜标准。你只管定目标,他管排兵布阵,下面的厨师只负责把菜炒好。
这种架构的好处是每一个执行智能体都足够简单,出问题容易排查;同时规划智能体把复杂逻辑集中管理,业务目标变了只改规划层,不需要每个执行模块都动。实际运营下来,这个设计帮我省掉了大量流程拼接的时间。
1.3 整体架构:三层分工
整套系统我会分成三层来看:
第一层是入口层,接收业务需求。比如输入一批核心种子词,或者输入一个“提升某品类词流量”的目标。
第二层是规划层,也就是核心的规划智能体。它接收入口层指令,判断当前需要做什么,然后生成任务清单。任务清单会包含:抓取哪些词、用什么策略解析SGE、拓词范围、巡检周期、告警阈值等。
第三层是执行层,由若干专用智能体组成:SGE抓取智能体、页面解析智能体、关键词拓词智能体、排名巡检智能体。每个执行智能体只处理一类问题,输入输出格式固定,由规划层统一调度。
这样分层之后,整个流程的扩展性变得很强。比如后来我需要加入“竞争对手监控”,只需要新写一个执行智能体,然后在规划层增加一个分支即可,原有模块完全不用动。
2. SGE流量抓取:从页面数据里挖信号
2.1 先搞清楚要抓什么、为什么抓
SGE流量抓取,名字听起来像“抓流量”,实际抓的是SGE区域的数据。要知道,用户搜一个词,搜索结果页从上到下可能依次是:AI答案框、精选摘要、产品卡片、付费广告、自然搜索结果。AI答案框就是SGE的核心区域。
我抓它不是去抄袭答案内容,而是为了搞清楚一件事:对于某个搜索词,某搜索平台认为哪些信息最能满足用户。这个判断会直接影响后面拓词和内容策略。
比如某品类词,SGE答案里如果反复出现“选购参数”“避坑清单”“不同价位推荐”这几种信息结构,那说明平台在这个词上偏好清单式和对比式内容。你再去优化页面时,就有了明确依据,而不是盲目堆字。
所以我定义的SGE流量抓取包含两层动作:一是技术上把SGE区域的数据完整抓下来,二是业务上从抓下来的数据里提取流量增长信号。两层缺一不可,只抓不分析就没有价值。
2.2 抓取方案与关键步骤
具体抓取过程中,最麻烦的一步是页面渲染。某搜索平台的搜索结果页是重度动态渲染的,直接发HTTP请求只能拿到一堆JS框架代码,拿不到SGE区域的实际内容。我用的是一个浏览器自动化框架,也就是用无头浏览器渲染完整页面,然后等待SGE区域加载完成再做后续解析。
等到页面加载完成后,下一步是定位SGE区域。这个区域没有固定的HTML类名,不同词、不同时间节点结构都可能变化。纯靠CSS选择器会很脆弱。我的方案是层叠判断:先通过元素位置特征圈定结果页顶部区域,再利用页面语义标记判断是否包含AI生成内容。
拿到了SGE区域之后,我引入多模态模型来理解这个区域。这一步是整套流程里我最推荐的部分。多模态模型可以把SGE区域的截图和DOM结构一起作为输入,直接输出一个JSON对象,包含答案摘要、推荐卡片、引用来源等结构化信息。输出的JSON我设计成下面这样:
{ "query": "某品类 怎么选", "sge_block": "存在", "sge_summary": "选购时应重点关注的参数包括...", "recommended_cards": [ {"title": "2024年某品类选购指南", "source": "某垂直资讯站"}, {"title": "新手避坑清单", "source": "某内容社区"} ], "cited_urls": [ "https://example.com/a", "https://example.com/b" ] }有了这个结构化JSON之后,后面做分析就轻松多了。引用来源可以直接用于反查竞品权重,推荐卡片标题可以用于挖掘内容方向,答案摘要可以用于反向拓词。
解析代码不复杂,但是有几个处理细节要注意。我单独写了一个解析函数,把重点字段抽出来:
import json def parse_sge(raw: dict): result = { "query": raw.get("query"), "sge_summary": raw.get("sge_summary", ""), "cited_urls": raw.get("cited_urls", []), "cards": raw.get("recommended_cards", []), } result["card_count"] = len(result["cards"]) result["has_sge"] = bool(raw.get("sge_block") == "存在") return result这样每个查询词都会生成一条结构清晰的记录,后续无论是存数据库还是喂给拓词智能体,都很顺手。
2.3 数据落库与生产环境的踩坑点
数据落库的字段设计,我一开始写得很简单,就是query、sge_summary、cited_urls几个字段。但跑了几天就发现问题:同一批词,不同时间抓到的SGE内容可能发生变化,如果不记录抓取时间,后续做趋势分析时根本分不清是哪个时段的数据。
后来我调整了表结构,把抓取时间、SGE是否命中、答案摘要长度、引用域名列表、SGE卡片数量这些全部作为独立字段存下来。每天定时抓一次,三天之后就能形成趋势曲线,能清楚地看到平台在哪些时间点调整了SGE展示逻辑。
另外在采集频率上,这里有个特别容易踩的坑:同一个搜索词如果在短时间内抓太多次,平台会给出异常验证码或者直接拒绝请求。所以我的巡检周期统一设置成每小时一次,核心词和长尾词分开不同频率,核心词一天跑两次,长尾词一天跑一次,尽量模拟正常用户访问节奏。
还有一个经验:不要只看SGE摘要的文本内容,要特别关注引用来源和推荐卡片的来源域名。引用来源是平台“亲自”筛选过的结果,相当于它告诉你:这个站点在这个话题上有权威性。我每天用这个信号反查自己的站点是否出现在引用列表里,如果上了引用,说明平台已经开始认可该页面的相关性;如果连续几天都不上,再检查内容和结构。
2.4 从抓到的数据里反推内容机会
抓取不是目的,从抓取结果里反推内容机会才是。我的做法是每周汇总一次的SGE答案文本,用另一个模型做一轮语义聚类,看这一周内平台在某个行业方向上的答案倾向。
举个例子,某次我对一批“某设备推荐”类的词做聚类,发现SGE答案里大量出现“性价比”“售后服务”“评测数据”这三个属性。于是把对应页面的内容重心调整了一下,把相关参数表格前移,在标题区加入性价比对比数据。结果是,后续一周这些词的SGE引用命中率明显提高,点击量也同步上来了。
这套流程真正跑通之后,SGE流量抓取就不再是“抓下来看看”的临时任务,而是整个项目的数据底座,关键词拓词和排名维稳都建设在这个底座之上。
3. 关键词拓词:从搜索意图里找增长点
3.1 传统拓词方式的局限在哪里
做关键词拓词,以前最常见的做法是用平台下拉框建议、相关搜索推荐,以及各类关键词工具的反查数据。这些方式确实能拿到词,但有一个共同的局限:给的是词,不是意图。
比如“某品类怎么选”这个词,下拉框可能还会出现“某品类怎么选性价比高的”“某某牌子怎么选”。你拿到这些词之后,只知道要覆盖这些搜索词,但是不完全理解用户的真实需求——他是在比较参数?在看口碑?还是在找购买渠道?
SGE环境下的拓词逻辑不一样。它把用户需求直接用答案文本的方式呈现在你面前,你不需要猜,只要从答案里提取用户的真实问题路径。这个路径天然就是长尾词,而且比工具推荐词更贴近真实的用户提问方式。
3.2 意图聚类是拓词前的关键准备
我开始做拓词之前,会先把抓到的SGE答案按意图做一轮聚类。不直接让模型去“生成”新词,而是先让模型回答一个问题:这批词背后的用户需求是什么类型。
我通常把搜索意图分成几个基础类型:
- 知识了解型,比如“某概念是什么”“原理是什么”,用户想搞清楚基础信息。
- 产品比较型,比如“A和B哪个好”“C值得买吗”,用户已经进入比较阶段。
- 购买决策型,比如“某价格多少”“哪里买靠谱”,用户有明确行动倾向。
- 操作解决型,比如“怎么安装”“常见故障如何处理”,用户遇到实际问题需要解决。
这个分类特别重要。同样是拓词,不同意图类型的词对应完全不同的内容策略。知识型词适合做百科式长文和FAQ,比较型词适合做对比表格和评测,购买决策型词适合做购买指南和优惠信息页。一旦分类做错,后面内容做得再好,也很难接到正确的流量。
3.3 借助SGE答案的反向拓词法
分好意图之后,我会用反向提问法来拓词。所谓反向提问,就是把SGE答案文本反向转换成“用户可能会提的问题集合”。
具体操作方式是这样的:把抓取到的SGE答案摘要和推荐卡片作为上下文,让模型以“一个正在搜索的用户”视角,提出他下一步可能会搜索的问题。比如SGE答案里如果出现了“不同价位推荐”这个信息,那用户下一步完全可能搜“500元以内某品类推荐”或者“高端某品类哪个好”。
这个方法生成的词有几个明显特征:自然语言痕迹强,很多是口语化的完整问句;搜索意图明确,词根集中在问词和比较词;时效性好,SGE答案本身就是最新平台认知,拓出来就是长尾词方向。
我用的提示词模板比较简洁,实际效果比写得很复杂的模板更好:
你是一位搜索意图分析助手。根据以下SGE答案文本,提取: 1. 用户的核心需求是什么 2. 将需求拆成5到10个子问题 3. 每个子问题给出3个中文搜索词变体 要求:只输出JSON,不要额外说明。输出之后,我会做一个过滤动作。覆盖条件有三个:词意必须和种子词同属一个实体范围、词长不能过短避免无意义词、搜索语境必须和原答案高度相关。过滤之后才进入最终的关键词池。
3.4 怎么判断一批拓词的“质量合格”
很多新手拓词时会只看数量,觉得跑出几千个词就是成功。但我自己在验证后发现,质量比数量重要得多。我评判一批拓词是否合格,通常看三个维度。
第一是相关性。这个词是否仍然处于原来的品类语境里。比如核心词是“某品类”,结果拓出来的词混进了“另一品类”,这类词不管搜索量多大,直接丢弃,否则会污染整个内容规划。
第二是搜索量信号。SGE答案本身不会给搜索量,所以我会用搜索下拉框的出现频率做辅助验证,如果拓出的词能在搜索建议中出现,说明是真实的高频搜索词。
第三是竞争度信号。判断方式很简单:搜索结果页有没有大量SGE内容、有没有多个电商平台占据位置。如果SGE已经很完善,说明这个位置已经被平台强制“截流”,做自然排名难度极大,不如转向长尾变体。
这三个维度可以用一个简单表格来总结:
| 判断维度 | 合格标准 | 不合格表现 |
|---|---|---|
| 相关性 | 词意与种子词同品类、同需求场景 | 混入无关品类、需求错位 |
| 搜索量信号 | 搜索建议中出现、长尾转化路径清晰 | 纯人工造词、无真实行为 |
| 竞争度信号 | SGE未完全覆盖、有自然结果空间 | 头部位置全被SGE和广告占据 |
这个判断体系帮我筛掉了很多“看起来很好”的无效词。实际项目里,原始拓词两万多个,最终留下来进入内容排期的词只有三千多个,但后面每一篇内容转化流量都明显更稳。
4. 排名维稳:从盯位置到盯整个搜索生态
4.1 排名波动的真实原因比想象中复杂
排名维稳是这套流程里最难的一部分,因为SGE出现之后,排名波动的变量变得非常复杂。以前排名掉了一名,大概率是竞争对手内容质量提升;现在排名掉了一名,可能是竞品动了、可能是平台调整了SGE展示、也可能是你页面的点击率指标下滑让平台判断“用户不喜欢这个结果”。
我个人把影响排名稳定的因素分成三类:
第一类是平台因素,包括搜索算法更新、SGE展示逻辑调整。这类因素你控制不了,只能监控和适应。
第二类是页面因素,包括内容陈旧、内链调整、页面打开速度变化等。这一类是可以主动维护的。
第三类是竞品因素,对方发布了更好的内容、或者页面权重明显上涨。这一类需要持续观察对手动作。
忽视任何一类,都会导致你在排查排名波动时找不到真正的原因。比如我遇到过几次情况,排名下降不是页面本身的问题,而是SGE突然增加了一个对比模块,导致用户点击被截走。这时候去修改页面标题说明文,完全无用,正确的做法是调整内容结构去匹配SGE的对比偏好。
4.2 维稳的核心动作:盯SGE状态和点击信号
我对“排名维稳”的重新定义是:不追求一直排在第一名,而是让自己的页面持续出现在平台认可的有效展示区域,同时抓住SGE带来的展示机会。
为了实现这个目标,主要做三件事。
第一件事是定期检测SGE状态。每个核心搜索词,我每天都会记录两个关键信息:当前排名位置、页面SGE是否有答案。如果某个词SGE答案消失,相当于原本属于平台答案是曝光位突然释放,排在后面的自然结果就有机会上位,这时要确保自己的页面内容随时具备接住流量的条件。
第二件事是盯点击信号。这里说的点击信号不是后台的真实点击率,因为外部拿不到,而是间接信号:页面在SGE答案的引用来源中是否出现。如果出现,就说明平台把你的页面当作该话题的可信来源,后续被持续引用的概率会提高。有一次我把一篇文章中“售后服务”板块扩展成表格形式,两周后这个词的引用命中率明显上升,排名也同步上了一个身位。
第三件事是内容新鲜度维护。SGE环境下的信息时效特征比传统搜索更明显。旧内容不是不能排,而是需要主动更新关键段落,尤其是产品价格、购买建议、行业趋势这些时效性强的模块。我每两周会筛一遍核心词对应的落地页,把带时效性的段落重新生成后替换,这个动作看起来简单,但对排名稳定帮助很大。
4.3 用巡检智能体做自动化稳定监控
排名维稳如果完全靠人工巡检,很容易疲劳和漏判。我把它做成一个自动化的巡检智能体,让它定时执行并输出告警。
巡检智能体的逻辑并不复杂。它会定期读取核心词清单,逐个抓取搜索结果页信息,做出一个快照,快照里包含当前排名、SGE是否存在、SGE答案全文、SGE引用域名列表、自然结果前5名域名。然后按预先设置的规则判断是否需要告警。
我定义了几条核心告警规则:
- 核心词排名从10以内跌出10,触发告警;
- 某个词本周新增SGE答案且引用了竞品但没有引用自己,触发告警;
- 连续三天SGE引用来源里出现自家域名但排名反而下降,触发人工评估。
执行代码的核心结构大概是这样:
import time def check_poll(queries, runner, interval=3600): alerts = [] for q in queries: snapshot = runner.run(q) if snapshot.position > 10 or snapshot.has_sge_cover: alerts.append({ "keyword": q, "position": snapshot.position, "sge_cover": snapshot.has_sge_cover, "ts": time.time() }) return alerts巡检智能体跑起来之后,最大的收获不是省了多少人工,而是让排名波动从“事后发现”变成了“事中感知”。以前一个词排名掉了可能要两三天才能反应过来,现在几乎当天就能定位到是哪种类型的波动,然后再决定是改内容、调内链还是静观其变。
4.4 排名维稳中常见的三个错误做法
做了一段时间之后,我总结出三个特别容易犯的错误。
第一个错误是排名一掉就动页面。很多人的本能反应就是“掉排名了,赶紧改标题,换内容”。这种做法大多时候会让情况更糟。因为平台已经对你的页面形成了一定认知,频繁大改结构等于把自己好不容易积累的权重推倒重来。正确的做法是先看SGE状态和各位置的权重信号,如果大概率是平台因素导致的临时波动,什么都不动反而是最好的处理。
第二个错误是只盯排名不盯SGE状态。正如前面说的,排名是数字,展示机会才是关键。如果某词根本没有SGE答案,排在前三位就能获得很大的曝光;一旦SGE出现,前三位也可能被挤到首屏之外。所以做维稳,一定要“排名+SGE状态”一起看,单独盯任何一项都会误判。
第三个错误是把排名稳定理解为“不波动”。搜索引擎本身的排序算法就有随机性测试,完全不动反而不正常。我的判断标准是:只要页面在有效曝光窗口内保持合理波动,比如第3到第6之间,同时SGE引用状态正常,就是稳定状态。不需要为了一天之内的一两个位次变化过度反应。
5. 全流程复盘与踩坑记录
5.1 跑通一次完整流程的现场记录
为了验证整套流程的可行性,我选择了一个处于“品类疑问”阶段的种子词做了一次完整测试。流程是这样的:先抓取这个词的SGE答案数据,拿到答案结构和引用站点,再让规划智能体生成内容建议,修改页面相应模块,最后连续观察两周排名和SGE引用变化。
第一周的前三天,SGE答案里出现过我页面的引用,但排名一直卡在第7名左右。我没有做任何调整,继续让它跑。到了第五天,SGE答案结构发生变化,摘要中增加了一个“常见误区”模块,而我的页面也有相应内容区块。随后两天,该词自然排名进到前4,SGE引用频率仍在持续。
这个案例让我确认了一点:SGE答案的结构变化就是平台在动态告诉你“这个方向的内容我可以给更多曝光”。整个系统的价值,就是把这种动态信号及时抓出来,让你在内容上做对应的接应。
这个过程的细节并不复杂,但执行之前需要把前面各章节提到的基础数据都准备好,尤其是SGE抓取和意图分类,只有当这两块数据稳定了,后续的规划调度才不会跑偏。
5.2 踩过的四个坑,每个都真实存在
第一坑:结构化输出不稳定。最初让规划智能体输出调度指令时,模型偶尔会多输出一段解释性文字,导致下游执行智能体解析失败。解决办法是在提示词里反复强调“严格输出JSON”,同时在上游增加一层文本规范化模块,把解释性内容剥离之后再交给下游。
第二坑:SGE引用来源存在幻觉。模型在解析SGE答案时,有时会“脑补”出一些实际上并不存在于页面中的引用域名。这个问题最隐蔽,因为单独看结果看不出毛病。后来我在解析流程中增加了引用URL的二次校验,直接检查引用URL是不是真实出现在原始页面里,不在就不信任。
第三坑:采集频率把控不好。刚开始跑巡检,因为想快速拿到数据,巡检间隔调得特别短,结果某个核心词出现验证拦截,导致后面好几个小时数据断档。后来所有采集频率统一调整为模拟人工访问的节奏,核心词也控制在每天两轮以内。
第四坑:规划智能体的目标定义太模糊。最初输入只是“提升流量”,结果规划层拆出来的任务非常散,一会儿是内容更新,一会儿是外链建设,执行层无所适从。后来我要求每次输入目标必须带可量化的指标,比如“某品类词流量提升20%”,规划层的拆解结果立刻清晰了很多。
5.3 常见问题速查表
把实际操作中常遇到的问题整理成了一张速查表,方便拿来就用:
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| SGE区域识别不到 | 页面动态加载未完成、SGE折叠状态 | 延长渲染等待时间,增加页面滚动触发加载 |
| 模型输出的引用URL是假的 | 多模态解析存在幻觉 | 增加原始页面DOM二次校验,不匹配直接丢弃 |
| 同一个词抓几次返回不同结果 | 平台测试流量分布、A/B策略 | 定时定点采集,构建趋势曲线观察 |
| 排名下降但SGE引用正常 | 内容时效性不足或页面权重滞后 | 优先更新时效模块,不要动页面结构 |
| 拓词跑出来的词太散 | 意图聚类不充分、上下文过宽 | 先做意图分类,限定实体范围再拓词 |
| 巡检频率过高被拦截 | IP触发访问限制 | 降低频率、增加多个IP轮换 |
这张表基本覆盖了我在跑这套流程时遇到的大部分问题。如果你是自己从零搭建,建议把这些规则先内置到巡检智能体里,能少走很多弯路。
最后说一点个人体会。做这套流程跑了一个多月,最大的感受是:SGE时代做SEO,工具能帮你省时间,但决定流量上限的还是对用户意图的理解。多模态智能体规划智能体这套东西,让我把以前靠感觉做的判断变成可复用的流程,具体到某次排名波动,能快速定位是哪个环节出了问题。如果你也在做搜索流量,建议不要一上来就搭复杂的智能体系统,先用脚本把SGE数据抓明白,再逐步加自动化和调度层,这样才能少踩坑,也更符合实际落地节奏。