seomachine /research-trending 深度指南:用 GSC 趋势数据捕捉搜索热点,从机会分计算到 4 周落地策略
【免费下载链接】seomachineA specialized Claude Code workspace for creating long-form, SEO-optimized blog content for any business. This system helps you research, write, analyze, and optimize content that ranks well and serves your target audience.项目地址: https://gitcode.com/GitHub_Trending/se/seomachine
/research-trending是 seomachine 中专门用于捕捉"正在升温"的搜索趋势的 Claude Code 命令。它基于 Google Search Console(GSC)的查询级曝光数据做"近 7 天 vs 前 30 天"的环比分析,结合 DataForSEO 搜索量与搜索意图分析,为每个趋势词计算 0–100 的机会分(Opportunity Score)与紧迫度等级(Urgency),最终生成一份按紧迫度分组、可直接执行的内容行动报告。读完本文,你将掌握该命令的完整运行方式、打分与紧迫度算法的源码级细节,以及"已排名 vs 未排名"两类趋势词的标准应对策略。
命令定位:为什么趋势内容是独立赛道
SEO 内容通常分为两类:常青内容(Evergreen)和时间敏感内容(Time-sensitive)。research-trending.md 明确指出该命令的目标是:
Identify topics gaining search interest NOW for time-sensitive content opportunities.
与 seomachine 中其他研究命令(如/research-serp分析单个关键词的 SERP 需求、/research-topics做主题规划)不同,/research-trending的输入不是关键词,而是你自己站点 GSC 数据中正在异常增长的查询。这意味着它发现的是"你的受众正在搜、但你可能还没有内容覆盖"的窗口期机会。命令文档反复强调时效性:
⏰ TIME-SENSITIVE: These are hot trends - act quickly before they cool or competition increases.
运行方式与前置环境
在 Claude Code 会话中直接输入:
/research-trending命令背后实际执行的脚本是仓库根目录的 research_trending.py:
python3 research_trending.py脚本启动时会依次完成三件事:
- 通过
load_dotenv()加载环境变量(research_trending.py 第 16 行); - 初始化三个数据源客户端:
GoogleSearchConsole、DataForSEO、SearchIntentAnalyzer(research_trending.py); - 若 GSC 连接失败则直接退出,若 DataForSEO 不可用则降级运行(跳过搜索量增强,但保留 GSC 趋势数据)。
必需的环境变量
数据源配置详见>trending_queries = gsc.get_trending_queries( days_recent=7, # 最近一周 days_comparison=30, # 对比前 30 天 min_impressions=20 # 至少 20 次曝光以过滤噪音 )
这三个参数正是命令文档中"Compares last 7 days vs previous 30 days / Filter to minimum 20 impressions"的源码落点。深入 google_search_console.py 的get_trending_queries实现(第 376–460 行),可以看到几个关键算法细节:
- 双窗口查询:分别以
query为维度向 GSC Search Analytics API 发起两次请求——最近 7 天(startDate = now - 7d)与对比窗口(startDate = now - 30d,endDate = now - 7d),每次请求rowLimit均为 1000。 - 曝光下限过滤:最近 7 天曝光不足
min_impressions(默认 20)的查询直接丢弃,避免小样本噪音。 - 增长率计算:
- 对比窗口中有曝光:
change_percent = (recent - previous) / previous * 100; - 对比窗口中从未出现(即新查询):增长率直接记为
+100%,即"新查询"统一视为 100% 增长; - 只保留增长率> 20%的查询(
change_percent > 20)。
- 对比窗口中有曝光:
- 排序:结果按增长率降序排列返回。
每个返回项包含字段:query、recent_impressions、previous_impressions、change_percent、clicks、position(google_search_console.py)。
一个需要注意的边界:新查询的 +100% 是人为赋值的固定值,并非真实测量。因此报告中看到"新词 +100%"时,它表达的是"对比期内该词没有任何曝光",实际爆发强度可能更高——在解读 CRITICAL 级别趋势时宜结合曝光绝对量一起判断。
第二步:数据增强(DataForSEO + 意图分析)
拿到趋势查询后,脚本只对排名最靠前的 30 条做增强(trending_queries[:30],research_trending.py),以控制 API 成本。每条趋势依次做两件事:
1. DataForSEO 关键词指标
keyword_data = dfs.get_keyword_ideas(query, limit=1)调用 dataforseo.py 中的get_keyword_ideas(第 282–340 行),它向 DataForSEO Labs 的related_keywords/live端点发请求,返回与查询最相关的关键词的search_volume、cpc等指标(limit=1表示只取第一条,用于近似该趋势词本身的搜索量)。脚本从中提取search_volume、difficulty、cpc三个字段(research_trending.py)。
从源码结构看,get_keyword_ideas实际返回的字段名为competition而非difficulty,因此difficulty字段在多数情况下会是空值——如果你发现报告中的 SEO 难度经常缺失,这是原因所在,属于当前实现中字段命名的不匹配,不影响趋势分析主流程(难度只参与报告展示,不参与打分)。
若 DataForSEO 未配置或请求失败,search_volume为None,脚本会继续运行(见下文的降级机制)。
2. 搜索意图分析
intent_result = intent_analyzer.analyze(keyword=query)search_intent_analyzer.py 基于查询词中的意图信号词(如what/how/guide→ 信息型,buy/pricing/free trial→ 交易型,best/review/vs→ 商业调查型)以及 SERP 特征映射,将每个趋势词归类为 Informational / Navigational / Transactional / Commercial Investigation 四类之一。意图结果写入每条趋势的search_intent字段,直接出现在报告中,帮助你在选题时判断"这个趋势该用教程、评测还是落地页承接"。
第三步:机会分(Opportunity Score)的完整算法
打分函数calculate_trend_opportunity_score(research_trending.py)输出 0–100 分,由三个维度加权,权重与命令文档中"Growth rate (40%) / Search volume (30%) / Current position advantage (30%)"完全一致:
增长率得分(权重 40%)
增长率growth_percent | 得分 |
|---|---|
| ≥ 200% | 100 |
| ≥ 100% | 85 |
| ≥ 50% | 70 |
| ≥ 25% | 50 |
| 其他 | 30 |
搜索量得分(权重 30%)
优先使用 DataForSEO 的search_volume;若为空,则回退使用 GSC 的近 7 天曝光数(recent_impressions)作为量级代理,这是脚本在无 DataForSEO 凭据时仍能给出合理评分的降级机制:
| 搜索量(或回退曝光量) | 得分 |
|---|---|
| ≥ 5000 | 100 |
| ≥ 2000 | 85 |
| ≥ 1000 | 70 |
| ≥ 500 | 55 |
| ≥ 100 | 40 |
| 其他 | 20 |
当前位置优势得分(权重 30%)
位置越靠前,"借力打力"的边际成本越低:
当前排名current_position | 得分 | 含义 |
|---|---|---|
| ≤ 20 | 100 | 已可见 |
| ≤ 50 | 70 | 有一定可见度 |
| ≤ 100 | 40 | 可见度极低 |
| > 100 | 20 | 基本不可见 |
最终分为三项的加权和并保留两位小数:growth_score * 0.40 + volume_score * 0.30 + position_score * 0.30。
紧迫度(Urgency)与优先级(Priority)
两个字段由不同函数生成,注意区分:
紧迫度calculate_urgency(research_trending.py),只由增长率决定:
| 增长率 | 紧迫度 | 行动时限 |
|---|---|---|
| ≥ 150% | 🔥 CRITICAL | 1 周内行动 |
| ≥ 75% | ⚡ HIGH | 2 周内行动 |
| ≥ 30% | ⏳ MODERATE | 1 个月内行动 |
| < 30% | LOW | 仅监控 |
优先级determine_trend_priority(research_trending.py),综合机会分与增长率:
| 条件 | 优先级 |
|---|---|
| 机会分 ≥ 80或增长率 ≥ 150% | CRITICAL |
| 机会分 ≥ 65 | HIGH |
| 机会分 ≥ 45 | MEDIUM |
| 其他 | LOW |
文档示例可帮助理解两者的组合效果:"ai content optimization" 增长 +429%、你的排名 27、月搜索量 1,800,落入 CRITICAL 紧迫度,建议动作是 3–7 天内产出综合指南。
报告输出:结构与解读
脚本控制台先打印 Top 10 摘要,然后将完整报告写入research/trending-YYYY-MM-DD.md(research_trending.py)。报告结构:
- 头部元信息:生成时间、策略说明、识别到的趋势总数,以及"TIME-SENSITIVE"提示;
- 紧迫度分布:CRITICAL / HIGH / MODERATE 各有多少条;
- CRITICAL 区块(最多 10 条):每条包含增长率与曝光变化(如
+429% (340 → 1,800 impressions))、当前排名、月搜索量、意图、机会分,以及自动生成的 "Why It's Hot" 分析与 "Recommended Action"; - HIGH 区块(最多 10 条)与MODERATE 区块(最多 15 条):字段更精简;
- Implementation Strategy:把 Top 3 CRITICAL 趋势排入第 1 周、HIGH 趋势排入第 2–3 周、MODERATE 排入第 4 周的 4 周执行计划;
- Key Insights:平均增长率、最热门趋势、"已排名(位置 ≤30)趋势数"、"快速获胜潜力"(已排名且优先级为 CRITICAL/HIGH 的数量)。
单条趋势的报告样例:
🔥 CRITICAL: "ai content optimization" Growth: +429% (340 → 1,800 impressions) Your Position: 27 Urgency: CRITICAL - Act within 1 week Why It's Hot: - Massive 4x growth spike - Related queries also rising Action: Create "Best AI Content Optimization Tools 2025" Timeline: Complete within 7 days从源码看,报告中的 "Recommended Action" 是按当前排名自动分支的(research_trending.py):排名 ≤ 30 生成"更新现有内容"四步,排名 > 30 生成"新建综合内容"四步——这与下一节的策略完全同源。
行动策略:已排名 vs 未排名
已排名(Position ≤ 30):快速获胜路径
- 立即更新现有内容;
- 加入趋势角度/新章节;
- 标题更新为当前年份;
- 面向该趋势查询做优化;
- 时限:3–5 天。
未排名(Position > 30):新内容路径
- 创建 2000+ 词的综合指南;
- 3–7 天内发布;
- 发布后立即在社媒推广;
- 可考虑付费推广加速曝光;
- 时限:最多 1 周。
四周节奏(来自文档 Strategy 节与报告模板)
- 第 1 周:全部资源投入 2–3 个 CRITICAL 趋势,发布并立即推广;
- 第 2 周:复查 CRITICAL 趋势是否维持动能,开始处理 HIGH 趋势,跟踪已发布内容的排名变化;
- 第 3–4 周:处理 MODERATE 趋势,并重新运行
/research-trending捕捉新出现的尖峰。
下游集成与成本
/research-trending在 seomachine 工作流中是"发现层",产出关键词后交给"执行层"命令:
/research-serp [trending keyword]:对该趋势词做 SERP 内容需求分析,产出报告research/serp-analysis-[keyword].md(见 research-serp.md);/write [keyword]:快速创建内容;- 发布要尽快——对趋势而言时间是核心竞争力。
成本与时耗(引自命令文档):
- 时间:1–2 分钟;
- API 成本:约 $0.20–0.50(若启用 DataForSEO 搜索量增强,按最多 30 次
related_keywords请求估算);仅用 GSC 趋势数据则免费。
运行频率建议为每周一次:周一早晨识别周末趋势、内容规划前确定时间敏感选题、流量出现异常尖峰时排查驱动因素。
实战注意事项与边界
以下几点在阅读源码后值得在实际使用前提前知晓:
research/目录需预先存在:write_markdown_report直接以open(filename, 'w')写入相对路径research/trending-YYYY-MM-DD.md,源码中没有创建目录的逻辑。请在仓库根目录下先建好research/目录再运行,否则会因目录不存在而报错。- 字段命名不匹配:从源码结构看,google_search_console.py 的
get_trending_queries返回的字段为change_percent与previous_impressions,而 research_trending.py 的增强循环读取的是trend['growth_percent']与trend['comparison_impressions']。两处命名不一致,若你实际运行时在增强阶段遇到KeyError,应首先检查这一对接点,必要时统一两侧字段名。 - 新词增长率是固定值:对比窗口无曝光的查询一律记为 +100%,判断其真实热度应结合
recent_impressions绝对值。 - 并非所有趋势都会持续:文档明确警告部分尖峰是临时性的(季节性波动尤甚)。建议监控趋势在 2–4 周内的延续性,用搜索量数据交叉验证,并优先选择与自身细分领域对齐的趋势词。
- GSC 数据延迟与样本限制:趋势结论完全基于自有站点的 GSC 查询数据,
rowLimit上限 1000 条查询意味着长尾极深的小型站点可能遗漏部分趋势;同时 GSC 数据存在数天延迟,"本周"窗口实际覆盖的是最近的完整数据日。
小结
/research-trending的价值在于把"哪些词正在变热"这个主观判断变成一条可复现的量化流水线:GSC 双窗口环比(7 天 vs 30 天、≥20 曝光、>20% 增长)→ DataForSEO 量级与意图增强 → 40/30/30 加权机会分 → 紧迫度分组 → 按排名自动分支的行动清单。配合每周运行、四周滚动执行的节奏,它构成了 seomachine 时间敏感内容战略的发现入口;发现入口的输出再经由/research-serp与/write完成从趋势捕捉到内容落地的闭环。
【免费下载链接】seomachineA specialized Claude Code workspace for creating long-form, SEO-optimized blog content for any business. This system helps you research, write, analyze, and optimize content that ranks well and serves your target audience.项目地址: https://gitcode.com/GitHub_Trending/se/seomachine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考