---
slug: "geo-audit-skill"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/zilisrikle/geo-audit-skill@master/README.md"
repo: "https://github.com/zilisrikle/geo-audit-skill"
source_file: "README.md"
branch: "master"
---
<div align="center">

# geo-audit-skill

**让 AI 搜索引擎主动引用你的内容**
**Get cited — not just ranked — by ChatGPT, Perplexity & Google AI Overviews**

6 个专家智能体 · 6 个 Python 脚本 · 零依赖 · 普林斯顿 GEO 研究驱动
6 specialist agents · 6 Python scripts · zero deps · powered by Princeton GEO research

[![Python 3.9+](https://img.shields.io/badge/Python-3.9+-blue.svg)](https://www.python.org/)
[![Claude Code](https://img.shields.io/badge/Claude_Code-compatible-blueviolet.svg)](https://claude.ai/code)
[![Zero Dependencies](https://img.shields.io/badge/dependencies-stdlib_only-brightgreen.svg)](#requirements)
[![Agents](https://img.shields.io/badge/agents-6_specialists-orange.svg)](#agent-team)
[![Non-Commercial](https://img.shields.io/badge/license-PolyForm_NC_1.0-red.svg)](LICENSE)

[English](#english) · [中文](#中文)

</div>

---

<a name="english"></a>

## Why GEO?

> **SEO gets you ranked. GEO gets you *cited*.**

When someone asks ChatGPT "what's the best tool for X?" — does your brand get mentioned? That's a GEO question, not an SEO one. Classic SEO tools can't answer it.

`geo-audit-skill` is a Claude Code multi-agent framework that audits **both** worlds — so the same page that ranks on Google also gets quoted by ChatGPT, Perplexity, Google AI Overviews, and Claude.

---

## Why this tool, not another?

Most GEO tools swap "keyword density" for "AI optimization" and call it done. Four things make this different:

**1. The only skill that covers SEO + GEO in one workflow.**
6 specialist agents coordinate from crawl audit to content rewrite to schema deployment. Nothing else bridges both.

**2. Scripts measure facts. LLM judges meaning. Never the other way around.**
Every objective check (crawler permissions, schema fields, page structure) runs as a standalone Python script first. The agent only applies semantic judgment to fields explicitly marked `llm_review_required: true`. This kills hallucination on measurable data — the core failure mode of every pure-LLM audit tool.

**3. Offensive, not just defensive.**
The `question-miner` agent finds where AI engines answer poorly, scores each gap by `Specificity × Gap × Brand Fit`, and maps them to content angles your brand can own. Not "here's your score" — here's your attack plan.

**4. Zero dependencies. Seriously.**
Pure Python stdlib. `git clone` → run. No pip, no Docker, no API keys required for the core checks.

---

## 60-Second Start

```bash
git clone https://github.com/zilisrikle/geo-audit-skill
cd geo-audit-skill

# Score your page's AI citability (0–30)
python3 scripts/check-geo.py https://yoursite.com/blog/post --verbose

# Check whether AI crawlers can reach you (15 bots incl. GPTBot, ClaudeBot, PerplexityBot)
python3 scripts/check-site.py https://yoursite.com
```

Or drop into Claude Code and just say:

```
geo audit: https://yoursite.com
mine questions: https://yoursite.com
generate schema for: https://yoursite.com/blog/post
```

---

## What You're Missing Without GEO

| Capability | Classic SEO tools | geo-audit-skill |
|------------|---|---|
| Title / meta / H1 / canonical | yes | yes |
| Schema validation | yes | yes |
| Core Web Vitals | yes | yes |
| robots.txt + sitemap | yes | yes |
| **AI crawler access check (15 bots)** | — | **yes** |
| **llms.txt validation** | — | **yes** |
| **AI citability score (0–30)** | — | **yes** |
| **Question-gap mining (Reddit / Quora / competitor FAQs)** | — | **yes** |
| **AI-extractable content engineering (CITE framework)** | — | **yes** |
| **FAQPage / HowTo schema auto-generation** | — | **yes** |

---

## GEO Citability Score — 0 to 30

Based on Princeton's GEO research. Six dimensions, five points each:

| | Dimension | What it measures |
|---|---|---|
| **DA** | Direct Answer | Section openers are standalone extractable sentences |
| **DD** | Data Density | Specific numbers, durations, study results |
| **AS** | Authority Signals | Named researchers, institutions, DOIs |
| **SQ** | Structure Quality | Heading hierarchy, FAQ, lists, comparison tables |
| **FR** | Freshness | datePublished, dateModified, visible dates |
| **UQ** | Uniqueness | Proprietary data, original frameworks |

**Grade:** A (27–30) · B (22–26) · C (17–21) · D (12–16) · F (<12)

---

## Architecture

```
                    ┌──────────────────────────────┐
                    │  Orchestrator (CLAUDE.md)     │
                    │  Routes tasks to agents       │
                    └──────────────┬───────────────┘
                                   │
          ┌──────────┬─────────────┼─────────────┬──────────┐
          │          │             │             │          │
   ┌──────▼──┐ ┌─────▼──────┐ ┌───▼──────┐ ┌───▼──────────┐ │
   │   seo   │ │    geo     │ │ question │ │   content    │ │
   │ auditor │ │  auditor   │ │  miner   │ │  engineer    │ │
   └──────┬──┘ └─────┬──────┘ └───┬──────┘ └───┬──────────┘ │
          │          │             │             │            │
          └──────────┴──────┬──────┴─────────────┘            │
                            │                                  │
               ┌────────────▼──────────────┐                  │
               │  schema-architect         ◄──────────────────┘
               │  code-reviewer            │
               └────────────┬──────────────┘
                            │
               ┌────────────▼──────────────┐
               │  Python scripts (stdlib)  │
               └───────────────────────────┘
```

### Agent Team

| Agent | Role |
|-------|------|
| `seo-auditor` | On-page SEO, technical SEO, E-E-A-T, Evidence/Impact/Fix reports |
| `geo-auditor` | AI visibility, 6-dimension citability scoring, AI crawler audit |
| `question-miner` | Question-gap analysis across Reddit/Quora/competitor FAQs |
| `content-engineer` | GEO-optimized content using the CITE framework |
| `schema-architect` | JSON-LD generation for HowTo, FAQPage, Article, Organization |
| `code-reviewer` | Quality gate for every content and markup change |

### Python Scripts (stdlib only)

| Script | Checks |
|--------|--------|
| `check-site.py` | robots.txt · sitemap · **AI crawler access (15 bots)** · llms.txt |
| `check-page.py` | title · meta · H1 · canonical · GEO structure signals |
| `check-schema.py` | JSON-LD for every Schema.org type incl. FAQPage/HowTo |
| `check-pagespeed.py` | Google PageSpeed Insights API v5 (mobile + desktop) |
| `check-geo.py` | 0–30 citability score across 6 dimensions |
| `fetch-page.py` | Raw HTML, redirect chain, Googlebot/browser diff, SSRF-protected |

Scripts are deterministic — agents read script output before any semantic analysis, preventing hallucination on objective measurements.

---

## Workflow Chains

```
SEO audit     /seo-audit <url>  →  scripts  →  Evidence/Impact/Fix

GEO audit     /geo-audit <url>  →  citability score  →  content-engineer
              →  schema-architect (FAQPage/HowTo)  →  code-reviewer

Question gap  question-miner (60–100 Qs)  →  score  →  content  →  FAQPage

Full sprint   seo + geo  →  P0/P1/P2  →  content + schema  →  review
```

---

## Requirements

- [Claude Code](https://claude.ai/code) (`claude` CLI)
- Python 3.9+
- No Python dependencies — stdlib only
- Optional: Google PageSpeed API key (higher rate limits)

---

## Known Limitations

**WAF-protected sites (Cloudflare Managed Challenge, etc.)**

Enterprise sites that deploy strict WAF rules (e.g. Cloudflare Managed Challenge) block script-based HTTP clients, including `urllib`. When `check-site.py` encounters a WAF challenge, it will:

- Return `"waf_blocked": true` in the JSON output
- Mark `robots` and `sitemap` results as unreliable with an explanatory note
- **Not** silently report "robots.txt not found" when the file may actually exist

To audit a WAF-protected site, verify `robots.txt` and `sitemap.xml` manually in your browser, or with a verified crawler user-agent. `check-geo.py` is similarly affected — content-level scores may be unavailable if the page itself is challenge-gated.

**macOS VPN / split-tunnel routing (198.18.0.0/15)**

On macOS, some VPNs and system proxies resolve all DNS through a local relay that maps external domains to `198.18.x.x` (RFC 2544 benchmark range). Python's `ipaddress` module classifies this range as private, which previously caused the SSRF guard to reject legitimate public domains. This is fixed as of this version — the guard now explicitly enumerates RFC 1918 blocks rather than relying on `is_private`.

---

## Contributing · Roadmap · Star

- **[CONTRIBUTING.md](https://github.com/zilisrikle/geo-audit-skill/blob/HEAD/CONTRIBUTING.md)** — how to report bugs, add AI crawlers, tune agents, submit PRs. Everyone who's typed `check-geo.py` on a real site has useful data to share.
- **[ROADMAP.md](https://github.com/zilisrikle/geo-audit-skill/blob/HEAD/ROADMAP.md)** — what's shipped, what's next, what we're **not** building. Upvote the issue you want most.
- **Star the repo** if it helps — it's the clearest signal that GEO tooling in the open is worth maintaining.

Issues and PRs welcome. Let's push GEO open tooling forward together.

---

## License — Non-Commercial

Released under the **PolyForm Noncommercial License 1.0.0**. Free for personal, internal, educational, and research use. **Commercial use — including repackaging this project into a paid SaaS or reselling it as a service — is not permitted.** See [LICENSE](https://github.com/zilisrikle/geo-audit-skill/tree/HEAD/LICENSE).

---

<a name="中文"></a>

<div align="center">

## 中文

</div>

> **传统 SEO 让你被搜到。GEO 让 AI 主动引用你。**

当有人在 ChatGPT 里问"X 领域最好的工具是什么？"——你的品牌会被提到吗？这是 GEO 问题，不是 SEO 问题。传统 SEO 工具答不了。

`geo-audit-skill` 是一个 Claude Code 多智能体框架，把**传统 SEO** 与 **GEO**（生成式引擎优化）合二为一。让同一份内容既能在 Google 上排名，又能被 ChatGPT、Perplexity、Google AI 概述、Claude 主动引用。

---

### 为什么选这个，而不是别的？

大多数 GEO 工具不过是把"关键词密度"换了个叫法。四个真实的差异：

**1. 唯一同时覆盖 SEO + GEO 的 Claude Code 技能。**
6 个专用 Agent 协同，从爬虫审计到内容改写到 Schema 部署，全链路闭环。没有其他工具打通这两个世界。

**2. 脚本测事实，LLM 做判断，顺序不能反。**
所有客观指标（爬虫权限、Schema 字段、页面结构）先由独立 Python 脚本测量，Agent 只处理标记为 `llm_review_required: true` 的语义字段。从根本上杜绝 LLM 对可测量数据产生幻觉——这是所有纯 LLM 审计工具的通病。

**3. 进攻，而不只是防守。**
`question-miner` 主动探测 AI 引擎在哪些问题上回答得差，按「具体性 × 缺口度 × 品牌契合度」评分，直接给出你能抢占的内容真空区。不是"这是你的分数"——而是"这是你的进攻路线图"。

**4. 零依赖，认真的。**
纯 Python 标准库。`git clone` 即跑。核心功能不需要 pip、Docker、也不需要 API Key。

---

### 60 秒上手

```bash
git clone https://github.com/zilisrikle/geo-audit-skill
cd geo-audit-skill

# 给你的页面打一个 AI 可引用性分数（0–30）
python3 scripts/check-geo.py https://你的站点.com/blog/post --verbose

# 检测 AI 爬虫能不能访问你（15 个爬虫：GPTBot、ClaudeBot、PerplexityBot……）
python3 scripts/check-site.py https://你的站点.com
```

在 Claude Code 里直接说：

```
geo audit: https://你的站点.com
mine questions: https://你的站点.com
generate schema for: https://你的站点.com/blog/post
```

---

### SEO vs GEO — 你漏了什么

| 能力 | 传统 SEO 工具 | geo-audit-skill |
|------|---|---|
| 标题 / 描述 / H1 / canonical | 有 | 有 |
| Schema 结构化数据验证 | 有 | 有 |
| Core Web Vitals | 有 | 有 |
| robots.txt + sitemap | 有 | 有 |
| **AI 爬虫访问检测（15 个平台）** | — | **有** |
| **llms.txt 验证** | — | **有** |
| **AI 可引用性评分（0–30）** | — | **有** |
| **问题缺口挖掘（Reddit / Quora / 竞品 FAQ）** | — | **有** |
| **面向 AI 提取的内容工程（CITE 框架）** | — | **有** |
| **FAQPage / HowTo Schema 自动生成** | — | **有** |

---

### GEO 可引用性评分（0–30）

基于普林斯顿 GEO 研究，六个维度各 5 分：

| | 维度 | 测什么 |
|---|---|---|
| **DA** | 直接回答 | 段落首句能否被独立提取为答案 |
| **DD** | 数据密度 | 具体数字、时长、研究结果的密度 |
| **AS** | 权威信号 | 具名研究者、机构、DOI |
| **SQ** | 结构质量 | 标题层级、FAQ、列表、对比表格 |
| **FR** | 内容新鲜度 | datePublished、dateModified、可见日期 |
| **UQ** | 独特性 | 专有数据、原创框架、品牌专属内容 |

**评级：** A（27–30）· B（22–26）· C（17–21）· D（12–16）· F（<12）

---

### AI 爬虫检测

很多网站在不知情的情况下屏蔽了 AI 爬虫，直接导致 ChatGPT / Perplexity 永远抓不到你。`check-site.py` 一次检测 15 个主流 AI 平台：

`GPTBot` · `ClaudeBot` · `PerplexityBot` · `Google-Extended` · `Applebot-Extended` · `Amazonbot` · `Bytespider` · `meta-externalagent` · `CCBot` ……

**任何关键爬虫被屏蔽 → P0 紧急问题，优先修复。**

---

### 智能体团队

| Agent | 职责 |
|-------|------|
| `seo-auditor` | 页面 SEO、技术 SEO、E-E-A-T、证据/影响/修复报告 |
| `geo-auditor` | AI 可见性、6 维可引用性评分、AI 爬虫审计 |
| `question-miner` | Reddit/Quora/竞品 FAQ 问题缺口分析 |
| `content-engineer` | 用 CITE 框架产出面向 AI 提取优化的内容 |
| `schema-architect` | 生成 HowTo、FAQPage、Article、Organization JSON-LD |
| `code-reviewer` | 所有内容和标记变更的质量把关 |

### Python 脚本层（仅标准库）

| 脚本 | 检测内容 |
|------|---------|
| `check-site.py` | robots.txt · sitemap · **AI 爬虫访问（15 个）** · llms.txt |
| `check-page.py` | 标题 · 描述 · H1 · canonical · GEO 结构信号 |
| `check-schema.py` | 所有 Schema.org 类型的 JSON-LD 验证 |
| `check-pagespeed.py` | Google PageSpeed Insights v5（移动端 + 桌面端） |
| `check-geo.py` | 6 维 0–30 可引用性评分 |
| `fetch-page.py` | HTML 抓取 + 重定向链 + Googlebot 对比 + SSRF 防护 |

**设计原则**：脚本做客观测量（不幻觉），LLM 只做语义判断。

---

### 工作流

```
SEO 审计      /seo-audit <url>  →  运行脚本  →  证据/影响/修复报告

GEO 审计      /geo-audit <url>  →  可引用性评分  →  content-engineer
              →  schema-architect（FAQPage/HowTo）  →  code-reviewer

问题缺口      question-miner 挖 60–100 个问题  →  评分  →  内容 + FAQPage

完整冲刺      seo + geo  →  P0/P1/P2  →  内容 + Schema  →  质量审查
```

---

### 环境要求

- [Claude Code](https://claude.ai/code)（`claude` CLI）
- Python 3.9+
- 无外部依赖，仅使用标准库
- 可选：Google PageSpeed API Key（提升速率限制）

---

### 已知限制

**WAF 保护的站点（Cloudflare Managed Challenge 等）**

部署了严格 WAF 规则的企业站点会拦截基于 `urllib` 的脚本客户端。`check-site.py` 遇到 WAF challenge 时会：

- 在 JSON 输出中返回 `"waf_blocked": true`
- 将 `robots` 和 `sitemap` 结果标记为不可靠，并附上说明
- **不会**在 `robots.txt` 可能实际存在的情况下，静默地报告"未找到"

如需审计 WAF 保护的站点，请在浏览器中手动验证 `robots.txt` 和 `sitemap.xml`，或使用经过白名单认证的爬虫 UA。`check-geo.py` 同样受此影响——若页面本身被 challenge 拦截，内容层面的评分将无法获取。

**macOS VPN / 分流路由（198.18.0.0/15）**

在 macOS 上，部分 VPN 和系统代理会将所有 DNS 解析路由到本地中继，把外网域名映射到 `198.18.x.x`（RFC 2544 基准测试地址段）。Python 的 `ipaddress` 模块将该地址段识别为私有地址，导致 SSRF 防护误杀合法的公网域名。此问题已在当前版本修复——防护逻辑现在改为显式枚举 RFC 1918 地址块，不再依赖 `is_private`。

---

### 贡献 · Roadmap · Star 支持

- **[CONTRIBUTING.md](https://github.com/zilisrikle/geo-audit-skill/blob/HEAD/CONTRIBUTING.md)** —— 怎么报 bug、怎么补 AI 爬虫、怎么调 Agent 提示词、怎么提 PR。每一个在真实站点上跑过 `check-geo.py` 的人，都有值得分享的数据。
- **[ROADMAP.md](https://github.com/zilisrikle/geo-audit-skill/blob/HEAD/ROADMAP.md)** —— 已完成 / 进行中 / 计划中 / 探索中，以及**明确不做的事**。想推哪条，就给对应的 Issue 点赞。
- **觉得有用就 Star 一下** —— 这是对"开放 GEO 工具链值得维护"最直接的信号。

欢迎提 Issue 和 PR，一起把 GEO 玩出新高度。

---

### 开源协议 — 禁商用

采用 **PolyForm Noncommercial License 1.0.0**。个人使用、内部使用、学习、研究完全免费。**不允许任何形式的商业用途——包括把本项目打包成付费 SaaS、作为付费服务转售等。** 详见 [LICENSE](https://github.com/zilisrikle/geo-audit-skill/tree/HEAD/LICENSE)。
