关于 geo-score
geo-score 是一款开源网站评分工具,帮助团队评估 AI 答案引擎能否访问、理解、信任并引用网站内容。它以公开评分规则给出免费评分,并可使用团队自己的 API 密钥单独检查引用情况。
主要功能
- 01免费的网站就绪度评分,范围为 0–100
- 02五大维度的 21 项分级检查
- 03向引擎询问一个买家问题
- 04按周跟踪固定问题集的引用情况
- 05支持文本、JSON、SARIF 和 JUnit 报告
- 06提供 MCP 工具和 GitHub Action
适用场景
- 01查找阻碍 AI 爬虫访问的技术问题
- 02检查答案引擎引用了哪些来源
- 03对比竞争者并监测引用率
- 04在 CI 工作流中运行网站检查
MCP 相关
提供基于 stdio 的 MCP 服务,将 Score、Ask 和 Watch 三个级别作为工具开放。只读模式可避免产生费用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
7收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | |
| urls | array | 否 | 对同一网站的这些页面逐一评分,而不是抽样(传入先前报告的 sampled_urls,以便进行同类比较)。 |
| sample | integer | 否 | 未提供 urls 时要抽样的页面数(默认值为 8)。 |
详细介绍
geo-score
geo-score 是由 Jianrun Tech(见润科技)推出的网站 AI 可见性(GEO)开源评分工具。 它原名 geo-watch:geo-watch 在 1.2.0 版本中并入 geo-score,并作为其第 2 和第 3 层继续提供。 网站、文档和免费在线检测:geo-score.dev。
60 秒了解 geo-score
只需一条命令,即可获得 0–100 分的评分、三道关卡、最值得优先修复的问题,以及每个分数为何都可重新验证。
https://github.com/user-attachments/assets/2270314f-446a-4c2d-b27f-11e1f6d66ff8
英文 · 60 秒 · 中文版
AI 引擎能引用你的网站吗?运行一条命令,即可免费获得 0–100 分。它们真的会引用吗?使用你自己的密钥,通过它们的 API 检查。
geo-score 会根据 AI 答案引擎能否访问、解析、信任和引用某个网站,为其评出 0 到 100 分。 评分依据是任何人都能重新计算的公开、带版本号的评分标准。然后,使用你自己的 API 密钥,它会向各个引擎提出买家会问的问题,并记录答案引用了哪些来源。评分免费且无需安装任何内容;引用结果会与评分并列报告,但绝不会计入评分。
快速开始 · 截图 · 检测内容 · 准确度如何? · 文档 · 网站 · 更新日志 · 公开排行榜
**版本:**当前发行版为 PyPI 上的
geo-score==1.8.3,其标签、wheel 和校验和见 GitHub Releases;变更内容请参阅 更新日志。本页中的每条安装命令都固定到该发行版(scripts/release.py --bump会同步更新它们),因此你运行的工具与本页描述的版本一致。评分标准单独管理版本,当前版本为 v1.1。main 可能领先于发行版:用于 CI 和客户端工作时,请使用固定版本的发行版。
❤️ 赞助商
想在这里展示? · 赞助不会影响评分标准、任何分数、公开排行榜或本文档中的技术建议。
点击折叠
| 感谢 CCSub 赞助本项目!CCSub 是一个 AI API 中转平台:一把 API 密钥即可使用 Claude、GPT、Gemini 和 DeepSeek 模型,兼容 Claude Code、Codex、Cursor 及其他编码工具。通过此链接注册。 |
赞助商尚未接受 geo-score 的引用测量测试(第 2 和第 3 级)。这些测量需要使用各引擎自身支持搜索的 API,而中转平台可能无法原样传递网页搜索结果和引用。
它解决什么问题
GEO 指生成式引擎优化——让 ChatGPT、Perplexity、Google AI Overviews、Gemini 和 Copilot 引用你。与地理或地图无关。
答案引擎会引用其能够访问、解析并信任的来源中的段落。网站被排除在外的原因往往很细微,无法通过浏览器发现:robots.txt 中的一行规则让检索爬虫无法访问、页面文本只有在 JavaScript 运行后才会出现,或图表没有来源。geo-score 会找出网站存在这些问题中的哪些,以及每个问题的影响,然后分三个级别检查引擎是否引用该网站:
评分(免费,无需密钥)→ 提问(使用你的 API 密钥提一个问题)→ 监测(使用你的 API 密钥每周监测一组问题)。
一个工具,三个级别
| 级别 | 回答的问题 | 所需条件 | 命令 |
|---|---|---|---|
| 1 · 评分 | AI 引擎能否访问、解析、信任并引用该网站?根据公开评分标准给出 0–100 分 | 无需任何条件:无需密钥,无需安装 | geo_score.py stripe.com |
| 2 · 提问 | 针对你关心的问题,此刻它们会引用该网站吗? | OpenAI、Perplexity、Gemini、Anthropic、OpenRouter 中任一平台的 API 密钥 | geo_score.py stripe.com --ask "payments API for marketplaces" |
| 3 · 监测 | 每周的引用频率如何?引用了哪些竞争对手和来源? | 你的 API 密钥和固定的问题列表 | geo_score.py watch run |
flowchart LR
S[Your site] --> L1["Level 1 · Score<br/>free, no key"]
L1 --> R["0–100 readiness<br/>5 pillars · 3 gates · biggest gaps"]
Q[Questions your buyers ask] --> L2["Level 2 · Ask<br/>one question, your API keys"]
Q --> L3["Level 3 · Watch<br/>a fixed question set, every week"]
L2 --> C["Who the answers cite<br/>you · competitors · third-party pages"]
L3 --> C
R -. reported side by side, never summed .- C
第 1 级提供评分。第 2 和第 3 级衡量评分标准有意排除在分数之外的结果(两个分数,而非一个):它们会与 100 分并列报告,绝不会加进总分。网站可能得分 90,却仍在每个答案中输给第三方覆盖更广的竞争对手;反过来的情况也会发生,这就是为什么两者都值得关注。
为什么这与 SEO 问题不同
传统 SEO 问的是我排第几。答案引擎不会排名——它们会检索段落,判断某个来源是否值得引用,然后给出引用。这是不同的问题,也有不同的失败模式:网站可能在 Google 排名第 3,却从未被引用。由于引擎检索的是段落,本评分标准将内容可引用性赋予最高权重。这是一项设计选择,并非经过测量得出的效果:关于段落结构有多重要的证据仍很有限,证据表指出了证据最薄弱之处。
评分标准检查的大多数内容都易于机械化检测,修复成本也低——robots.txt 中的一行规则、一个 JSON-LD 区块、模板中的日期,或一段改写后即可独立表达完整意思的文字。难点在于弄清楚自己缺少哪些内容,以及每一项的价值。
可以从两篇指南开始:ChatGPT 能读取你的网站吗?,介绍如何手动检查,再用 geo-score 检查;以及 geo-score 与通用 AI SEO 技能有何不同。
截图
每张图片都展示了真实输出,专为本页面截取。
核心功能
| 功能 | 说明 | 更多信息 |
|---|---|---|
| 评分(Level 1) | 五大支柱中的 21 项分级检查、三项门槛、优先列出差距最大的项目,以及达到下一等级所需的条件。单个文件,仅使用标准库,无需密钥 | 检查内容 |
| 提问(Level 2) | 通过支持搜索的 API,使用你的密钥向 ChatGPT、Perplexity、Gemini 和 Claude 提出同一个问题,并报告每个回答引用了哪些来源 | Level 2 和 Level 3 |
| 监测(Level 3) | 每周使用一组固定问题:带 95% 置信区间的引用率、声量份额、各引擎依赖的来源,以及只有配对检验确认变化时才会将变化报告为变化的 diff | 监测方法 |
| 报告和差异比较 | 支持文本、符合已发布架构的 JSON、SARIF 和 JUnit;diff 逐项比较两份报告,--baseline 则对相同页面重新评分 | CLI 参考 |
| MCP 服务 | 将全部三个级别作为工具通过 stdio 提供给 Agent;--read-only 可启动不会产生费用的服务 | MCP 服务 · guide/mcp.md |
| GitHub Action | 每次推送时进行评分,回归或任一门槛为零时使构建失败,并写入任务摘要 | GitHub Action · action.yml |
| 徽章 | 可选的 SVG 或 shields.io 端点 JSON,显示你的评分和等级。它绝不会改变评分或排行榜名次 | 徽章 |
| Claude Code 技能 | CLI,以及需要站外搜索或人工判断的三项检查 | Claude Code 技能 · SKILL.md |
检查内容
21 项分级检查,总计 100 分;另有 4 项加分检查,最高可额外加 6 分,不计入总分分母。完整规范:[rubric/v1.1.md · 简体中文
| 支柱 | 分值 | 检查内容 |
|---|---|---|
| 可访问 — 门槛项 | 15 | 检索爬虫能否访问页面?robots.txt、10 种 AI 用户代理的实时可访问性、服务器渲染的内容 |
| 易于理解 | 22 | 能否识别页面和公司?Organization + WebSite、llms.txt、站点地图、面包屑、页面类型架构 |
| 内容引用价值 | 35 | 页面上是否有值得引用的内容?独立完整的答案段落、符合人们提问方式的标题、有来源的数据、真实署名、内容新鲜度 |
| 品牌可信度 | 18 | 为什么搜索引擎应该信任它?知识图谱实体、第三方目录、可解析的 sameAs、视频呈现 |
| 答案适配度 | 10 | 内容是否适合摘取并纳入答案? |
内容引用价值的权重最高,这是有意为之:答案引擎检索的是段落,而非域名。段落结构是否比域名权威性更重要,目前尚无定论:权重最高的单项检查 p2.answer-passages 依据有限(证据最薄弱之处)。
每项计分检查均分级——分为 2 至 4 个等级,每个等级都列明 8 个抽样页面中的数量,因此两个人为同一网站评分时,计算结果会一致。有三项检查是门槛项:若爬虫访问、实时可访问性或服务器渲染内容的得分为零,最终分数上限为 40,因为爬虫尚无法访问内容时,其他任何改动都不会产生效果。
等级
| 0–30 | 31–50 | 51–65 | 66–82 | 83–100 |
|---|---|---|---|---|
| 尚未起步 | 初步发展 | 持续成长 | 稳健成熟 | 领先 |
| 等级名称描述的是发展阶段,而非评价结论。外部基准显示,大多数企业网站的得分在 30–55 之间,因此得分在 40 多分很常见,不必担忧。在本仓库自己的基准测试中,324 个网站里有 85% 达到初步发展阶段,6% 达到领先阶段(各等级的分数界线)。 |
324 个网站,公开评分
其中四分之一对 AI 爬虫来说无法读取。 73 个网站的门禁检查得分为零——AI 检索爬虫无法获取内容,因此没有任何内容可引用。20 个网站在 robots.txt 中明确屏蔽 AI 爬虫,这是编辑层面的选择,因此按此报告——amazon.com 正是因为这个原因得了 17 分。41 个网站的页面正文只有在 JavaScript 运行后才会出现。 内容确实存在,浏览器能看到,但爬虫得到的只是空壳。这些网站几乎肯定不是有意如此。另有 12 个网站的服务器会拒绝爬虫 user-agent(审计方地址发出的探测未经验证)。
中位数为 55(95% 置信区间:51–58,stats.py)。范围为 11 至 96。66 个网站的评分页面少于四个;排除这些网站后,中位数为 59。
| 网站 | 得分 | 档位 |
|---|---|---|
| resend.com | 96 | 领先 |
| pulumi.com | 94 | 领先 |
| supabase.com | 93 | 领先 |
| elevenlabs.io | 91 | 领先 |
| lumalabs.ai | 90 | 领先 |
| … | ||
| qcloud.com | 12 | 尚未开始 |
| mercadolibre.com | 12 | 尚未开始 |
| keepa.com | 11 | 尚未开始 |
按行业查看完整榜单 → · Markdown · 原始数据 · CSV · 每个网站的完整报告 · 重新运行
还有两项值得点击查看的发现。中国五个行业的网站得分比其他网站低 22 分(95% 置信区间:16–30;中位数为 36,对比 58;此前使用 1.1.0 测量的样本显示差距为 16 至 23 分)。若按网站服务的语言分组,54 个中文网站比另外 270 个网站低 26 分(95% 置信区间:22–32);在匹配的行业类别内部,差距为 -8 至 27 分。按原始分数逐项检查,差距的 69% 来自 CLI 使用启发式方法读取的检查项,因此工具误读中文页面最多可能解释这一比例的差距(详细分析)。逐项差异最大的两项是疑问句式标题和独立完整的答案段落;在人工审计对比中,CLI 对唯一一个中文网站的评分也低于人工,因此部分差距可能源于工具对中文页面的判读较为保守。从 1.5.0 起,CLI 会以每个页面自身的语言进行读取,并统计中文的任务、说明和比较类标题;上方榜单使用 1.5.0 测量,因此数据已包含此项改进。此外,在半数以上的网站中,附有来源和可验证署名的统计数据属于差距最大的三项之一。
这里的每个数字都可以使用快速开始中的命令复现(这项基准测试于 2026-10-02 使用 1.5.0 运行)——我们也测量了其可复现性。2026-10-12,1.8.0 在同一天从同一地点对整个列表评分三次(第三次重新读取了第一次运行中的页面):在每次运行都评分的 317 个网站中,99% 的网站前两次得分相差不超过 ±5,81% 得分完全相同(ICC 0.99,SEM 1.9;REPRODUCIBILITY.md,由 benchmark/retest.py 得出)。较早的 1.1.x 版本于 2026-09-09 测量时,96% 的网站得分相差不超过 ±5,45% 得分完全相同。单个网站的得分应理解为 ±5 的范围,而非精确值;中位数则较为稳定。仍会波动的部分大多来自知识图谱查询:从该观测点出发,大多数网站都没有收到查询结果;以及那些机器人防护机制对不同运行中的爬虫给出不同响应的网站,其门禁检查也会波动。评分档位、对照实验和逐网站的成对数据见 benchmark/REPRODUCIBILITY.md。
对于五个参考网站,我们还发布了人工评分审计,涵盖全部 21 项检查,并列出每项检查的依据:examples/audits/v1.1/。
准确度如何?
人们常问的五个问题,以及本仓库对每个问题的回答:
| 问题 | 答案 | 记录 |
|---|---|---|
| 同一网站评分两次:差距有多大? | 使用 1.8.0 于 2026-10-12 当天复测:317 个网站中,99% 的分数差在 ±5 以内,81% 的分数完全相同(ICC 0.99) | REPRODUCIBILITY.md |
| 任何人都能重新计算吗? | 可以:每项检查、等级和权重均已公开,因此无论由谁运行,相同页面都会得到相同分数 | rubric/v1.1.md |
| 它与人依据同一评分标准阅读时的结果相符吗? | 84 对检查中有 80% 的等级相同;仅有 5 个网站出现差异,且全部是校准网站 | VALIDITY.md |
| 权重会决定排名吗? | 使用相同权重,或对权重进行 300 次随机扰动,排名相关性仍保持在 0.99 或以上 | SENSITIVITY.md |
| 得分较高的网站是否更常被 AI 引用? | 预注册测试的首轮(2026-10-12 至 14;16 个类别、83 个网站、来自一个引擎的 1,280 条回答):未检测到关联(T = 0.07,p = 0.51);该设计能够检测到至少为 0.29 的 T。未检测到并不等于不存在 | RESULTS-wave0.md、PREREGISTRATION.md |
与人工审计对比。 CLI 不会猜测,而是将需要站外搜索或人工判断的三项检查排除在分母之外(若网站提供中文内容,则还会排除第四项 p4.cn-engines)。在相同页面上重新评分已发布的五份人工审计后,它在 84 对检查中有 80% 的等级与审计员一致(读取规则的检查中为 92%,近似判断的检查中为 69%)。在双方都评分的检查中,它平均低 2.4 分(各网站的差值从低 12 分到高 10 分;平均绝对差为 8.8)。它的完整归一化分数平均低 5.2 分,差值从低 16 分到高 7 分,因为人工审计还会对 p3.listings、p3.mentions 和 p4.question-coverage 评分,而 CLI 会将这些项目排除。样本数 n=5,全部为校准网站:
VALIDITY.md 列出了所有差异。
快速开始
一条命令
Python 3.8+,仅使用标准库,无需安装任何内容。它会读取公开 URL,并根据已发布且有版本号的评分标准给出分数——并非黑箱。
curl -sL https://raw.githubusercontent.com/jianruntech/geo-score/v1.8.3/cli/geo_score.py \
| python3 - stripe.com --brief
完整输出——每项检查,以及下一等级的要求(--explain 会补充证据)
AIV READINESS https://stripe.com
──────────────────────────────────────────────────────────────────────────
72 / 100 Solid
11 points to Leading
Reachable 13/15
◐ Crawlers allowed in robots.txt ███████████░░░░░░░ 3/5
✓ Reachable to retrieval agents ██████████████████ 5/5
✓ Main content server-rendered ██████████████████ 5/5
Understandable 17/22
◐ Sitemap discoverable and fresh █████████░░░░░░░░░ 2/4
✓ llms.txt present and structured ██████████████████ 5/5
✓ Organization + WebSite schema ██████████████████ 6/6
✗ BreadcrumbList on nested pages ░░░░░░░░░░░░░░░░░░ 0/3
✓ Page-type schema (Product, FAQ…) ██████████████████ 4/4
Content Citability 21/35
✓ Self-contained answer passages ██████████████████ 9/9
◐ Headings match how people ask ████████░░░░░░░░░░ 3/7
◐ Freshness signal present █████████░░░░░░░░░ 3/6
◐ Statistics carry a source ████████░░░░░░░░░░ 3/7
◐ Named, verifiable authorship █████████░░░░░░░░░ 3/6
Brand Credibility 9/10
⊘ Third-party listings ·················· —
⊘ Independent mentions ·················· —
✓ Knowledge-graph entity ██████████████████ 4/4
✓ sameAs links resolve ██████████████████ 3/3
◐ Video and multimodal presence ████████████░░░░░░ 2/3
Answer Fit 2/4
◐ Content shaped for extraction █████████░░░░░░░░░ 2/4
⊘ Covers the questions people ask ·················· —
⊘ Chinese engine readiness ·················· —
✓ full · ◐ partial · ✗ zero · ⊘ not measured (left the denominator)
Biggest gaps
+3 next tier (+3 to full) Freshness signal present needs: most pages do, and dateModified agrees with the visible date
+3 next tier (+3 to full) Named, verifiable authorship needs: and the name links to a verifiable identity page
+2 next tier (+2 to full) Crawlers allowed in robots.txt needs: mainstream retrieval user-agents explicitly allowed
Scored 62 / 86 observable · 4 checks left the denominator · rubric v1.1 · took 91.5 s
Needs off-site search or judgement: p3.listings, p3.mentions, p4.question-coverage
Not observable this run: p4.cn-engines (not a Chinese-language site)
Full rubric and what each tier means:
https://github.com/jianruntech/geo-score/blob/v1.5.0/rubric/v1.1.md
Score moved, or a check shows —? https://github.com/jianruntech/geo-score/blob/v1.5.0/guide/troubleshooting.md
geo_score.py stripe.com,记录于 2026-10-03,使用 geo-score 1.5.0 并通过 HTTPS 代理(页脚中的时间包含代理耗时)。使用 1.8.3 运行的示例,请参见屏幕截图。从 1.7.0 起,报告还会在检查项目后、分数之外打印三项观察结果(逐页列出 robots.txt 规则、服务器 HTML 中的链接、hreflang),这些内容不会影响分数;此记录早于这些功能。参见 cli/README.md。
这三个级别都支持。级别 2 和级别 3 需要将 cli/geo_watch.py 放在 cli/geo_score.py 旁边,PyPI 上的软件包包含这两个文件;克隆仓库或下载这两个文件也可以。下面两种方式都不需要 git 或构建步骤。
uvx [email protected] example.com # run it without installing (needs uv)
pipx install geo-score==1.8.3 # or install the geo-score command
geo-score example.com --explain # every check, with the evidence behind it
如果无法访问 PyPI,可从发布版本安装同一个 wheel:
pipx install https://github.com/jianruntech/geo-score/releases/download/v1.8.3/geo_score-1.8.3-py3-none-any.whl。
从源代码安装(需要 git):pipx install git+https://github.com/jianruntech/[email protected]。
无论选择哪种方式,都只使用标准库。发布版本下载中包含 SHA256SUMS 文件,PyPI 上的 wheel 和 sdist 与之逐字节匹配(如何校验)。
调用 CLI 的所有方式,以及可选的徽章(用于你自己的 README)
CLI — 级别 1 是一个无依赖的单文件程序,每份报告都会记录运行耗时
(elapsed_s)。级别 2 和级别 3 需要添加同一发布版本中的 cli/geo_watch.py。如果从 PyPI 安装了软件包,
可使用 uvx [email protected](或在执行 pipx install geo-score==1.8.3 后使用 geo-score)代替下方的
python3 cli/geo_score.py,三个级别都适用。
python3 cli/geo_score.py example.com # human-readable
python3 cli/geo_score.py example.com --explain # with the evidence behind every check
python3 cli/geo_score.py example.com --json # conforms to schema/report.v2.json
python3 cli/geo_score.py example.com --compare competitor.com # side by side
python3 cli/geo_score.py example.com --badge aiv-badge.svg # embeddable SVG
python3 cli/geo_score.py example.com --badge-json aiv-badge.json # the same badge as shields.io endpoint JSON
python3 cli/geo_score.py example.com --share # one line to paste somewhere
python3 cli/geo_score.py diff before.json after.json # what changed between two reports, check by check
python3 cli/geo_score.py example.com --baseline before.json --fail-on-drop # CI: re-score the same pages, fail only on a drop
“Scored with geo-score”:可选的徽章(用于你自己的 README)。 --badge aiv-badge.svg 会生成一个 SVG,显示你的
分数和等级。将它与 README 一起提交,并链接到说明该数字含义的页面、本仓库或
公开排行榜:
[](https://github.com/jianruntech/geo-score)
这是可选项,不会带来任何影响:徽章或回链都不会改变分数,也不会决定网站是否或何时出现在
排行榜上。网站通过添加网站的方式加入排行榜,绝不以添加链接为交换条件。已提交的
SVG 会显示生成它的那次运行结果;--badge-json 会将同一徽章输出为 shields.io 端点 JSON,因此无需重新生成图片也能保持
最新(详情)。
Claude Code 技能
CLI 测量静态抓取可见的内容。有三项检查需要站外搜索或人工判断,技能也会执行这些检查。
npx skills add jianruntech/geo-score # add -g for a global install
# then: /geo-score audit https://example.com
npx skills add 会运行开源的 skills CLI。它会在本仓库中找到一个技能,即
geo-score,并将整个仓库(约 9 MB)按默认分支 main 当前的内容复制到 .claude/skills/geo-score,供 Claude Code 使用。没有 Node.js,或者想使用发布版本而非 main 时,可将发布标签克隆到自己的技能文件夹:
git clone --branch v1.8.3 --depth 1 https://github.com/jianruntech/geo-score ~/.claude/skills/geo-score。
不使用技能时,CLI 能做到什么程度:它有多准确?
MCP 服务
geo-score-mcp 是一个本地 MCP 服务(stdio,仅使用 Python 标准库)。它为 Agent 提供与 CLI 相同的三个级别:免费为网站评分、向 AI 引擎提出一个问题,以及按周跟踪一组问题。uvx [email protected] mcp 会从 PyPI 运行它(通过 pipx 安装后使用 geo-score-mcp),而
python3 cli/geo_score.py mcp 则会从克隆的仓库运行它。
这些按钮和下面的命令会通过 uvx 从 PyPI 运行 geo-score 1.8.3,只需安装 uv:无需 git,也无需构建步骤。它们不会自行添加密钥,但如果在导出了提供商密钥的 shell 中启动服务(Claude Code 会传递其环境变量),服务就可以使用该密钥。若要让服务无法产生费用,请在 mcp 后添加 --read-only。
Claude Code
claude mcp add --scope user geo-score -- uvx [email protected] mcp
标准配置(文件中不含密钥),适用于任何会读取 mcpServers 文件的客户端:
{
"mcpServers": {
"geo-score": {
"command": "uvx",
"args": ["[email protected]", "mcp"]
}
}
}
Claude Desktop 不会读取 shell 的 PATH:请将 which uvx 输出的完整路径填入 command。
无法访问 PyPI 时,使用发布 wheel:uvx --from https://github.com/jianruntech/geo-score/releases/download/v1.8.3/geo_score-1.8.3-py3-none-any.whl geo-score-mcp
从源代码运行(需要 git):uvx --from git+https://github.com/jianruntech/[email protected] geo-score-mcp
工具、各自的费用,以及读取的密钥和配置
| 工具 | 级别 | 费用 | 写入内容 | 提示 | 参数 |
|---|---|---|---|---|---|
score_site | 1 | 免费 | 否 | 只读、开放世界 | url、urls、sample |
ask | 2 | 付费(使用你的密钥) | 否 | 非破坏性、开放世界 | question、engines、brand、domains |
run | 3 | 付费(使用你的密钥);dry_run 免费 | 在配置文件旁的 .geo-score/watch/runs/ 下创建运行文件 | 非破坏性、开放世界 | dry_run、engines、limit、max_calls、budget_usd |
list_runs | 3 | 免费 | 否 | 只读、幂等 | — |
report | 3 | 免费 | 否 | 只读、幂等 | run、since、format |
diff | 3 | 免费 | 否 | 只读、幂等 | from、to、format |
status | — | 免费 | 否 | 只读、幂等 | — |
资源:geo-score://rubric/v1.1。
提示词:audit_site(url)、check_citations(question、brand)、weekly_watch、compare_runs(from、to)、explain_check(check_id)。
粗体参数为必填项。提示是工具的 MCP 注释:客户端可以据此决定需要确认哪些内容;这些只是提示,并非保证。只有 ask 和 run 可能产生费用,且只能使用你提供给服务的提供商密钥。
可以向 Agent 提出的问题:
| 提示词 | 调用内容 |
|---|---|
| 评估 https://acme.com 的 AI 搜索就绪情况,并列出最有提升空间的 3 项检查。 | 使用 url 调用 score_site |
| 对我跟踪的问题进行试运行,并告知计划调用的次数和上限。 | 使用 dry_run: true 调用 run(级别 3,需要配置) |
| 比较最近两次观察运行:哪些引擎发生了变化?是否有变化超出噪声范围? | diff(默认比较最近两次运行) |
密钥和配置。 score_site 无需密钥。ask 和 run 从 MCP 服务的环境中读取提供商密钥 | |
(OPENAI_API_KEY、PERPLEXITY_API_KEY、GEMINI_API_KEY、ANTHROPIC_API_KEY、OPENROUTER_API_KEY), | |
| 而不是从你的终端读取:桌面应用无法读取你在 shell 中导出的内容。第 3 级工具还需要一个 | |
geo-score-watch.json。请通过 -c /absolute/path/geo-score-watch.json 传入,因为 GUI 客户端不会在你的 | |
项目目录中启动服务。从 1.4.0 起,--read-only 可启用无法产生任何费用的服务。 |
各客户端(Claude Code、Claude Desktop、Codex、Cursor、VS Code、Gemini CLI、Devin Desktop、Zed)的设置、Claude Code 插件、超时、安全和故障排除: guide/mcp.md。
GitHub Action
每次推送都执行第 1 级:为网站评分,并在评分退步时让构建失败。要按计划执行第 3 级,请参阅 examples/ci/watch-weekly.yml。
- uses: jianruntech/geo-score@v1
with:
url: https://example.com
fail-under: 40
fail-on-gate: true
门槛为 0 时,分数上限为 40:原本得分为 40 或更高的网站会显示正好 40,并通过 fail-under: 40 检查。fail-on-gate: true 会让任何分数被封顶的网站都无法通过。
它生成的作业摘要位于 Screenshots。
第 2 和第 3 级 · AI 是否真的会引用你?
--ask 和 watch 会通过 ChatGPT、Perplexity、Gemini 和 Claude 各自启用搜索的 API,使用你自己的密钥提出买家会问的问题,并记录答案引用了谁:
你、你的竞争对手,还是搜索引擎更依赖的第三方页面(论坛、评测网站)。
密钥从环境中读取;geo-score 不会将密钥写入任何位置。
git clone --branch v1.8.3 --depth 1 https://github.com/jianruntech/geo-score && cd geo-score/cli
export OPENAI_API_KEY=… PERPLEXITY_API_KEY=… # any subset of engines works
python3 geo_score.py acme.com --ask "invoicing app for freelancers" # level 2
python3 geo_score.py watch init --brand Acme --domain acme.com --competitor "Rival=rival.com"
# put the questions your buyers ask an AI assistant into queries.csv, then:
python3 geo_score.py watch run --dry-run # the plan, the caps, what a diff could detect and how precise one question's rate is; no calls, no cost
python3 geo_score.py watch run # level 3: every question on every engine, saved
python3 geo_score.py watch diff # this run against the last, with a significance test
python3 geo_score.py watch report --since 30 # the last 30 days pooled, one interval over questions
第 2 级会向每个引擎各提问一次,并在就绪度报告下方打印结果(使用 --json 时,也会将结果写入报告的 citation 对象)。单次提问只是一个例子:用它了解引擎今天会说什么,不要用它衡量引用率。
监测运行会打印什么(示例:虚构品牌和预设答案,并非真实测量;由 1.2.0 保存、由 1.8.0 打印的运行结果)
geo-score watch · Lumo · run 20260926T083000Z · api channel
6 questions × 2 engines × 2 = 24 planned · 23 answered · 1 failed · 0 skipped
Cited in 38% of answers to questions that do not name Lumo (6 of 16, 4 questions, 95% CI 12–62%) · mentioned in 38%
Questions that name Lumo (2, kept out of the headline): cited in 100% (7 of 7, 95% CI 65–100%) · mentioned in 100%
Your site was cited somewhere for 5 of 6 questions.
By engine
engine model cited 95% CI mentioned named first (tracked) avg rank
chatgpt-api gpt-6-luna 9/12 75% 42–100% 75% 9/12 1.0
perplexity-api sonar 4/11 36% 8–75% 36% 0/11 2.0 1 failed
gemini-api gemini-3.8-flash not measured no_key: set GEMINI_API_KEY or GOOGLE_API_KEY
These rows, and the tables below, count every question, the 2 that name Lumo included.
Answer share your pages support: not measured; this run was saved before citation positions were recorded.
Sources listed and used in the answer: not measured; this run was saved before listed sources were recorded.
Repeat consistency of cited domains (per engine; descriptive, not read by diff)
engine questions measured pairs median Jaccard
chatgpt-api 6/6 6 1.00
perplexity-api 5/6 5 1.00
gemini-api not measured no_key
Least consistent questions (up to 3 per engine):
id question engine answers that cite Jaccard
q02 ai video tool with no watermark chatgpt-api 2 0.50
q01 best free ai video generator perplexity-api 2 0.50
- Repeat consistency: for each question an engine answered more than once in this run, the overlap of the domains two of its answers cite, shared domains over all domains of the two (Jaccard), for every two answers, averaged per question; the median over questions per engine. 1: every ask cited the same domains; 0: no domain in common. Domains are read as everywhere in this report, www dropped; the order of citations is not compared.
- Answers that cite nothing are left out: two empty lists are not agreement, and one empty list is not a 0. On an engine, a question with fewer than two answers that cite is not measured. Lowest: up to 3 questions per engine whose answers did not all cite the same domains, lowest first.
- Descriptive only: no interval and no test, never part of the cited rate, and watch diff does not read it. It describes asks minutes apart in one run, which share that day's index; it is not computed over pooled runs.
Share of voice
cited 95% CI mentioned named first (tracked) sentence share
Lumo (you) 57% 26–86% 57% 9/23 100%
Pixa 52% 33–71% 100% 14/23 100%
- Named first (tracked): answers that name that brand before any other brand in your config, out of the answers that name at least one of them. Brands your config does not list are not seen, so first among the brands you track may not be first in the answer. Two brands first named at the same place, one name inside the other, are neither first.
- Sentence share: in the answers that name a brand, the mean share of their sentences that name it, every sentence counted the same. A sentence ends at a line break, at 。!?, or at . ! ? before a space.
- Both read the answer as saved, which keeps its first 20,000 characters; a name that first appears after that is not seen.
Sources the engines cite most (not yours)
domain answers share owner
pixa.example 12 52% Pixa
reddit.com 11 48%
Questions where a competitor is cited and you are not (1)
id question cited instead
q03 cheapest text to video app Pixa
Who is named for each question
id question answers Lumo (you) Pixa no tracked brand named searched yes/no/unknown most cited
q01 best free ai video generator 4 cited 3/4 · named 3/4 cited 2 · named 4 0/4 2/0/2 Lumo (you)
q02 ai video tool with no watermark 4 cited 1/4 · named 1/4 cited 2 · named 4 0/4 2/0/2 Pixa
q03 cheapest text to video app 4 cited 0/4 · named 0/4 cited 2 · named 4 0/4 2/0/2 Pixa
q04 lumo vs pixa 4 cited 4/4 · named 4/4 cited 2 · named 4 0/4 2/0/2 Lumo (you)
q05 pixa alternatives 4 cited 2/4 · named 2/4 cited 2 · named 4 0/4 2/0/2 —
q06 鹿末视频免费吗 3 cited 3/3 · named 3/3 cited 2 · named 3 0/3 2/0/1 —
- An answer given without a web search cannot cite anything.
- "No tracked brand named" counts answers that name none of the brands in your config; they may name others.
- Perplexity and OpenRouter search on every call or do not say, so their answers count as unknown under searched.
By question type
type cited 95% CI mentioned
alternative 2/4 50% 15–85% 50%
list 4/8 50% 22–78% 50%
pricing 3/7 43% 0–100% 43%
vs 4/4 100% 51–100% 100%
What the engines searched for (from 12 answers that show it)
times search
2 best free ai video generator
2 ai video tool with no watermark
2 cheapest text to video app
2 lumo vs pixa
2 pixa alternatives
2 鹿末视频免费吗
- Of 12 searches: 0 contain a year, 6 contain a ranking or comparison word.
Ledger
24 questions asked · 23 API requests · 14,620 in / 4,860 out tokens · 23 searches · $0.07 + 12 answers with no price (add prices to geo-score-watch.json)
1 failed after 24 HTTP requests in all; a request that timed out may still be billed.
Caps: at most 100 questions.
Read this before quoting the numbers
- API channel. Answers come from each provider's search-enabled API, which is not the consumer app. Compare runs with runs; never pool them with answers sampled by hand in the apps.
- The same question gets different answers from one ask to the next, and answers to one question move together. Rates carry a 95% interval: Wilson when each question was answered once, a bootstrap over questions when a question has several answers. diff pairs the questions both runs answered and calls a change a change only when an exact paired test (McNemar, or a sign-flip test when a question has several answers), Holm-corrected across engines, says so (p < 0.05).
- A question that names the brand invites an answer that cites it. Those questions are kept out of the headline rate and reported on a line of their own.
- Engines without a key, calls that failed and calls skipped by a cap count as not measured, never as zero.
- This measures citations. It does not predict traffic, rankings or revenue.
- This run was saved before questions were flagged at run time. Questions that name the brand were found when this report was made, from the saved question text and the run's brand name, aliases and domains.
第 3 级报告的内容、无法告知的信息、引擎以及限制和成本
第 3 级会保留固定的问题列表,将每个答案保存到 .geo-score/watch/runs/
(架构),并报告:
| 含义 | |
|---|---|
| cited | 答案链接到了你拥有的 URL:你的某个 domains(包括子域名),或 url_prefixes 中的某个条目,例如你的 Amazon 商店或 GitHub 组织 |
| rank | 在答案引用的不同域名中,你的排名。排名 1 表示你是第一个来源 |
| mentioned | 答案提到了你、你的某个 aliases 或你的域名。中文、日文和韩文名称可匹配任意位置;其他名称仅匹配完整单词 |
| share of voice | 对每个竞争对手,在同一批答案中计算的相同两项比率 |
| sources | 最常被引用的第三方域名:各引擎在你的类别中最信任的页面 |
| answer share | 你的页面为每个答案提供支持的比例(supported_share):按字符数、句子数和按位置加权的字符数计算,依据服务提供商给出的每条引用位置。它与引用率并列显示,但不会合并;如果答案中的引用没有位置信息,则不进行测量 |
| sources listed and used | Perplexity 和 Gemini(generate_content)会在答案旁返回来源,并标记文本实际使用的来源:每个答案中列出的来源和使用的来源、使用来源占列出来源的比例,以及列出并使用了你的 URL 的答案。返回单一来源列表的 API 不进行测量 |
| repeat consistency | 当一次运行在某个引擎上多次提问时:各次提问引用的域名一致程度(每个引擎按问题计算的 Jaccard 系数中位数),以及一致性最低的问题。仅作描述;watch diff 不会读取此项 |
| gaps | 在任何答案中引用了竞争对手、但没有引用你的问题 |
| searches | API 能提供时,引擎在作答前实际执行的搜索(OpenAI、Gemini、Claude)。这是实际观察到的查询扩展,而非猜测。报告会统计其中包含年份、排名词或比较词的搜索数量;如果答案执行了搜索,但端点未返回查询文本,报告也会说明 |
| ledger | 提问数量、API 请求数、令牌数、搜索次数和费用。每次运行都有独立的记录 |
它不会告诉你什么。
- 它不是 ChatGPT 应用。 答案来自各服务提供商已启用网络搜索的 API。面向消费者的应用使用其他模型、提示词和个性化设置。请用 API 运行结果与 API 运行结果比较;不要与在应用中手动抽样的答案混在一起。
- 有些界面无法触及。 Google AI Overviews 和 AI Mode、TikTok、Reddit 或小红书等应用内的 AI 摘要、助手的记忆和账户设置、比国家提示更精细的地理位置,以及编码 Agent 选择了哪个库,都无法通过这些 API 触及。
- 引用表示出现,不代表质量。 引用率表示引擎提到了你并链接到你,而不代表它所说的内容属实,也不代表该页面值得引用;引擎也会引用误导性和自我宣传的页面。
- 单个答案只是个例。 每项比率都附带 95% 区间(当一个问题有多个答案时,按问题进行自助抽样,因为这些答案会共同变化);只有当对两次运行都回答的问题进行精确配对检验,并在各引擎间进行 Holm 校正后,
diff确认结果显著(p < 0.05),才会将其称为变化。共同问题太少(少于 6 个,或不足以比较所涉及的引擎数量)时,报告会注明数据不足,无法判断。方法说明:guide/watch-methodology.md。 - 提到你的问题会单独处理。 “acme vs rival”或“is acme worth it”会把你的名称放进引擎的搜索中,因此几乎总会被引用。
watch会在运行时标记这些问题,将它们排除在总体比率之外,并在单独一行报告及其数量。你也可以在queries.csv中添加可选的branded列,手动修正标记。 - 未测量不等于零。 没有密钥的引擎、失败的调用和达到上限的调用都会报告为未测量,且不会拉低你的比率。
- 引用不等于流量。 这里的任何内容都无法预测访问量、排名或收入。
引擎。 在配置中固定你使用的模型,并在各次运行之间保持不变;
diff会标记模型发生变化的运行。OpenRouter 用一个密钥即可接入数百种模型。
| 引擎 ID(默认) | 提供商 | 密钥 | 默认模型 | 哪些内容会被视为引用 | 是否显示搜索 | 是否报告费用 |
|---|---|---|---|---|---|---|
chatgpt-api | OpenAI Responses API + web_search | OPENAI_API_KEY | gpt-6-luna | url_citation 注释 | 是 | 否,需设置价格 |
perplexity-api | Perplexity Sonar | PERPLEXITY_API_KEY | sonar | 答案使用的编号来源 | 否 | 是 |
gemini-api | Gemini Interactions API + google_search | GEMINI_API_KEY 或 GOOGLE_API_KEY | gemini-3.8-flash | url_citation 注释 | 是 | 否,需设置价格 |
claude-api | Anthropic Messages + web_search 工具 | ANTHROPIC_API_KEY | claude-sonnet-5 | 答案文本中的引用 | 是 | 否,需设置价格 |
| 你选择的任意 ID | OpenRouter + web 插件(通过 OpenRouter 搜索并作答的模型,而非供应商自带的模型) | OPENROUTER_API_KEY | openai/gpt-6-luna | url_citation 注释 | 否 | 是 |
上限和费用。 max_calls 是一次运行所提问题数量的精确上限,超出上限的计划将无法启动。每次调用前,系统都会将 budget_usd 与截至目前的支出加上该引擎已出现的最高单次调用费用进行比较,因此每个引擎最多可能超出一次调用的费用;设置预算后,除非传入 --allow-unpriced,否则会排除无法确定费用的引擎。每次运行都会记录请求、令牌、搜索和费用。配置、价格和所有命令详见:cli/README.md。
通过 Agent 使用。 第 2 级和第 3 级也提供 MCP 工具,Agent 只能收紧你的上限,不能放宽:参见 MCP 服务。
每周运行。 引用率变化缓慢且有噪声:请在每周同一天使用相同的问题和模型运行,并查看 diff,而非单次运行结果。
examples/ci/watch-weekly.yml 会按计划运行,使用来自仓库机密的密钥,并提交每次运行的结果,因此历史记录会保存在 git 中。运行文件包含你的问题和完整答案:如果内容涉密,请使用私有仓库。
自行运行,或交由他人代为运行。 此处所有内容均采用 MIT 许可;该工具没有付费版本。你直接向模型提供商付费,账本会显示每次运行的用量。对于需要人工而非 API 完成的工作,Jianrun 提供服务:
| 自行运行(免费) | 由 Jianrun 运行 | |
|---|---|---|
| 渠道 | 提供商 API 与搜索 | API 和消费级应用,每周人工抽样 |
| 引擎 | OpenAI、Perplexity、Gemini、Anthropic,以及 OpenRouter 上的任何模型 | 带搜索功能的 ChatGPT、Perplexity、Gemini、Google AI Overviews、Copilot;面向中国市场销售时还可使用中国引擎 |
| 报告 | 文本、Markdown、CSV、JSON | 每周报告和 AIV 仪表板:引用趋势、各引擎引用率、AI 对你的错误认知、准备情况历史记录 |
| 引用率下降时 | 不在服务范围内 | 我们负责修复 |
| 价格 | 你的 API 账单 | AEO 交付系统,每季度 7,790 美元起(按年支付为 30,590 美元),含 AIV 仪表板。查看价格 |
适用对象
| 对象 | 用途 | 从何处开始 |
|---|---|---|
| 网站所有者和营销团队 | 了解 AI 引擎能否访问并引用网站,以及哪些差距最值得优先解决 | 使用 --brief,然后使用 --explain;针对对你重要的问题使用级别 2 |
| 代理机构和顾问 | 提供诊断结果,供客户依据已发布、带版本的评估标准复核;每次更改后对相同页面重新评分 | 使用 --json、--baseline last.json 和 diff;在报告中注明评估标准版本 |
| 开发者和 CI | 部署阻止爬虫、关闭服务端渲染或导致评分下降时,让构建失败 | 使用 GitHub Action、--fail-on-gate、--assert、SARIF 和 JUnit |
| 研究人员 | 重新计算所有已发布的数据、质疑权重,并通过引用检验就绪度 | rubric/v1.1.json、benchmark/、预注册文件 |
geo-score 衡量引擎能否引用某个网站,以及它们是否会这样做。它不会修复任何问题,也不会预测流量、排名或收入。
范围与治理
| 领域 | 当前情况 |
|---|---|
| 测量,而非修复 | 除两个公开知识示例外,不提供修复模板、改写内容或针对特定引擎的策略:范围 |
| 评估标准变更 | 公开提案、意见征询期和独立评审;不出售认证:评估标准治理 |
| 权重 | 每项检查都会说明其权重的依据,并列出来源和核查日期:证据表 |
| 隐私 | 不收集遥测数据。级别 1 会访问网站、网站标记和 robots.txt 指向的内容,以及 Wikidata 和 Wikipedia 搜索;级别 2 和级别 3 仅调用你设置了密钥的服务提供商 |
| 稳定性 | 报告架构、检查 ID、CLI 标志、退出代码、Action 输入和 MCP 工具均为公开契约:稳定性政策 |
范围——它不做什么
这是大多数工具避而不谈的部分,所以我们在此明确说明。
AIV Score 用于衡量,不用于修复。
| 不包含的内容 | 原因 |
|---|---|
修复模板——robots.txt、JSON-LD 区块、llms.txt 样板内容;两个公开知识示例(允许检索爬虫访问的 robots.txt、Organization JSON-LD 对象)除外 | 修复才是真正需要投入工作和判断的环节。这是一个独立的非开源项目 |
| 内容改写——如何组织一段内容,才能让它被引用 | 同上 |
| 按引擎区分的策略——针对 Perplexity 与 Gemini 分别应采取哪些不同做法 | 同上 |
| 修复路线图 | 同上 |
其他需要如实说明的限制:
- 它衡量的是输入侧的就绪程度,而不是结果。 就绪度得分高,意味着各引擎可以引用你。至于它们是否会引用你,取决于竞争、查询意图以及外部审计无法观察的因素。引用表现会单独报告为一个不计分的区块,绝不会计入满分 100 分——参见两个分数。请用上文的第 2 级和第 3 级来衡量。它不计入得分的一个原因是:再次提问时,同一个问题得到的来源往往大不相同。在一个市场中,汇总四个引擎、涵盖四个行业的提示词,在 24 小时内重复运行,统计引用过内容的运行,其来源平均重叠率(Jaccard)为 0.32 至 0.43,各引擎分别为 0.23 至 0.51(Schulte 等人,2026,§5,表 4 和表 6);Google AI Overviews 在相同设备和位置上运行两次的重叠率为 0.66(Grossman 等人,SIGIR 2026,§4.4,表 4)。
- 品牌可信度和具名作者检查需要人工判断。“这是否是真实且可识别的人”以及“这条提及是否独立”无法完全自动化。应将这约 24 分视为辅助评分,而不是自动评分。
- 分档能减少分歧,但无法消除分歧。 每个档位都会给出 8 个抽样页面中的具体数量,因此两位审计人员在计算上能达成一致。但他们仍可能对某段文字是否构成完整答案存在分歧。已解决的歧义列出了我们发现的问题;今后还会出现更多。
- 高度依赖客户端渲染的网站得分偏低,有时并不公平。 如果你的内容只在页面完成 hydration 后才出现,大多数检查读取到的都会是 hydration 前的 HTML——这也大致是爬虫看到的内容,因此低分通常是合理的,但请手动核实。
- 引擎行为会变化。 评分标准正是为此而进行版本管理。旧版评分标准下的得分无法与当前版本直接比较。
为什么要用评分标准,而不只是工具
无法审计的分数,只是别人随手编出的数字。因此,规范才是产品,工具则是它的实现:
- 有版本管理。 每个分数都会注明评分标准版本。
71 (v1.1)是有依据的说法;71则不是。 - 分档并附数量。 每个档位都会写明 8 个页面中的具体数量,而不是“多数”。
- 基于证据。 每项检查都要求有他人可以复现的观察结果。
- 根据公开基准校准,并且公布了记录——包括用于核验阈值的四个外部来源,以及实际审计中发现、并由 v1.1 解决的八项规范歧义。
- 机器可读。
rubric/v1.1.json中包含稳定的检查 ID,另有schema/report.v2.json,让不同实现的结果能够相互比较。
你可以在自己的技术栈中实现它,对某项权重提出异议,或提交评分标准提案。这是我们最希望大家贡献的主要方向。 提案如何成为新版本、由谁决定,以及我们为何不出售认证、也不为标准席位付费:评分标准治理。
权重背后的研究
这些权重有明确倾向,但并非凭空捏造。以下两项研究发现对权重的影响最大:
- Aggarwal 等人,GEO:生成式引擎优化,KDD 2024 —
在模拟引擎中,逐个改写来源以引用资料、添加统计数据或引用专家,可使该来源在答案中的占比最高提升约 40%(按位置调整后的词数计算,而非引用次数)。
论文还发现,权威的语气并未带来显著改善,因此本评分标准评估结构和归因,而非语气。这种提升无法直接推广:当所有来源同时改写时,排名第一的来源可见度下降了 20 到 30%(§5.2,表 2);而一项衡量引用排名的后续基准测试发现,大多数已发布方法都未带来显著提升
(C-SEO Bench,arXiv 2506.11097 §6.2)。详情见证据表中的
p2.sourced-stats行(rubric/evidence-v1.1.md)。 - llms.txt 提案,Answer.AI — 本评分标准在「易于理解」维度中检查的惯例(
p1.llms-txt)。
每项检查都会说明其权重依据(已发表的研究、供应商自身的文档、我们的实地观察,或尚无引擎确认采用的惯例),并列出来源及最近验证日期:rubric/evidence-v1.1.md。对于证据较薄弱的项目(p2.answer-passages、p2.question-intent、p1.llms-txt),表格也会如实说明。如果你有证据表明某项权重不合理,提交评分标准提案——这是我们最希望大家贡献的内容。
相关工具
特意说明本项目不是什么,以便你做出合适的选择:
| 项目 | 功能 | 关系 |
|---|---|---|
| llms-txt | llms.txt 规范本身 | AIV 会检查是否符合该规范 |
| yao-geo-skills | 21 项分类的 GEO 技能,以执行为导向 | 互为补充——它们负责生产,本项目负责测量 |
| GEOFlow | 面向企业网站的完整 GEO 运营系统 | 范围大得多;AGPL |
如果你需要的是整改,而不只是评分,那么这些项目与本仓库有部分重叠;本仓库有意不涵盖这部分。
稳定性、隐私与安全
安装选项请参阅快速开始。
- **稳定性:**评分标准和工具分别进行版本管理,报告架构、检查 ID、CLI 标志、退出代码、Action 输入和 MCP 工具都是公开契约。各版本中可能发生的变更:稳定性政策。
- **不收集遥测数据。**geo-score 不会向我们或任何其他人发送数据。第 1 级会获取你指定的网站(遵循其重定向)、其标记和 robots.txt 指向的 URL(
sameAs个人资料、徽标、站点地图),以及 Wikidata 和 Wikipedia 搜索结果;第 2 级和第 3 级只会调用你设置了密钥的 AI 服务商。 - **安全:**每份报告都会将引用自受审计网站的文本标记为数据;MCP 服务的
score_site只会连接到公开地址,密钥绝不会写入文件。威胁模型和报告方式请参阅:安全政策。
**为什么我的分数变动了 4 分?**每次运行最多会抽取 8 个页面,抽样结果会有所变化;使用 1.8.0 同日重新测试时,99% 的网站分数变化在 ±5 以内(REPRODUCIBILITY.md)。要比较变更前后的结果,请使用 --baseline last.json 对相同页面重新评分;该命令还会逐项打印检查的变化(--urls-from last.json 会对这些页面重新评分,但不进行比较)。
**为什么检查项显示 —?**这表示该项未测量,因此不会计入分母,而不是得 0 分。更多解答请参阅:故障排除。README、报告和指南中使用的所有术语,都在术语表中定义;所有标志、退出代码和监视命令,都列在CLI 参考(简体中文)中。
面向开发者
仓库结构
| 路径 | 内容 |
|---|---|
cli/ | geo_score.py(第 1 级:单个文件,无依赖)、geo_watch.py(第 2 级和第 3 级)、它们的测试以及 CLI 参考 |
rubric/ | 评分标准(v1.1 及其 JSON)、各项权重的依据、校准、分档分析和待解问题 |
benchmark/ | 324 个网站的排行榜:结果、每个网站一份原始报告、预注册文件、可复现性和有效性记录 |
docs/ | 排行榜的 GitHub Pages 版本、llms.txt 以及本页顶部的徽章 |
guide/ | MCP 配置、故障排除、术语表、监视方法、稳定性政策、两个公开示例,以及如何检查 ChatGPT 是否能读取网站 |
reference/ | 各项检查所依据的背景资料:已知的 AI 爬虫,以及各平台采用的数据来源 |
schema/ | 报告、差异、错误和监视文件的 JSON Schema |
examples/ | 示例报告、已发布的人工审计结果和 CI 工作流 |
action.yml、action/ | GitHub Action |
SKILL.md、.claude-plugin/、gemini-extension.json、mcpb/、server.json、Dockerfile | 面向 Claude Code、Gemini CLI、MCP 客户端、MCP 注册表和 Docker 的打包文件。它们保留在顶层,因为安装程序会在此处查找 |
scripts/ | 仓库的检查(scripts/check.sh 会运行全部检查)以及发布脚本 |
.github/ | 贡献指南、支持、安全、行为准则、发布流程、问题表单和 CI 工作流 |
AGENTS.md | 面向编码 Agent 的仓库导览(CLAUDE.md 指向此文件) |
测试与门禁
bash scripts/check.sh # the gate, offline: structure, lint, every test suite, the Action, packaging
bash scripts/check.sh --live # before a release: also example.com and the MCP Inspector
scripts/check.sh 是 CI:只有通过检查,改动才能合并。它执行的规则以及每条规则对应的检查,列在 AGENTS.md 中。本页上的若干数据也属于检查范围:当某项数据与其引用的数据不再一致时,门禁就会失败。
贡献
最有价值的贡献是提供有关权重的证据。 请参阅贡献指南。无论是评分有误、排行榜条目存在争议,还是工具无法运行,都请通过获取帮助联系我们。
许可证、引用与维护者
许可证
引用
如果你在研究或报告中引用这套评分标准,请参阅 CITATION.cff。
维护者
由深圳的 Jianrun Tech(见润科技)打造并维护。我们为中国及海外的企业开展 GEO 和 AI 采用计划,服务对象包括 B2B 出口商、软件公司、专业服务机构、本地企业、教育机构,以及出海企业(包括跨境电商)。这套评分标准源自客户项目和我们对自有产品的优化;我们发布它,是希望 AI 可见度能够得到一致的衡量,包括那些最终不会成为我们客户的人。
根据 MIT 许可证,本仓库的商业用途不受限制,包括用于收费咨询工作。你无需获得我们的许可,也不存在单独的商业许可证。
文档
| 文档 | 英文 | 中文 |
|---|---|---|
| 本 README | README.md | 简体中文 |
| 评分标准,v1.1 | rubric/v1.1.md | 简体中文 |
| 各项权重的依据 | rubric/evidence-v1.1.md | 简体中文 |
| 评分标准治理 | rubric/governance.md | 简体中文 |
| CLI 参考 | cli/README.md | 简体中文 |
| 各客户端的 MCP 设置 | guide/mcp.md | 简体中文 |
| 故障排除 | guide/troubleshooting.md | 简体中文 |
| 术语表 | guide/glossary.md | 简体中文 |
| 监测方法 | guide/watch-methodology.md | 简体中文 |
| 更新日志 | CHANGELOG.md | 简体中文 |
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。



