CrawlForge MCP
首页Playground应用场景集成价格文档博客
如何用 MCP server 做关键词差距分析
Tutorials
返回博客
教程

如何用 MCP server 做关键词差距分析

C
CrawlForge Team
工程团队
2026年8月23日
阅读时长 11 分钟

本页内容

快速解答

通过 MCP server 做关键词差距分析分三个阶段:用 search_web 发现候选词条,用 serp_rank 拉取真实的 Google 自然排名,然后对前十名中每个位置的页面类型进行分类。最后这个阶段是大多数工具会跳过的,也是决定一切的:一个塞满厂商首页的 SERP 无论难度分多少都是关闭的,而一个塞满目录站和论坛帖子的 SERP 则是开放的。每次查询预算 5 credits,并预期每次实时 SERP 调用耗时 10 到 40 秒,因为它发起的是真实的 Google 查询而不是读缓存。

大多数关键词研究工具回答的是错误的问题。它们告诉你一个词条在 1 到 100 的尺度上有多难,那是摘要的摘要。你真正需要知道的是谁占据着前十名,以及那些是什么类型的页面,因为这决定了这个位置究竟能不能拿下。

本指南把这套分析搭成一条跑在 MCP 连接上的可复现流水线。这正是我们2026 年 web scraping SERP 研究背后的方法,也包括那个让大多数自制关键词研究失效的错误。

目录

  • 三个阶段
  • 让大多数关键词研究变成虚构的错误
  • 阶段一:发现候选词条
  • 阶段二:拉取真实自然排名
  • 阶段三:分类页面类型
  • 给差距打分
  • 在投入之前检查意图
  • credits 成本与运行时间
  • 从 REST API 运行
  • 常见问题

三个阶段

阶段ToolCredits回答什么
发现search_web5存在哪些词条、有谁出现
测量serp_rank5真实的自然前十名
分类analyze_content(可选)3每个结果是什么类型的页面

阶段三通常靠人的判断而不是调用 tool——你要标注的是九个 URL,用眼睛看比走 API 更快。

让大多数关键词研究变成虚构的错误

从这里开始,因为它会让后面所有环节失效。

搜索 API 的结果顺序不是 Google 的排名。 搜索工具会先检索结果,然后重新排序。CrawlForge 的 search_web 会用 BM25、语义相似度、权威度和新鲜度权重对检索结果重排,并且在响应中如实报告了这一点:

Json
{
  "processing": {
    "ranking": {
      "algorithmsUsed": ["bm25", "semantic", "authority", "freshness"],
      "weightsApplied": { "bm25": 0.4, "semantic": 0.3, "authority": 0.2, "freshness": 0.1 }
    }
  }
}

这种重排让结果更适合调研,也让它无法用于衡量排名。如果你从搜索 API 读出第 1 位并把它记录为 Google 排名,那么建立在其上的每一条结论都是错的。

用 search_web 了解哪些域名在场。任何你打算称之为“位置”的东西,都用 serp_rank——它返回的是 Google 自己的 rank_group 值。

阶段一:发现候选词条

先把范围放宽。你要找的是这个品类的词汇,还不是排名。

Typescript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';

const client = new Client({ name: 'keyword-gap', version: '1.0.0' });

interface Candidate {
  keyword: string;
  indexedPages: number;
  domains: string[];
}

async function discover(keyword: string): Promise<Candidate> {
  const res = await client.callTool({
    name: 'search_web',
    arguments: { query: keyword, limit: 20 },
  });

  const data = JSON.parse(res.content[0].text);

  return {
    keyword,
    // Google's rough index estimate -- a crowding signal, NOT search volume.
    indexedPages: parseInt(data.total_results ?? '0', 10),
    // Presence only. This order is re-ranked and is not a Google ranking.
    domains: [...new Set(data.results.map((r) => r.displayLink))],
  };
}

有两个字段重要。total_results 是 Google 对竞争页面数量的粗略估算——一个拥挤程度信号,不是搜索量。域名列表告诉你谁在这场对话里。

