geokit
Allows self-hosted collection of Baidu search results, including position parsing and SERP data extraction for keyword ranking analysis.
Enables SERP collection and ranking analysis for Google search results.
Supports AI visibility probing to check if a brand is mentioned in ChatGPT responses.
Provides SERP collection and ranking checks for the Sogou search engine.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@geokitCheck SERP ranking for '智能手表' on Baidu and Sogou"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AIGC: ContentProducer: '001191110102MAD55U9H0F10002' ContentPropagator: '001191110102MAD55U9H0F10002' Label: '1' ProduceID: '6b9414ca-b1fb-4c4b-a1a0-07811ce02a3f' PropagateID: '6b9414ca-b1fb-4c4b-a1a0-07811ce02a3f' ReservedCode1: '924bebf3-6f3b-42e2-99b1-c9a3e8febb36' ReservedCode2: '924bebf3-6f3b-42e2-99b1-c9a3e8febb36'
鲸析 GEOkit
面向中文市场与 AI 搜索时代的开源 SEO / GEO 作战系统
中文优先的 SEO / GEO 工具:自建百度 / 搜狗 / 360 / 神马 / 头条采集, 六维 GEO 评分,九个 AI 模型的品牌可见性探测,以及一套 AI 抓取协议层。 全部能力通过 MCP 开放给 Agent。
范围注:CLI / SARIF 门禁、
diagnose_page与apply_fixes超出 T0–T13 主线任务书,作为附带能力存在,不影响主线契约。
GEOkit 源于对 every-app/open-seo 的一次深度拆解。 open-seo 是个好项目 —— 28 万行代码、自研站点审计爬虫、完整的 MCP 工具链、相当高的产品完成度。 但它有一个结构性盲区:它的世界里没有中文。
这不是营销话术,是对其仓库全量源码实测后的事实:
事实项 | 观测结果(源码级) |
| 973 次 |
| 7 次 |
| 0 次 |
| 0 次 |
AI Visibility 覆盖模型 | ChatGPT / Claude / Gemini / Perplexity(六个中文 AI 助手全部缺席) |
| 仅出现在 |
当你的客户在 DeepSeek 里问「跨境支付怎么选」,这类工具帮不上任何忙 —— GEOkit 就是为解决这个问题而生的。
Related MCP server: Crawl Readiness MCP Server
它做什么
能力 | 说明 |
多引擎 SERP 采集 | 百度、搜狗、360、神马、头条的自建采集与位次解析,外加 Google / Bing |
页面审计 + GEO 评分 | 除传统技术检查外,输出六维「AI 引用友好度」评分(scoringVersion 2.1.0) |
中文 AI 可见性矩阵 | 九个模型并发探测品牌是否被提及,并升级为引用情报(谁被引用、引用了哪些来源、我的缺口在哪) |
AI 抓取协议层 | robots.txt 的 20 个 AI 爬虫策略检测、llms.txt 校验与自动生成 |
观测与存档 | 全通道 Observation 落库 + 不可变 Evidence 存证,时序 diff 识别提升与退化 |
站点爬虫 | 有礼貌的 BFS 爬虫(robots 遵守、并发/间隔限制、可中断),产出站点图与每页审计摘要 |
竞品情报 | 五维对比:SERP 位次 / AI 提及 / GEO 评分 / AI 抓取协议 / 结构化数据 |
Query 情报 | 意图分类、相关问题提取、竞品识别、内容缺口、聚类分析 |
机会引擎 | 八种机会类型(弱引用、引用缺口、AI 协议、站点问题、搜索机会、缺失实体、Schema 问题、性能差),evidence 驱动,可验证 |
Schema / 实体诊断 | 规则驱动检测 7 类页面,零编造 JSON-LD 草稿生成 |
国际化 | 三种来源 hreflang 检查(HTML / HTTP header / sitemap),六类问题 + 语言声明疑似不一致 |
性能观测 | CrUX 真实用户数据(LCP/INP/CLS/FCP/TTFB),差指标自动生成机会 |
MCP Server | 25 个核心工具,全部能力对外开放,两种传输方式 |
界面
首页把能力地图、与 open-seo 的逐项对比、以及"抓不到就说抓不到"的处理原则摊在一屏里:

