# Geo

> 完整的 GEO（生成式引擎优化）服务流水线：给一个产品官网 URL 和介绍材料， 做站点诊断与 AI 答案采样、生成带验收标准的执行工单、产出可直接部署的资产 （llms.txt / JSON-LD / 定义块 / FAQ / 内容大纲与初稿）、自动验收工单是否闭环、 并打包成可直接发给客户的交付物。可按周期复跑，做长期 GEO 运营与月报。 国内和海外双市场并行：国内覆盖 智谱GLM/豆包/DeepSeek/Kimi/MiniMax/纳米AI/百度AI， 海外覆盖 Gemini/ChatGPT/Claude/Grok/Perplexity，问题库与指标按市场分开算。 当用户说「做 GEO」「生成式引擎优化」「让 AI 推荐我的产品」「AI 搜索里搜不到我们」 「GEO 方案/诊断/监测/月报/交付」「给客户做 GEO 服务」，或给一个产品网址要做 AI 可见性优化时使用。GEO 指生成式引擎优化，不是地理信息； 不用于传统 SEO 关键词排名、竞价投放或建站。

- Skill: `aigclink/geo` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add aigclink/geo`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aigclink/geo/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: aigclink (https://skillmd.com/u/aigclink)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aigclink/geo

---


# GEO 全流程服务

从**诊断**到**交付**的完整链路，不只是给建议：

```
抓取 → 体检 → AI答案采样 → 生成工单 → 产出资产 → 报告 → 自动验收 → 客户交付包
```

核心判断只有一句：**GEO 的终点不是排名，是 AI 答案里那句话是不是按你的口径说的。**
所以最小单位不是页面，是**可被抽取的事实块**。

项目目录：`/Users/brucejan/geo`，每个客户/产品一个 `work/<slug>/`。

---

## 最快的用法：给一个网址

```bash
python3 scripts/geo.py new --url https://example.com --market both
```

九步全自动：建项目 → 抓官网 → 体检 → **自动推导品牌事实/竞品/问题库** →
重跑体检 → AI 答案采样 → 工单与建设蓝图 → 资产与报告 → 三份交付物。

产出 `work/<slug>/deliverables/`：

| 文件 | 回答什么 |
|---|---|
| `1-GEO诊断报告.html` | 现在什么样 |
| `2-GEO优化方案.html` | 应该改成什么样、为什么 |
| `3-GEO执行方案.html` | 谁在什么时候做什么、做到什么算完成 |

**自动推导出来的品牌事实必须人工复核**——`bootstrap` 只从官网正文抽取，
抽不到的一律标「待确认」，绝不用常识填充。标了「待确认」的字段
（成立时间、工商主体、可具名客户等）需要你补齐或明确不对外说。

## 两种用法

### 界面（推荐）

```bash
python3 scripts/geo.py ui        # 默认 http://127.0.0.1:8765（前台运行）
./scripts/service.sh install     # 或注册为 macOS 常驻服务：登录自启、崩溃自动拉起，
                                 # 关终端不停；周期复跑因此能按时触发。uninstall 卸载
