# SEO/GEO Audit MCP (`neeenja/seo-geo-audit-mcp`) Actor

URL -> traditional SEO + GEO (generative-engine) visibility audit: a 0-100 score, per-category scores, prioritized findings, and a remediation checklist. Methodology-backed; Cloudflare Search/Agent-vs-Training crawler sweep. Pay-per-event; initialize and tools/list are free.

- **URL**: https://apify.com/neeenja/seo-geo-audit-mcp.md
- **Developed by:** [Neeen Ja](https://apify.com/neeenja) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 mcp audit_url calls

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## seo-geo-audit-mcp

> URL → traditional **SEO** plus **GEO** (Generative Engine Optimization) visibility audit.
> A 0–100 visibility score, per-category scores, prioritized findings (CRITICAL / WARNING / OK),
> and a remediation checklist — called by an AI agent over MCP.

**Current version: 1.0.0**

**Tier:** PanStories / Sartbot portfolio — T1-1 (highest priority).
**Moat:** proprietary methodology extracted from the private `SEO-GEO` skill. Only audit *outputs* are exposed.

🌐 **[English](#english)** · **[简体中文](#简体中文)** · **[繁體中文](#繁體中文)**

***

<a id="english"></a>

## English

### What it does

| Tool | Purpose |
|------|---------|
| `audit_url` | Fast single-page audit (HTTPS, lang, title/meta, canonical→200, viewport, robots+sitemap Content-Type guard, OG, JSON-LD presence). |
| `audit_deep` | Full audit: basic + crawler-access sweep (Cloudflare Search/Agent vs Training classification) + directory/GEO discovery. |
| `get_checklist` | Severity-tagged remediation checklist. |
| `report_issue` | Free feedback loop (false-positive / missing-check reports). |

Every tool returns `structuredContent` (machine JSON) **and** a `content[0].text` human summary.

### Key differentiators

- **GEO + SEO in one pass** — not just traditional on-page SEO.
- **Cloudflare crawler sweep** that distinguishes **Search/Agent** bots (must reach) from **Training** bots
  (a 403 is expected and *not* a bug). Reads `CF-Cache-Status` to defeat cache-masked 200s.
- **SPA-fallback guard** — checks `Content-Type`, not just HTTP status, so a missing `robots.txt`/`sitemap.xml`
  served as `index.html` is correctly flagged.
- **No ranking guarantees, ever** — we audit readiness; we never sell outcomes.

### Quick start (local, zero dependencies)

```bash
node src/stdio-server.mjs
## then send JSON-RPC lines, e.g.:
## {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}
## {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"audit_url","arguments":{"url":"https://example.com"}}}
```

Audit a local HTML file (no network): `arguments:{"url":"./sample.html"}`.

### Tests & gates

```bash
node --test                 # unit + local-fixture audit tests
node scripts/check-p0.mjs   # UI redline gate (emoji/gradient/placeholder/CDN/misleading)
node scripts/showcase.mjs https://example.com   # generates showcase-report.html
```

### Deploy (Apify Pay-Per-Event)

> Requires **your** Apify KYC for Agentic Payments (cannot be delegated).
> `npm i` (hosted deps) → `apify login` → `apify push`. Pricing lives in `.actor/actor.json`.

### Disclaimer

Scores reflect audit signals only and **do not guarantee** search or generative-engine rankings.

### License

Proprietary — source available on request. See [LICENSE](LICENSE).

***

<a id="简体中文"></a>

## 简体中文

### 它做什么

| 工具 | 用途 |
|------|------|
| `audit_url` | 快速单页审计（HTTPS、语言、标题/描述、canonical→200、视口、robots+sitemap 内容类型校验、OG、JSON-LD 存在性）。 |
| `audit_deep` | 完整审计：基础检查 + 爬虫可达性扫描（Cloudflare 搜索/代理机器人 vs 训练机器人分类）+ 目录与 GEO 发现。 |
| `get_checklist` | 按严重度标注的修复清单。 |
| `report_issue` | 免费反馈通道（误报 / 漏检上报）。 |

每个工具都返回 `structuredContent`（机器可读 JSON）**和** `content[0].text` 人工可读摘要。

### 核心差异点

- **GEO + SEO 一次完成** —— 不止传统页面级 SEO。
- **Cloudflare 爬虫扫描**：区分**搜索/代理**机器人（必须可达）与**训练**机器人（返回 403 属正常、并非故障）。读取 `CF-Cache-Status` 以识破被缓存掩盖的 200。
- **SPA 兜底校验**：检查 `Content-Type` 而非仅看 HTTP 状态码，因此把缺失的 `robots.txt`/`sitemap.xml` 当作 `index.html` 返回时能被正确标记。
- **绝不承诺排名** —— 我们审计就绪度，不售卖结果。

### 快速开始（本地、零依赖）

```bash
node src/stdio-server.mjs
## 然后发送 JSON-RPC 行，例如：
## {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}
## {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"audit_url","arguments":{"url":"https://example.com"}}}
```

审计本地 HTML 文件（无需联网）：`arguments:{"url":"./sample.html"}`。

### 测试与质量门

```bash
node --test                 # 单元测试 + 本地样本审计测试
node scripts/check-p0.mjs   # UI 红线门禁（emoji/渐变/占位文案/CDN/误导性表述）
node scripts/showcase.mjs https://example.com   # 生成 showcase-report.html
```

### 部署（Apify 按事件计费）

> 需要**你的** Apify 实名认证（Agentic Payments，无法代为完成）。
> `npm i`（托管依赖）→ `apify login` → `apify push`。计费定义在 `.actor/actor.json`。

### 免责声明

分数仅反映审计信号，**不保证**搜索或生成式引擎的排名。

### 许可证

专有授权 —— 源码按需提供。详见 [LICENSE](LICENSE)。

***

<a id="繁體中文"></a>

## 繁體中文

### 它做什麼

| 工具 | 用途 |
|------|------|
| `audit_url` | 快速單頁審計（HTTPS、語言、標題/描述、canonical→200、視口、robots+sitemap 內容類型校驗、OG、JSON-LD 存在性）。 |
| `audit_deep` | 完整審計：基礎檢查 + 爬蟲可達性掃描（Cloudflare 搜尋/代理機器人 vs 訓練機器人分類）+ 目錄與 GEO 發現。 |
| `get_checklist` | 依嚴重度標註的修復清單。 |
| `report_issue` | 免費回饋通道（誤報 / 漏檢上報）。 |

每個工具都回傳 `structuredContent`（機器可讀 JSON）**與** `content[0].text` 人工可讀摘要。

### 核心差異點

- **GEO + SEO 一次完成** —— 不止傳統頁面級 SEO。
- **Cloudflare 爬蟲掃描**：區分**搜尋/代理**機器人（必須可達）與**訓練**機器人（回傳 403 屬正常、並非故障）。讀取 `CF-Cache-Status` 以識破被快取掩蓋的 200。
- **SPA 兜底校驗**：檢查 `Content-Type` 而非僅看 HTTP 狀態碼，因此把缺失的 `robots.txt`/`sitemap.xml` 當作 `index.html` 回傳時能被正確標記。
- **絕不承諾排名** —— 我們審計就緒度，不販售結果。

### 快速開始（本地、零依賴）

```bash
node src/stdio-server.mjs
## 然後發送 JSON-RPC 行，例如：
## {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}
## {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"audit_url","arguments":{"url":"https://example.com"}}}
```

審計本地 HTML 檔案（無須聯網）：`arguments:{"url":"./sample.html"}`。

### 測試與品質門

```bash
node --test                 # 單元測試 + 本地樣本審計測試
node scripts/check-p0.mjs   # UI 紅線門禁（emoji/漸變/占位文案/CDN/誤導性表述）
node scripts/showcase.mjs https://example.com   # 產生 showcase-report.html
```

### 部署（Apify 按事件計費）

> 需要**你的** Apify 實名認證（Agentic Payments，無法代為完成）。
> `npm i`（託管依賴）→ `apify login` → `apify push`。計費定義在 `.actor/actor.json`。

### 免責聲明

分數僅反映審計訊號，**不保證**搜尋或生成式引擎的排名。

### 授權

專有授權 —— 源碼依需求提供。詳見 [LICENSE](LICENSE)。

# Changelog

This Actor's version history is a separate document: https://apify.com/neeenja/seo-geo-audit-mcp/changelog.md

# Actor input Schema

## Actor input object example

```json
{}
```

# Actor output Schema

## `mcpEndpoint` (type: `string`):

Connect your MCP client to this endpoint (Bearer-token gated by Apify).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("neeenja/seo-geo-audit-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("neeenja/seo-geo-audit-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call neeenja/seo-geo-audit-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neeenja/seo-geo-audit-mcp"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8vavlVuy1xDofLyw1/builds/SxRotWk8CfMEWegK3/openapi.json