快速开始
npm install
npm run dev # http://localhost:3210核心功能不需要任何付费 API —— 装上就能跑。
数据源原则(强制)
项目所有数据源必须是自建检索(自写爬虫/解析器直接拿数据)或免费开源工具获取,不引入任何付费数据源。
数据源 | 获取方式 |
SERP(百度/搜狗/360/神马/头条/Google/Bing) | 自建采集 + 位次解析( |
页面审计 / GEO 评分信号 | 自建抓取 + 本地分析( |
robots.txt / llms.txt | 自建协议层( |
存储 | JSONL + |
CI / 门禁 | GitHub Actions 免费层 + 本地 CLI |
唯一豁免:AI 可见性探测(src/lib/visibility.ts)调用 9 家模型厂商官方接口,
需要用户自行填入 API key 才能使用 —— 这是项目里唯一的付费通道,且未配 key 时如实返回
UNOBSERVABLE,绝不伪造结果。
GEO 评分是什么
传统 SEO 检查只回答「Google 会不会收录我」。2026 年真正的问题是「AI 愿不愿意引用我」。
GEOkit 提供两套严格版本化的 geoScore 评分模型(可在 Web UI、CLI --geo-version 与 MCP 参数中灵活切换):
GEO 2.0.0(2026 AI Search & RAG Grounding 启发式 · 推荐)
面向 Google SGE/AI Overviews、ChatGPT Search、Perplexity 与企业 RAG 知识检索:
维度 | 权重 | 2026 评估信号 |
可引用性 Quotability | 25 | 首屏直接回答(Direct Answer 100-200 字)、对比表格、步骤列表、硬核量化数据点、FAQ/Q&A 结构 |
结构化/RAG 切块 Structuredness | 20 | 标题层级连续性(严格递进,H1->H3/H4 跳级惩罚以保护 RAG 分块树)、 |
实体清晰度/消歧 Entity Clarity | 15 | 大模型知识图谱消歧(JSON-LD |
可抓取性/AI 协议 Crawlability | 15 | AI 爬虫通道放行、显式 |
事实密度/增益 Fact Density | 15 | 信息增益(Information Gain)、每千字量化数据指标、一手权威参考引用、gov/edu 权威来源 |
分块适配/时效 Readability & Freshness | 10 | 大模型滑动窗口与注意力集中最优句长(15-45 字符区间)、最新修订时间戳、更新时间一致性 |
scoringVersion 2.1.0(T9 内容质量增强):在六维 max 与总分 100 不变前提下, 并入 5 个新页面级可观测信号(上表加粗项)。各维内部子权重重分配,不新增并行总分。 每条观测记录携带
scoringVersion字段,diff 引擎识别版本不同时保持可比并附加 caveat, 避免历史比对被规则换代污染。第 4 维(可抓取性)页面级信号已饱和,不新增。
GEO 1.0.0(经典基线模式)
完全保持与项目既有 baseline 一致的特征统计打分体系,供历史比对与 CI 回归基线。
每一项都由页面里真实存在的信号计算,输出时会附上「为什么得这个分」的依据,而不是一个孤立的数字。
MCP 接入
Streamable HTTP(服务已在跑):
POST http://localhost:3210/api/mcpstdio(本地 Agent):
{
"mcpServers": {
"geokit": {
"command": "npx",
"args": ["-y", "tsx", "scripts/mcp-stdio.ts"],
"cwd": "<你的项目绝对路径>",
"env": {}
}
}
}25 个工具:
采集与审计:
list_engines、check_serp_ranking、audit_page、check_ai_visibility、crawl_site诊断与修复:
diagnose_page(全量诊断与体检)、apply_fixes(安全幂等自动修复)时序与数据:
list_observations(历史观测查询,兼容别名query_history)、diff_observations(时序对比与退化判定)引用情报:
analyze_ai_citations(引用来源排行 / 竞品频次 / 引用缺口,附 evidence)协议与对比:
analyze_robots、analyze_llms_txt、generate_llms_txt、compare_with_openseo搜索表现:
get_search_performance、analyze_search_opportunities(GSC,可选凭证)性能观测:
check_web_vitals(CrUX 真实用户数据,LCP/INP/CLS/FCP/TTFB)机会引擎:
list_opportunities、verify_opportunityQuery 情报:
analyze_query、cluster_queries竞品:
compare_competitors(五维对比)Schema:
analyze_schema(页面类型/字段/一致性/实体诊断)、generate_schema_draft(零编造 JSON-LD 草稿)国际化:
check_hreflang(三种来源 hreflang 检查:自引用/回链/非法代码/坏链/canonical 冲突/x-default/语言声明疑似不一致)
典型 Agent 闭环(6 步)
check_serp_ranking → 找排名缺口(哪些引擎没进前 10)
↓
crawl_site → 站点爬取,获取所有页面审计摘要
↓
diagnose_page → 对关键页面深度诊断(内容/协议/SEO)
↓
apply_fixes → 自动修复 HTML 缺陷(canonical/viewport/lang/alt)
↓
analyze_ai_citations → 分析 AI 引用缺口(竞品在哪些 query 被引用)
↓
list_opportunities → 汇总所有发现为可执行机会(8 种类型)
↓
analyze_robots + → 复查 AI 协议层(robots/llms.txt)
analyze_llms_txt
↓
diff_observations → 历史比对确认退化/提升
↓
verify_opportunity → 修复后复检每一步都遵循「抓不到就说抓不到」原则,无数据时不编造。
可选的环境变量
只有「AI 可见性」需要 API key,「CrUX 性能观测」可选 API key(无 key 时 unavailable)。写在 .env.local:
DEEPSEEK_API_KEY= # DeepSeek
DOUBAO_API_KEY= # 豆包
KIMI_API_KEY= # Kimi
QWEN_API_KEY= # 通义千问
WENXIN_API_KEY= # 文心一言
YUANBAO_API_KEY= # 腾讯元宝
OPENAI_API_KEY= # ChatGPT
ANTHROPIC_API_KEY= # Claude
GEMINI_API_KEY= # Gemini
CRUX_API_KEY= # Chrome UX Report API(可选,T11 性能观测用)一条原则:抓不到就说抓不到
搜索引擎和部分 AI 平台会拦截服务端直连请求。这是所有自托管 SEO 工具都会遇到的工程现实, 不是 bug,也没法靠写巧妙的代码绕过。
GEOkit 的选择是如实返回 status: "blocked" 并写明原因与解决方向,绝不用估算值、
缓存旧数据或随机数冒充真实排名。宁可让你知道「这次没抓到」,也不要让你基于假数据
做出错的投放决策。这条原则贯穿每一个接口。
观测与存档(Observation Store)
GEOkit 遵循两层分离的数据契约:**Evidence(存证)**是原始请求 / 响应的不可变记录 (append-only,永不改写);**Observation(观测)**是基于 Evidence 的结构化结论, 带 observer / parser 版本与状态,可随时重算追溯。
默认不写盘。设置 GEOKIT_EVIDENCE=on 打开总闸后,以下通道会把结论落成 Observation:
kind | 来源通道 |
| 页面审计 + GEO 评分 |
| 多引擎 SERP 排名 |
| AI 可见性探测 / 引用情报 |
| AI 抓取协议层(robots.txt / llms.txt) |
存储实现(零新增依赖,接口抽象、可换驱动):
默认 JSONL,写入
.evidence/(已加入.gitignore,不会进 git);GEOKIT_STORE_DRIVER=sqlite切换为 Node 内置node:sqlite;GEOKIT_STORE_DIR自定义存档目录;GEOKIT_EVIDENCE_BODY=on额外留存响应体(默认 hash-only)。
schema 层强制约束:status 为 blocked / unavailable / error 时 statusReason
必填 —— 「抓不到就要说清为什么」在数据模型层强制执行,缺 reason 的观测写入即被拒绝。
MCP 查询入口:list_observations 按 kind / subject / 时间过滤历史;
diff_observations 对比两次观测的结构化差异(新增 / 消失 / 变化 + 证据),识别真实提升与退化。
AI 可见性与引用情报
九个模型(DeepSeek / 豆包 / Kimi / 通义千问 / 文心一言 / 腾讯元宝 / ChatGPT / Claude / Gemini)
并发探测品牌可见性。未配 key 的模型如实返回 UNOBSERVABLE,绝不伪造。
引用数据可得性(以代码实际行为为准)
对每个 (query, model),GEOkit 从模型回答文本中提取真实存在的链接 (Markdown 链接与裸 URL,含全角标点容错),产出 CitationRecord:
答案中含链接 →
citationsStatus: "ok",附 url / title / 出现位置;答案不含链接 →
citationsStatus: "unavailable"并注明原因(「模型响应中未包含可提取的引用链接」);模型拒答(HTTP 4xx)→
blocked;我方调用失败 →error。
严禁编造:不向模型索要「记忆中的来源」,不用其他模型代答,无响应时不返回示例数据。 是否在答案里给链接取决于各厂商行为(如 Kimi 联网搜索常带来源),GEOkit 只如实记录「给没给」,不试图补齐。
批量、对比与聚合
多 query 批量探测(并发上限可配置,默认保守值 2;探测函数可注入便于测试),单个模型失败不影响其他模型;
竞品监控:
check_ai_visibility与analyze_ai_citations均接受可选competitors列表, 答案中提及的竞品会标注在每条引用记录上(competitorsMentioned);单次调用超时可用GEOKIT_AI_TIMEOUT_MS环境变量覆盖(默认 30s);/visibility页面提供 query × model 矩阵,unavailable/blocked状态明确展示原因,不留空白;与上一次观测自动 diff:哪些模型新增 / 失去了提及或引用;
MCP 工具
analyze_ai_citations输出引用来源排行、竞品出现频次、引用缺口 (被多个模型引用、但你的域名没出现的来源域名),每条结论附 evidence。
站点爬虫(Site Crawler)
GEOkit 从单页审计升级为站点级审计的基础。一个有礼貌、有上限、可中断的爬虫,
产出站点图与每页 GEO 评分,作为 Observation(kind="crawl") 存档,支持两次爬取的 diff。
礼貌爬取声明
遵守 robots.txt:Disallowed 路径不爬;识别并遵守 Crawl-delay;
保守默认:并发 ≤ 2、同 host 最小间隔 500ms、最大页面 100、最大深度 3、总耗时 2 分钟;
不绕过反爬:403/验证码按
blocked状态如实记录原因,不尝试绕过;无头浏览器:不使用 Puppeteer/Playwright,不执行 JS 渲染内容;
可中断:达到任一上限时返回已爬结果并标明
truncated: true+ 原因。
爬取策略
起点:给定域名/URL;优先读取 robots.txt 与 sitemap(含 sitemap index 递归解析), 再从页面
<a href>链接补充发现;仅限同域(可配置
includeSubdomains包含子域);URL 规范化与去重:去 fragment、参数排序、尾斜杠策略、忽略静态资源(
.css/.js/.png等);跳转链、4xx/5xx、超时都作为数据记录下来,不丢弃;
每个页面产出:URL、状态码、跳转链、title、meta description、H1、canonical、noindex、 hreflang、JSON-LD 类型、内链/外链数、字数、GEO 六维评分(复用
audit.ts的analyze纯函数);站点图:URL 节点 + 内链边 + 入链数 + 点击深度 + 孤岛页标记(sitemap 有但无内链指向)。
使用方式
# API
curl -X POST http://localhost:3000/api/crawl \
-H "Content-Type: application/json" \
-d '{"site":"example.com","config":{"maxPages":50,"maxDepth":2}}'
# MCP 工具
crawl_site(site: "example.com", maxPages?: 100, maxDepth?: 3, concurrency?: 2)
# Web 界面:访问 /crawl两次爬取的 diff(新增/消失/状态变化的页面)通过 diffCrawlResults 纯函数计算,
匹配键为 URL,输出 CrawlDiff { added[], removed[], statusChanged[], unchangedCount }。
站点级问题聚合(T4)
爬取结束后自动对结果跑 8 类规则检查(analyzeSiteIssues 纯函数,不调模型),
每个问题都带稳定 id、severity(high/medium/low)、受影响 URL、evidence[]、
一句话影响说明与修复建议:
重复 title / meta description / H1(给出具体 URL 分组);
缺失 title / description / H1 / canonical;
canonical 指向异常(其他域名 / 4xx / 会跳转的 URL);
孤岛页、点击深度过深、内链过少;
跳转链过长、跳转循环、内链坏链(指向 4xx/5xx);
结构化数据覆盖率(各 JSON-LD 类型占比 + 长文页缺 Schema);
GEO 汇总:分数段分布、最低分页面、拖累整站的共性弱维度(同一维度 ≥3 页偏弱);
疑似内容重复:正文 5-gram shingle Jaccard ≥ 0.8,结论永远标注「疑似」并给出相似度依据。
severity 阈值是可读常量(src/lib/crawler/issues.ts 顶部导出,如
DEEP_PAGE_DEPTH、LOW_GEO_SCORE_HIGH/MEDIUM、DUPLICATE_CONTENT_JACCARD),
均有命中/不命中两个方向的单测。问题只对「可索引的 2xx 页面」成立 ——
4xx/5xx、blocked、noindex 页面不会被误报内容缺失。
crawl_siteMCP 输出新增issues/geoSummary/schemaCoverage(仅新增字段,向后兼容);/crawl页面可按严重度与类型筛选问题,点击展开查看受影响 URL 与证据。
Google Search Console 搜索表现(T5,可选)
接入真实 Search Console Search Analytics,按 query / page / country / device / date
维度拉取 clicks、impressions、ctr、position,自动分页(单页 1000、硬上限 25000 行)。
凭证(自备,零新增依赖,三选一,写进 .env.local):
GOOGLE_OAUTH_ACCESS_TOKEN—— OAuth access token(约 1 小时有效);GOOGLE_SERVICE_ACCOUNT_JSON—— service account JSON 内联,GEOkit 用node:crypto手工构造 RS256 JWT 向 Google 换取 access token 并按过期时间缓存;GOOGLE_APPLICATION_CREDENTIALS—— service account JSON 文件路径。
service account 必须在对应 Search Console 资源里被添加为用户(资源可以是
sc-domain:example.com 或 https://example.com/)。凭证不写日志、不进存档。
未配置任何凭证时能力返回 status=unavailable 并说明配置方式;401/403/429 分别返回
blocked 并写明原因(令牌无效 / 无资源权限 / 配额限流),5xx 与网络异常为 error —— 不编造任何数据。
机会分析(src/lib/gsc/analyze.ts,纯函数,阈值为导出常量)识别三类机会:
高曝光低 CTR:展示量 ≥ 100 且 CTR < 2%;
排名机会位:平均位置 4–20 且展示量 ≥ 50;
内容缺口:GSC 显示某 URL 有曝光,但不在站点爬取集合中(需传 crawledUrls 交叉)。
另有 diffPeriods(prev, cur) 对比两期,输出排名/点击显著升降与新增、消失的 key
(低曝光样本自动降噪)。GSC 历史以 kind="gsc" 的 Observation 落库(受
GEOKIT_EVIDENCE 总闸控制),只存四项聚合与 Top 100 行的结论粒度,不存全量明细。
MCP 工具:
get_search_performance、analyze_search_opportunities;页面:
/gsc(凭证缺失时直接展示三种配置方式)。
机会引擎(Opportunity Engine)
把"发现了一个个独立问题"升级为"告诉用户下一步做什么"。引擎只做三件事: 调六个生成器把发现翻译成 Opportunity 列表 → 按 impact×effort 排序 → 同 target 上多条机会合并为一条多建议。
Opportunity 类型(src/lib/opportunity/types.ts):
id/type/target(URL / query / 域名)impact(high/medium/low)与effort(high/medium/low),规则透明可读diagnosis:必须可追溯 evidence,无 evidence 的机会不输出recommendations:清单式建议,不含自动改动sources:该机会来自哪些 Observation(id 列表)verification:下次复检应观察到的信号变化(signalKey + direction + 描述)
七种机会类型(每种都有触发/不触发测试):
类型 | 触发条件 | 来源 |
| GeoSummary.lowestScoring 含 geoScore<60 的 URL | T4 |
| CitationAggregation.citationGap 非空(域名被 AI 引用≥2 次且非用户域名) | T2 |
| robots.txt 屏蔽 AI 爬虫 / llms.txt 不存在 | 协议层 |
| T4 issues 中 severity="high" 的问题 | T4 |
| T5 GscOpportunity[] 非空(缺省跳过不报错) | T5(可选) |
| 页面审计检测出缺 Schema/作者/组织/发布时间 | audit.ts |
| T10 Schema 必填/推荐字段缺失、与页面内容矛盾 | schema/(T10) |
排序规则(src/lib/opportunity/engine.ts,常量透明):
按 impact(high→medium→low);
同 impact 下按 effort(low→medium→high)—— 越易做越前;
同分按 affectedScope(受影响范围)降序。
合并规则:同 target 的多条机会合并为一条多建议。合并后 impact=最高、effort=最低、 recommendations 聚合、evidence 聚合(去重)、verification 取主机会的。
验证闭环(src/lib/opportunity/verify.ts):基于两次观测对比,按 direction 判定
resolved / unchanged / worsened / unknown。找不到可比观测返回 unknown,绝不编造判定。
铁律:
没有证据不输出 ——
diagnosis.evidence必须非空;不调任何大模型 —— 建议全部来自规则与模板;
输入字段全可选 —— 缺哪段就跳过对应机会类型,绝不报错。
MCP 工具:
list_opportunities、verify_opportunity;页面:
/opportunities(粘贴 OpportunityInput JSON 即可生成)。
Query Intelligence(轻量)
目标不是搜索量/KD,而是把一个 query 的已有观测汇总: Query → SERP → 搜索意图 → 实体/问题 → 竞品 → AI 答案 → 引用来源 → 内容缺口。
核心类型(src/lib/query/types.ts):
IntentClassification:5 类意图 + 置信度 + basis(触发依据,可追溯)RelatedQuestion:从 SERP 标题 / AI 答案提取的相关问题,标 sources(不编造)CompetitorAppearance:SERP + AI 引用域名聚合,含出现次数与位置ContentGap:竞品普遍覆盖、用户未覆盖的话题QueryCluster:基于共享 SERP URL 重合度的聚类QueryAnalysis:单 query 完整分析结果 + sourceAvailability(标 unavailable)
六项能力:
能力 | 触发条件 | 实现位置 |
意图分类 | query 文本特征 + SERP 结构特征 |
|
相关问题 | SERP 标题 / AI 答案含问句 |
|
竞品识别 | SERP / AI 引用里反复出现的域名 |
|
内容缺口 | 对照 T3 用户爬取,竞品普遍覆盖话题 |
|
Query 聚类 | 共享 SERP URL 重合度 ≥ 阈值 |
|
单 query 编排 | 上述全部,缺哪段跳过 |
|
意图优先级(INTENT_PRIORITY 常量透明):
navigational(0) > transactional(1) > local(2) > comparative(3) > informational(4)。
多规则命中取优先级最高的;置信度按命中规则数 high/medium/low。
铁律:
不调用任何大模型 —— 全部规则驱动;
不编造相关问题 —— 只能从实际观测到的文本提取;
缺数据源对应段落标
unavailable,绝不报错;聚类与意图分类有确定性测试(固定输入固定输出)。
MCP 工具:
analyze_query、cluster_queries;页面:
/queries(单 query 分析 / 多 query 聚类双模式)。
竞品情报
不做反链对比。聚焦 AI 与 SERP,五维对比帮你看清竞品领先的地方:
维度 | 对比内容 | 数据源 |
SERP 位次 | 多引擎下用户与竞品的平均位次 |
|
AI 提及/引用 | 被提及频次、被引用频次与位置 |
|
GEO 评分 | 关键页面六维 GEO 评分对比 |
|
AI 抓取协议 | robots AI 开放度 + llms.txt |
|
结构化数据 | JSON-LD 类型覆盖面 |
|
设计原则:
抓取失败按
blocked/unavailable在对比表明确标注(statusReason必填),不留空、不编造;所有对比结论有
evidence(signal + source + value);缺数据源的维度标
unavailable不报错;纯函数维度(SERP / AI / Schema)不 fetch;async 维度(GEO / Protocol)仅在无预收集数据时才 fetch;
最多 5 个竞品;
差距清单(
CompetitorGap[])按 severity 排序,可直接转入 Opportunity Engine。MCP 工具:
compare_competitors;页面:
/competitors(粘贴 JSON 即可生成五维对比与差距清单)。
Schema / 实体诊断(T10)
规则驱动的结构化数据诊断与 JSON-LD 草稿生成 —— 只诊断、给草稿,不自动修改站点。
页面类型检测:文章 / 产品 / FAQ / HowTo / 本地商家 / 组织 / 官网,强信号(顶层 JSON-LD
@type,high)+ 弱信号启发(疑问句标题、价格+购买按钮、tel+地址、有序步骤、发布时间 meta 等,medium/low),每条判定附 signal/source/value 依据;判定不了返回unknown,不硬猜。字段完整性:按 Schema.org 字段目录(常量导出、透明可测)检查必填/推荐字段的
missing / empty / incomplete,支持mainEntity[].acceptedAnswer.text等数组路径覆盖度检查。一致性:
headline ↔ H1、datePublished ↔ 页面/meta 日期、author ↔ 署名、机构名 ↔ 站点名;两侧矛盾记mismatch,疑似记suspect。实体清晰度:作者、组织、sameAs、联系方式、发布/更新时间,标注来源(jsonld/meta/visible)。
零编造草稿:草稿 JSON 正文只含页面真实信息;拿不到的字段(尤其价格币种、评分、SKU、品牌)绝不入 JSON,在
manualFields[]中标注「需人工补充」;已有同类型 JSON-LD 原样保留只补缺;sourcedFrom[]让每个字段都能指回页面来源。进入机会引擎:第 7 类机会
schema-issue(必填缺失 high / 其余 medium,effort=low),复检信号schemaMissingRequiredCountdecrease。
MCP 工具:
analyze_schema、generate_schema_draft(均支持 url 抓取或 html 离线注入);页面:
/schema;POST/api/schema。
命令行与 CI 门禁(CLI)
GEOkit 提供独立于 Web 服务的轻量级 CLI 工具(冷启动、确定性退出码、支持 GitHub Code Scanning SARIF 格式):
# 1. 页面检查:支持在线抓取或本地 HTML 离线分析,可选 1.0.0 / 2.0.0 评分模型
npx tsx packages/cli/src/bin.ts check https://example.com/page --geo-version=2.0.0
# 2. CI 门禁判定:相对基线退化 > 5 分或新增 blocker 时非零退出阻断合并
npx tsx packages/cli/src/bin.ts gate --base=tests/baseline/baseline.json --url=https://example.com
# 3. 产出 GitHub Code Scanning 标准 SARIF 2.1.0 报告
npx tsx packages/cli/src/bin.ts sarif --report=check.json --out=geokit.sarif
# 4. 时序观测比对:比对两次观测状态演进,智能识别真实提升与退化
npx tsx packages/cli/src/bin.ts diff --prev=prev.json --curr=curr.json测试与工程质量(Google SWE 标准)
全面拥抱 Node.js 22+(engines >=22.5,因 node:sqlite 静态导入)原生 node:test + node:assert/strict 测试体系,保持直接依赖零新增:
分级测试体系:
Unit Tests(密封单元测试):位于
tests/unit/,纯内存、毫秒级、0 网络依赖,覆盖 HTML 容错解析、诊断规则库映射、修复幂等性、时序比对矩阵、GEO 双模型评分与断层跳级惩罚。Integration Tests(集成测试):位于
tests/integration/,覆盖 13 个 MCP 协议交互、CLI 命令行与退出码、SARIF 2.1.0 规范契约。
基线回归门禁:通过
scripts/regression.ts对离线基线(tests/baseline/baseline.json)执行字节级一致性校验,防范算法静默漂移。
npm test # 运行全量 125 项标准测试(耗时 < 3 秒)
npm run test:unit # 纯单元测试
npm run test:integration # 集成测试
npm run typecheck # TypeScript 全量类型检查
npm run build # Next.js 生产打包编译
npx tsx scripts/regression.ts check # 离线基线回归比对技术栈与零依赖哲学
Next.js 16 / React 19 / Tailwind v4 / TypeScript。生产直接依赖严格锁定为 4 个
(next、react、react-dom、zod)—— HTML 解析、排序计算、robots 解析、GEO 打分、原生测试与本地存储全部自研或采用 Node 内置模块,不引入臃肿的无用中间层。
对比 open-seo 的 44 个直接依赖 + 外部付费 API 绑定,GEOkit 追求的是极高透明度、极低运维成本、可直接单步调试与自由 Fork。
项目结构
packages/
cli/ 独立轻量 CLI 门禁与 SARIF 转换(bin, check, gate, diff, sarif, output)
src/
lib/
geo/ GEO 评分核心(types, v1 经典基线, v2 2026 RAG 启发式, index 调度)
services/ 集中业务服务层(diagnosis 全量诊断与自动修复, serp, visibility, observations)
evidence/ 可追溯存证引擎与时序观察(identity 统一规范化, store 零依赖存储, types)
engines.ts 搜索引擎注册表(7 个引擎,覆盖百度/搜狗/360/神马/头条/Google/Bing)
html.ts 零依赖高性能 HTML 解析器(支持容错与深层嵌套提取)
serp.ts 多引擎采集与自然排名解析
audit.ts 页面技术审计聚合
llms.ts robots.txt AI 策略分析 + llms.txt 规范校验与生成器
mcp.ts MCP Server(支持 Streamable HTTP 与 stdio,提供 23 个核心工具)
app/
api/ REST API 路由(audit, serp, visibility, llms, mcp, observations)
(views)/ Next.js 现代化仪表盘(audit, serp, visibility, llms, mcp)
tests/
unit/ 密封单元测试(html, diagnosis, diff, evidence, geo)
integration/ 端到端集成测试(cli, mcp, sarif)
baseline/ 离线锁定基线快照(baseline.json)
fixtures/ 离线复现夹具(serp, audit)许可证
MIT
AI生成
This server cannot be deployed
Maintenance
Related MCP Connectors
AI visibility reports, competitor insights, readiness audits, and GEO content workflows.
Free MCP tools for AI-search visibility: crawler checks, page audits, and llms.txt generation.
Open-source AI SEO over MCP: audits, ranks, keywords, backlinks + AI visibility (GEO).
GEO visibility tests, score trends, sitemap discovery, and domain monitoring for AI agents.
Related MCP Servers
AlicenseBqualityCmaintenanceSEO + GEO MCP server: live Google Search Console & GA4 data, keyword and page analysis, AI-visibility tracking across ChatGPT, Claude, Gemini & Perplexity, site audit and SEO task management — all from chat.382MIT- AlicenseAqualityAmaintenanceChecks what GPTBot, ClaudeBot, PerplexityBot and 50+ other AI crawlers can read on a site and what its access policy allows, checks whether a page permits search, answers, training or agent use (with a signed receipt), generates llms.txt, robots.txt and JSON-LD, and reads your Answer Analysis. Nine tools for Claude Desktop, Cursor and other MCP clients.9698 npmMIT
- AlicenseAqualityAmaintenanceEnables auditing Chinese-language websites for AI citability (GEO/AEO) across Chinese AI platforms, providing crawlability checks, source-pool probing, visibility scoring, and prioritized fix plans.171Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform live Google SERP searches, run on-page and full-site SEO audits with prioritized fixes, and check brand visibility in AI answer engines via four MCP tools.MIT