阶段二:拉取真实自然排名

现在开始测量。serp_rank 会发起一次实时 Google 查询,返回真实的自然排名位置以及竞争对手列表。

Typescript
interface RankResult {
  keyword: string;
  found: boolean;
  position: number | null;
  competitors: Array<{ position: number; domain: string; url: string }>;
}

async function measure(keyword: string, target: string): Promise<RankResult> {
  const res = await client.callTool({
    name: 'serp_rank',
    arguments: {
      keyword,
      target,
      location_name: 'United States',
      device: 'desktop',
      depth: 10,
    },
  });

  const data = JSON.parse(res.content[0].text);

  // Unconfigured deployments return configured:false rather than a fake rank.
  if (data.configured === false) {
    throw new Error('serp_rank is not configured on this server');
  }

  return {
    keyword,
    found: data.found,
    position: data.position,
    competitors: (data.results ?? []).map((r) => ({
      position: r.position,
      domain: r.domain,
      url: r.url,
    })),
  };
}

要顺序执行,不要并行。 实时 SERP 端点会执行一次真实的 Google 查询;同时发起多个请求必然导致超时,而不是更快出结果。

depth: 10 是合适的默认值。扫描更深成本更高,而且对差距分析来说,第 11 位往后的结果很少会改变决策。

阶段三:分类页面类型

这是真正产出洞察的阶段,而且主要靠判断。

对九个或十个结果中的每一个,标注它属于哪种页面:

  • 商业页 — 首页、产品页、定价页
  • 厂商内容 — 某家公司的博客文章或文档
  • 独立页面 — 目录站、论坛帖子、代码仓库、新闻报道

然后数一数商业结果的数量。这一个数字比任何难度分都更能说明问题:

Typescript
type PageType = 'commercial' | 'vendor-content' | 'independent';

function gapScore(labels: PageType[]): 'closed' | 'contested' | 'open' {
  const commercial = labels.filter((l) => l === 'commercial').length;
  if (commercial >= 4) return 'closed';
  if (commercial >= 1) return 'contested';
  return 'open';
}

套用到我们研究中的真实数据:

关键词商业结果判定
web scraping api9 个中 6 个关闭
firecrawl alternative9 个中 2 个争夺中
mcp scraping8 个中 0 个开放

“web scraping api”是关闭的——六个厂商首页和产品页,每一个背后都是多年的外链建设。再高的内容质量也撼动不了。

“firecrawl alternative”落在中间。只有两个结果是商业落地页,即 Apify 的替代品页面和 Context 的一个比较页,但其余部分密集地挤满了厂商博客文章,全都在追逐同一批正在离开的客户。可以打赢,但很拥挤,只有当你确实有具体内容可说时才值得投入。

“mcp scraping”判定为开放,其构成解释了原因:两个目录站、一个 Reddit 帖子、一个 GitHub 仓库、三篇第三方博客和一个文档页。没有人为它发布过商业页面。

给差距打分

把两个信号结合起来。一个词条值得投入的条件是 SERP 开放并且拥挤程度可控:

Typescript
interface Scored {
  keyword: string;
  verdict: 'closed' | 'contested' | 'open';
  indexedPages: number;
  priority: 'high' | 'medium' | 'skip';
}

function prioritise(c: Candidate, verdict: Scored['verdict']): Scored['priority'] {
  if (verdict === 'closed') return 'skip';
  if (verdict === 'open' && c.indexedPages < 2_000_000) return 'high';
  return 'medium';
}

这个阈值是判断,不是定律。重要的是排序:开放且中等拥挤的 SERP,永远胜过争夺中但拥挤度低的 SERP。

在投入之前检查意图

最后一道关卡,而且无法自动化。

读一读前十名的标题,问问那些搜索者是否想买你卖的东西。在我们的研究中,“llm scraper”通过了所有数值筛选——32.9 万个竞争页面,明显切题——一接触真实结果就失败了。其中相当大一部分是想屏蔽 scraper 的人:一个叫“Prevent LLM scrapers/trawlers?”的 YunoHost 帖子、一个关于如何对抗它们的 r/sysadmin 帖子、Akamai 谈机器人管理的文章。