```

**全流程都在界面上**，不用记命令：新建项目、编辑配置与问题库、写事实卡、
一键跑任意步骤或整个周期（带实时日志）、改工单状态、看资产、导入人工采样表、打开交付包。

界面为暗色四段主线（AtlasGEO）：**现状**（总览 / 引擎表现 / 竞品对比 / 问题库）→ **诊断**（差距诊断 / 阵地地图 / 品牌事实库）→ **提升**（行动计划 / 内容工作台）→ **成效**（效果验收 / 报告与交付），外加设置与三步接入引导。统一口径：GEO 健康分（五项加权，未测项权重归一）、提及率、引用份额、阵地、任务、内容。总览标题是由数据自动生成的一句结论；所有数字来自同一份采样，算不出的显示「未测」，不编数。
任务在后台子进程跑，关掉页面也会继续；同一项目同时只允许一个任务，避免抢同一份 audit.json。

只用标准库起服务，前端零外部依赖，断网可用。

### 命令行

```bash
python3 scripts/geo.py serve --slug <项目>
```

抓取 → 体检 → 采样 → 工单 → 资产 → 报告 → 验收上期 → 打包交付，全做完。
产出在 `work/<slug>/delivery/<日期>/`，可直接发客户。

首次接一个新客户走下面的步骤 0–2 做好底座，之后每期只跑这一条。

---

## 先读什么

- **每次必读**：`references/method.md`（评分口径和所有判据的出处，脚本就是它的代码实现）
- **排外部信源优先级时必读**：`references/cn-source-ranking.md`
  （CN-GEO 187,818 条引用实算榜。**官网只占 1.37%**，这个数字会改变资源分配）
- 打国内平台：`references/cn-platforms.md` ｜ 打海外：`references/global-platforms.md`
- 写内容/改页面：`references/content-patterns.md`
- 更深方法或原始数据：`references/sources.md`（含 GEORank / GEOFlow 选型说明）

不要凭经验给 GEO 建议。**每条建议都要能追到 `method.md` 里的某条实测数字**，
说不出依据的别写进方案。

---

## 步骤 0 · 建项目

```bash
python3 scripts/geo.py init --url <产品官网> --name <品牌名> --market both
```

`--market` 取 `cn` / `global` / `both`。

**双市场不是"顺带也做海外"**，是两套并行的战场——问题库、内容、竞品清单、指标全部分开。
纪律见 `global-platforms.md` 第 5 节。

## 步骤 1 · 吃透产品，建事实底座

读官网 + 用户给的材料（PDF/PPT/文档/公众号文章都行），补全 `geo.json`：

- `brand`：规范名、**别名和常见错写**（品牌消歧的地基）、产品线、行业、目标用户、业务目标
- `competitors`：3–6 个真实竞品，带别名。**首期可以留空**——先跑一轮"推荐类"问题的采样，
  从 AI 答案里反推真实竞争集，比主观拍脑袋准得多。双市场时国内外竞品通常不是同一批，都要列全
  （排名指标是相对这个清单算的，漏掉真实对手会**高估**名次）

同时写 `work/<slug>/content/facts.md` 品牌事实卡，模板见 `content-patterns.md` 第 1 节。
**每条事实标证据等级 A–E，没来源的标"待确认"，不许编。**
这份文件是后面所有资产生成的输入——`llms.txt`、JSON-LD、定义块都从它来。

材料不够就直接问用户要，别猜产品能力和价格。

## 步骤 2 · 建问题库

问题库决定采样什么、写什么内容、怎么算指标。按七组各出 3–6 题：
推荐 / 比较 / 替代 / 价格 / 风险 / 品牌验证 / 场景。

**每题必须标 `market`**，脚本据此路由——中文题不会打到 Perplexity，英文题不会打到豆包：

```json
{"id": "q001", "group": "推荐", "market": "cn",     "text": "国内做私域运营的 SaaS 有哪些好用的？"}
{"id": "q101", "group": "推荐", "market": "global", "text": "What's the best CRM for small B2B teams in 2026?"}
{"id": "q900", "group": "品牌验证", "market": "both", "text": "<品牌> 是家什么公司？"}
```

- `cn`：中文口语问法，不要翻译腔 ｜ `global`：**英文原生问法**，不是机翻
- `both` 只留给品牌验证类。注意这类问题**点名了品牌**，答案必然复述品牌名，
  脚本会把它们单独归入「品牌认知」，不混进可见性指标

---

## 无自有网站的项目（电商商品、线下品牌、小程序…）

没有官网也能做 GEO——AI 可见性本来就主要靠外部阵地，官网只占国内引用的 1.37%：

```bash
python3 scripts/geo.py init --no-site --name "商品名" --materials 介绍材料.md --market cn
```

材料文本取代官网正文成为推导底座（不给 `--materials` 会生成模板让你填）。
差异只有三处：抓取/体检自动跳过（技术层不适用）、llms.txt 与 JSON-LD 不产出
（需挂自有域名）、**引用官网率显示「不适用」而不是 0**。采样、竞品、阵地地图、
问题库、内容工作台、发布、验收、交付全部照常。

## 每期循环（`serve` 自动做完，这里说明每步在干什么）

### 抓取 + 体检

按六维打分：可抓取性 / 长度 / 结构 / **可抽取块** / 权威信号 / 对题性。
`audit.json` 的 `layers` 字段按「访问 → 定向 → 理解 → 可引用」四层给出修复顺序：
每层依赖上一层，**先修失败的最上游层**（详见 method.md 四层依赖模型）。
读结果时先看五件事：

1. **`layers` 里最上游的 fail 层**——访问层失败时，下游的一切优化在引擎侧不可见
2. **SPA 空壳页**（`word_count` 接近 0）——国内官网最常见致命伤，AI 抓取器看到的是空白
3. **robots / WAF 有没有拦 AI 抓取器**——`ai_bots_blocked` 是 robots 封禁（含通配符组），
   `ai_ua_blocked` 是换 AI 爬虫 UA 实测被 WAF/CDN 拒绝（浏览器里看不出来的那种）
4. **`language_coverage` 中英是否对等**——做海外却没英文原生页直接 P0
5. **`block_gap` 缺得最多的块**——内容工程第一优先级

### AI 答案采样

| 市场 | 平台 | 变量 | 说明 |
|---|---|---|---|
| 国内 | 智谱GLM | `ZHIPUAI_API_KEY` | OpenAI 兼容端点，不联网 |
| 国内 | 豆包 | `ARK_API_KEY` | 火山方舟；**联网要在控制台单独开通内容插件**，没开通自动降级 |
| 国内 | DeepSeek | `DEEPSEEK_API_KEY` | 不联网，测模型参数化知识里的品牌认知 |
| 国内 | Kimi | `MOONSHOT_API_KEY` | 默认不联网 |
| 国内 | MiniMax | `MINIMAX_API_KEY` | OpenAI 兼容端点，不联网 |
| 海外 | Gemini | `GEMINI_API_KEY` | OpenAI 兼容端点，不带 grounding |
| 海外 | OpenAI(ChatGPT) | `OPENAI_API_KEY` | Chat Completions 默认不联网 |
| 海外 | Claude | `ANTHROPIC_API_KEY` | Anthropic 原生协议，不联网 |
| 海外 | Grok | `XAI_API_KEY` | xAI API，不联网 |
| 海外 | Perplexity | `PERPLEXITY_API_KEY` | 原生联网并返回 citations，海外证据质量最好 |

Key 放项目根目录 `.env`（已 gitignore，权限 600），脚本自动加载。

没有公开联网 API 的——国内纳米AI搜索/百度AI/豆包 App，海外 ChatGPT 网页版/
Claude 网页版/Google AI Overviews——走人工或浏览器采样：

```bash
python3 scripts/geo.py sample-sheet --slug <项目>                    # 全量采样表
python3 scripts/geo.py sample-sheet --slug <项目> --intent buyer --limit 20   # 每周买家题轻量核查
python3 scripts/geo.py sample-import --slug <项目> --file <采样表>
```

更快的路径是配套的 **Chrome 采样助手插件**（`extension/`，README 有安装说明）：
侧栏载入周检队列 → 填入问题 → 一键提取答案与引用 → 回传看板自动入库。
手动模式回车由人按（零合规风险，交付给客户用这个）；「自动跑队列」需显式开启，
会代你发送，仅限自己账号小批量、人在场、撞验证码即停——README 里写明了风险边界。
数据只进本机 127.0.0.1，无后台采集、无遥测。

**意图分组**贯穿三处：问题库页每组一张卡（该组提及率、失守题数、无内容题数），点卡片筛选；
插件按分组挑队列并分节排列；周检表 `--intent buyer` 取的也是同一批组。
分三类看——**买家意图**（推荐/比较/替代/价格，离成交最近，优先补）、
**需求教育**（场景/风险）、**探测**（品牌验证，点名题不计入提及率）。

采样进来后到看板 **样本库**（现状 → 样本库）复核：机器判读是正则，品牌名撞词、
否定语境、竞品别名都可能误判。逐条纠正提及/位次/竞品，改完立刻重算当日指标，
纠正过的样本打 `manual_override`，重跑不会覆盖人工结论。

**口径纪律**（详见 `method.md` 第 4 节）：

- **国内 ≠ 海外**，跨市场平均提及率没有解释力，报告里各占一张表
- API ≠ 网页端，Web ≠ App（**千问 web 与 App 信源只有 24.5% 重合**），单独记单独算
- 没有答案原文/截图/采样环境记录的，**不许标成"真实采样"**
- 归因默认写"观察相关"，除非有基线窗口 + 对照 Prompt + 竞品对照
- 采样频率克制，遵守平台服务条款，不批量滥采、不模拟登录

### 生成工单 `plan`

诊断结果 → `tasks.json`，这是执行状态的**单一真相源**。每条工单必须有：
依据（追到 `method.md` 哪一条）、负责角色、工作量、时间窗口、**验收标准**、市场。

七个工作包：实体消歧 / 页面技术 / 内容矩阵 / 标题体系 / 知识库 / 外部证据 / 监测闭环。

优先级顺序（`method.md` 第 6 节）：
门票问题 → 事实错误 → 抽取块缺口 → 高价值问题无承接 → **外部信源（P1，不是 P2）** → 长尾扩量。

> 外部信源是 P1 不是 P2，因为**官网只占全库引用 1.37%**。
> 官网是事实源不是引用源，把它从 60 分做到 90 分的边际收益，远低于拿下一个榜单站词条。

### 产出资产 `generate`

到 `work/<slug>/assets/`，中英分开：

| 产物 | 说明 |
|---|---|
| `llms.txt` / `llms.en.txt` | 官方事实索引，直接传网站根目录 |
| `jsonld/*.json` | Organization / SoftwareApplication / FAQPage / Article / BreadcrumbList，贴进 `<head>` |
| `snippets/definition.*.html` | 定义块，放首屏口号下方（口号保留，不影响转化） |
| `snippets/faq.*.html` | FAQ 块，**答案必须在静态 HTML 里可见**，不要纯 JS 折叠 |
| `outlines/*.md` | 每个目标问题一份内容大纲（含标题候选、章节骨架、字数与抽取块要求） |
| `drafts/*.md` | 加 `--draft` 时调用已配 LLM 出全文初稿 |

**分工**：结构性资产由代码确定性生成（不会漏 schema 字段）；**文章正文由你按 outline 写**——
代码写不出好文案。`--draft` 的初稿**必须人工核实事实后才能发布**。

### 自动验收 `verify`

重抓站点 → 跑 checker → 回写工单状态。**这是"服务"和"建议"的分界线**：
能自动验收的，就不靠人口头说做完了。做完会翻成 `done`，回归了会翻回 `todo`。

无法程序判定的（如百科词条是否过审）标「待人工」，确认后手动标记：

```bash
python3 scripts/geo.py task --slug <项目> --id T-003 --status done --note "词条已上线"
python3 scripts/geo.py status --slug <项目>     # 进度看板
```

### 客户交付 `deliver`

打包到 `work/<slug>/delivery/<日期>/`：总览 index、诊断报告、执行方案、
工单表（HTML + CSV 可导进项目管理工具）、验收表、assets 目录、交付说明。

跑完之后你要做的事（脚本做不了的部分）：

1. 读 `reports/latest.md` 看 delta：均分涨跌、提及率变化、新出现的 P0
2. **看「AI 实际引用的信源域名 Top」和「与全国大盘对照」**——这是当期真实的分发地图，
   用它修正外部信源计划
3. 检查采样答案里有没有**事实错误**（品牌说错、张冠李戴、价格错、**归错行业**）→ 立刻 P0
4. 按 `outlines/` 写内容，按 `plan.md` 更新进度

建议节奏：**页面体检每周，答案采样每两周或每月**（采样有成本，指标本身有噪声，跑太密看不出信号）。

---

## 全部命令

| 命令 | 作用 |
|---|---|
| `new` | **★ 只给一个网址，全自动出三份交付物** |
| `autopilot` | 对已建好的项目跑完整引导流程 |
| `bootstrap` | 从官网正文推导品牌事实、竞品、问题库 |
| `deliverables` | 出三份正式交付物（诊断/优化/执行） |
| `init` | 只建项目骨架，不跑流程 |
| `crawl` / `audit` | 抓站 / 六维体检 |
| `sample` / `sample-sheet` / `sample-import` | API 采样 / 导出人工采样表 / 回灌 |
| `expand` | 拓词：百度下拉/Google 补全扩出真实需求候选题（`--no-llm` 用模板转写） |
| `plan` | 诊断结果 → 带验收标准的工单 |
| `generate` | 产出可部署资产（`--draft` 加 LLM 初稿） |
| `report` | Markdown + 自包含 HTML 报告，含 delta 与大盘对照 |
| `verify` | 重抓并自动验收工单（`--no-recrawl` 用现有结果） |
| `task` / `status` | 单条工单状态 / 项目看板 |
| `deliver` | 打包客户交付物 |
| `ui` | **全流程界面**：新建项目、配置、问题库、事实卡、一键运行、工单、资产、交付 |
| `serve` | **全流程一条命令** |
| `cycle` | 轻量循环（抓取→体检→采样→报告，不含工单与交付） |
| `list` | 所有项目 |

## 排期自动执行

用 `schedule` skill 建定时任务：

> 每周一早上跑 `python3 /Users/brucejan/geo/scripts/geo.py serve --slug <项目>`，
> 然后读 `work/<项目>/reports/latest.md`，如果出现新的 P0、提及率下降超过 10 个百分点，
> 或有工单从 done 回归成 todo，就告诉我。

---

## 边界

**做**：GEO 诊断、方案、工单、内容工程、资产生成、AI 答案监测、验收闭环、客户交付包。

**不做**：
- 传统 SEO 关键词排名、外链买卖、竞价投放
- 建站/改站的实际代码实施（给方案、给可直接用的片段，落地由客户开发做）
- 绕过平台限制的批量采集、模拟登录、刷量
- 编造品牌事实、客户案例、价格或资质——**查不到就标"待确认"，问用户**

**不承诺**任何平台一定会引用某个页面。GEO 提高的是概率，不是保证。
给客户写方案时这句话必须原样写进去。

---

## 目录

```text
/Users/brucejan/geo/
├── SKILL.md
├── references/
│   ├── method.md              评分口径与全部判据出处
│   ├── cn-source-ranking.md   国内信源实测榜（CN-GEO 实算，含复算脚本）
│   ├── cn-platforms.md        国内平台适配
│   ├── global-platforms.md    海外平台适配
│   ├── content-patterns.md    可抽取内容模板
│   └── sources.md             资料索引（含 GEORank / GEOFlow 选型）
├── scripts/
│   ├── geo.py       CLI 总入口
│   ├── crawl.py     抓站      audit.py     六维体检
│   ├── sample.py    多平台采样  benchmark.py 与全国大盘对照
│   ├── tasks.py     工单系统    generate.py  资产生成
│   ├── verify.py    自动验收    deliver.py   客户交付包
│   ├── bootstrap.py 自动推导底座  deliverables.py 三份交付物
│   ├── blueprint.py 建设地图
│   ├── dashboard.py 界面后端    ui.html      前端工作台
│   ├── jobs.py      后台任务（子进程 + 实时日志）
│   └── report.py    报告渲染    geolib.py    共用工具
└── work/<slug>/
    ├── geo.json        品牌、竞品、问题库、平台、目标
    ├── content/facts.md 品牌事实卡（所有资产的输入）
    ├── evidence/       抓取快照      audit.json  体检结果
    ├── samples/        采样原始答案   metrics/    每期指标
    ├── tasks.json      工单（执行状态单一真相源）
    ├── assets/         可部署资产
    ├── reports/        每期报告 + latest.md
    ├── verify/         每期验收结果
    ├── delivery/<日期>/ 客户交付包
    ├── history/        历史基线（算 delta）
    └── plan.md         30/60/90 方案
```