同样的词,相反的意图。在那里排名换来的是永远不会转化的流量,以及一个会教会 Google“你的页面是个糟糕答案”的跳出率。

三十秒的阅读能抓住任何分数都看不见的东西。

credits 成本与运行时间

一次十关键词的研究:

项目调用次数Credits
发现10 次 search_web50
测量10 次 serp_rank50
合计100

这是 Free 方案 1,000 个一次性 credits 的十分之一。

运行时间才是真正的约束。在我们的测量中,实时 SERP 查询每次耗时在 10 到 41 秒之间——同一个关键词在连续两次运行中分别是 11 秒和 28 秒,因为该端点执行的是一次实时 Google 查询,其延迟取决于上游容量。十个关键词顺序执行需要五到十分钟。把客户端超时设为至少 60 秒,并把任务放到后台运行。

从 REST API 运行

如果你不在 MCP 客户端里,同样的查询也可以走 HTTP:

Bash
curl -X POST https://www.crawlforge.dev/api/v1/tools/serp_rank \
  -H "X-API-Key: $CRAWLFORGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "mcp scraping",
    "target": "crawlforge.dev",
    "location_name": "United States",
    "depth": 10
  }'

REST 响应使用 rank 和 all_positions,而 MCP tool 返回的是 position;两者报告的是底层同一个 Google 自然排名位置。失败的查询——提供方不可达、超时——会返回错误,并且不计费。

下一步

一旦你知道哪些词条是开放的,接下来的工作就是技术层面的:确保你为它们发布的页面确实可被抓取且标记正确。我们的用 CrawlForge 自动化 SEO 审计指南覆盖了这另一半,而 serp_rank API 参考记录了上面用到的每一个参数。

免费开始,赠 1,000 credits——足够约 200 次排名检查。

亲自试一试——无需注册

在 Playground 中运行 CrawlForge 的 28 个抓取与提取工具中的任意一个,然后免费开始,获取 1,000 credits。

1,000 免费 credits • 一次性 • 无需信用卡

标签

SEOkeyword-researchtutorialMCPautomationSERP-analysis

关于作者

C

CrawlForge Team

工程团队

我们正在打造功能最全面的 Web 抓取 MCP server。我们开发的工具帮助开发者为 AI 应用提取、分析和转换 Web 数据。

及时获取最新洞察

将教程、产品更新与 Web 抓取技巧直接发送到你的收件箱。

拒绝垃圾邮件,随时可取消订阅。

付诸实践

在任意 URL 上测试 CrawlForge 的工具——免费,无需注册。

本页内容

Frequently Asked Questions

什么是关键词差距分析?+

关键词差距分析用于识别那些存在需求、但没有竞争对手占据可防守位置的搜索词。常见的做法是比较竞争对手能排名而你不能的关键词。更有用的做法是检查前十名由什么类型的页面占据:如果是厂商首页和产品页,那么无论难度分多少这个词条都是关闭的,因为内容撼动不了一家公司的主力落地页。如果是目录站、论坛帖子和第三方博客文章,那么这个商业位置就无人认领,一个做得好的页面就能拿下它。

为什么 search_web 的顺序和真实的 Google 排名不同?+

因为 search_web 先检索结果,然后用 BM25、语义相似度、权威度和新鲜度权重重新排序,并且在每次响应的 processing.ranking 字段中报告这些权重。这种重排让它更适合调研,也让它无法用于衡量排名。任何会重排结果的检索工具都有同样的行为。要记录一个位置,你需要一个返回 Google 自身自然排名值的端点,这正是 serp_rank 提供的。把搜索 API 的顺序当成排名,是关键词研究变成虚构的最常见方式。

一次关键词差距分析要花多少 credits?+

search_web 和 serp_rank 每次调用都是 5 credits,因此一次十关键词的研究,若每个词条做一次发现搜索和一次排名检查,总共是 100 credits。这是 Free 方案所含 1,000 个一次性 credits 的十分之一,相当于在花任何钱之前可以做约 200 次排名检查。可选的 analyze_content 内容分类每页增加 3 credits,不过对于只有十个结果的 SERP,用眼睛标注页面类型通常比调用 API 更快。

为什么实时 SERP 查询这么慢?+

因为该端点执行的是一次实时 Google 查询而不是读取缓存索引,并且在此期间保持连接打开。延迟随上游容量大幅波动:在我们的测量中,同一个关键词一次运行 11 秒返回,下一次 28 秒,还有一次查询耗时 41 秒。请把客户端超时设为至少 60 秒,顺序而非并行地执行查询,并把多关键词研究当作后台任务。同时发起多个并发请求带来的是超时,不是速度。

我该瞄准高搜索量还是低竞争度的关键词?+

这两个数字单独都回答不了问题,这也是本方法一开始两个都不看的原因。高搜索量配上一个关闭的 SERP 毫无价值——六个厂商首页占据着“web scraping api”,再高的搜索量也不会让它变得可打。低竞争度分数同样经常误导,因为它看不见意图:“llm scraper”在每项指标上都很诱人,而它相当大一部分结果是想屏蔽 scraper 而不是想买一个的人。先判断前十名的构成,再用拥挤度估算给活下来的词条排序。

没有 MCP 客户端能做这套分析吗?+

可以。两个 tools 都提供 HTTP 接口,所以同一条流水线可以从 curl、定时任务或任何带 HTTP 客户端的语言运行——用 X-API-Key 请求头或 Authorization Bearer 令牌进行认证。响应结构略有不同:REST 版 serp_rank 端点返回 rank 和 all_positions,而 MCP tool 返回 position 和 allPositions,但两者报告的是底层同一个 Google 自然排名位置。失败的查询会返回错误且不计费,所以大型研究中的超时只会花掉你的时间,而不是 credits。

相关文章

Web scraping 关键词差距:2026 年 SERP 研究
Web Scraping

Web scraping 关键词差距:2026 年 SERP 研究

我们拉取了这个行业所竞争的关键词的真实 Google 自然排名。老牌词条是一座密不透风的商业堡垒,而 MCP 时代的词条根本没有任何商业守卫者。

C
CrawlForge Team
|
8月23日
|
10 分钟
在 Claude Code 里真正用起来 CrawlForge MCP
Tutorials

在 Claude Code 里真正用起来 CrawlForge MCP

装好了 CrawlForge,Claude 却从来不调用它?本文讲清楚让 MCP tools 在你的终端里稳定触发所需要的提示词、权限规则和 CLAUDE.md 配置。

C
CrawlForge Team
|
8月13日
|
12 分钟
用 Claude 进行网页抓取:完整指南(2026)
Tutorials

用 Claude 进行网页抓取:完整指南(2026)

2026 年用 Claude 抓取网页:把 CrawlForge MCP 接入 Claude Desktop、Claude Code 或 API,即可抓取任何网站——无需编写抓取代码。含三种接入方式的配置步骤与实战示例。

C
CrawlForge Team
|
6月9日
|
12 分钟

页脚

CrawlForge MCP

面向 AI Agent 的企业级网页抓取。28 个专业 MCP 工具,专为构建智能系统的现代开发者而设计。

产品

  • 功能
  • Playground
  • 价格
  • 应用场景
  • 集成
  • 替代方案
  • 更新日志

资源

  • 快速上手
  • API 参考
  • 模板
  • 指南
  • 博客
  • 术语表
  • 常见问题
  • 网站地图

开发者

  • MCP 协议
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

公司

  • 关于我们
  • 联系我们
  • 隐私政策
  • 服务条款
  • 可接受使用政策
  • Cookie

保持更新

获取新工具和新功能的最新动态。

基于 Next.js 和 MCP 协议构建

© 2025-2026 CrawlForge。保留所有权利。