关于 SEO & GEO
SEO & GEO 是面向 AI Agent 的页面审计 MCP 服务,检查页面 SEO、结构化数据、爬虫访问和 AI 搜索引擎引用准备度。它同时评估传统页面因素与 GEO,并提供评分和优先修复建议,无需 API 密钥。
主要功能
- 01综合 SEO 与 GEO 页面审计
- 02检查 AI 爬虫的 robots.txt 访问规则
- 03检测内容是否可在无 JavaScript 时读取
- 04分析元标签、标题、结构化数据与内容
- 05检查站点地图、链接和 hreflang
适用场景
- 01评估页面被 AI 搜索引擎抓取和引用的条件
- 02排查阻碍搜索引擎索引的页面问题
- 03审查多语言页面的 hreflang 设置
MCP 相关
作为 MCP 服务,向 MCP 客户端公开只读 SEO 与 GEO 审计工具,返回结构化结果、评分和修复建议。支持 stdio 与无状态 Streamable HTTP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
17收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 要分析的页面 URL,例如 'https://example.com/blog/post'。默认使用 https://。 |
| include_geo | boolean | 否 | 同时评估 GEO(AI 答案引擎)就绪度。会额外发起约 2 次请求。 |
| response_format | enum | 否 | 输出格式:'markdown' 表示易读摘要(默认),'json' 表示完整的结构化数据。markdown | json |
| check_broken_links | boolean | 否 | 抽样检查最多 25 个链接,验证其是否可访问。速度较慢,但能发现失效链接。 |
详细介绍
seo-geo-mcp-server
一个 MCP 服务,可让 AI Agent 审核页面的 SEO 和 GEO(生成式引擎优化)——检查页面标签、结构化数据、robots.txt、站点地图、hreflang,以及 ChatGPT、Claude、Perplexity 和 Gemini 是否真的能抓取并引用你的网站。无需 API 密钥。
基于 v2 MCP SDK 构建:服务采用 2026-07-28 协议修订版,同时仍通过同一个工厂接受 2025 年的客户端(Claude Desktop、Claude Code、Cursor)——一次构建,兼容两个时代,无需配置。
问 Claude “这个页面表现如何,AI 助手会引用它吗?”,它就会执行完整审核,并提供带有优先级排序修复建议的评分报告——你不必把 URL 分别粘贴到六种不同的网页工具中。
> Audit https://example.com/guide and tell me if ChatGPT can cite it
seo_audit(url="https://example.com/guide", include_geo=true)
Overall: A (92/100) · indexable: yes
Meta tags & social preview 95 (A)
Heading structure 100 (A)
Structured data 75 (C)
GEO readiness: B (85/100)
✅ AI crawler access 25/25
✅ Server-rendered content 20/20
❌ Authorship & entity 2/10
1. Add author and Organization markup with `sameAs` links to official profiles.
为什么要做这个项目
两个痛点,一个服务。
SEO 痛点: 页面检查工具都是网页界面。没有任何工具能让 Agent 在同一轮工作中执行审核、读取结果并修复代码。
GEO 痛点: “生成式引擎优化”工具大多是需要订阅的排名追踪仪表板。决定 AI 助手能否引用你网站的实际机制,检查成本很低,却几乎从未受到检查:
- AI 搜索爬虫能访问你的网站吗? 屏蔽
GPTBot会阻止训练。屏蔽OAI-SearchBot会阻止你被引用。许多原本只想阻止前者的网站,却意外阻止了后者。此服务会区分二者。 - 不运行 JavaScript,内容还存在吗? Googlebot 会渲染 JS。
GPTBot、ClaudeBot、PerplexityBot和CCBot基本不会。客户端渲染的页面可能在 Google 上排名良好,却无法被任何 AI 助手看到。
它是 ortamarco.me 上工具的 Agent 端配套服务,并与 domain-security-mcp-server 共享其核心功能(连接时 SSRF 防护和主机验证)。
工具
审核
| 工具 | 功能 |
|---|---|
seo_audit ⭐ | 一次抓取 → 七个加权部分(元数据、标题、内容、架构、图片、链接、可抓取性)→ 0–100 分、A–F 等级、按优先级排序的修复建议。include_geo=true 会加入 GEO 维度 |
geo_audit ⭐ | AI 答案引擎就绪度:爬虫访问权限(25)、服务端渲染内容(20)、结构化数据(15)、可提取结构(15)、作者信息(10)、新鲜度(8)、深度(7) |
GEO
| 工具 | 功能 |
|---|---|
ai_crawler_access | 根据 robots.txt 检查约 35 种 AI 爬虫令牌的解析结果。区分训练爬虫与引用爬虫,标记供应商文档中说明为无法强制执行的屏蔽规则,并处理 Applebot→Googlebot 回退 |
render_check | 检查内容在不运行 JavaScript 时是否仍然存在——检测 AI 爬虫无法读取的、尚未水合的 SPA 空壳 |
llms_txt_check | 检测并验证 /llms.txt 是否符合 llmstxt.org 提案——并报告其实际采用情况,而不是暗示它能提升可见度 |
页面内
| 工具 | 功能 |
|---|---|
meta_tags_check | 标题、描述、canonical、robots(meta 和 X-Robots-Tag)、lang、charset、viewport |
social_preview_check | Open Graph + Twitter Card,并验证 og:image 是否实际加载 |
heading_structure | 完整的 h1–h6 大纲、多个 h1、跳级标题、疑问句式标题 |
structured_data_check | 提取 JSON-LD/microdata/RDFa,检查解析错误,并验证 21 种 schema 类型是否满足 Google 富媒体搜索结果要求 |
content_analysis | 字数、Flesch 易读性、薄弱内容检测、文本与 HTML 比率、术语密度(EN + ES 停用词) |
image_seo_check | 检查缺失的替代文本、缺失的尺寸(布局偏移)、延迟加载、WebP/AVIF 采用情况 |
技术
| 工具 | 功能 |
|---|---|
robots_txt_check | 按 RFC 9309 解析;标记通配符 Disallow: / 和 5xx 响应(Google 会将其视为禁止所有抓取) |
sitemap_check | 通过 robots.txt → 常规路径发现站点地图;跟进索引、处理 gzip、50k/50MiB 限制、验证 lastmod |
canonical_host_check | 检查全部四种 http/https × apex/www 变体是否汇聚到一个 canonical URL,以及通过 301 还是 302 跳转 |
redirect_trace | 逐跳追踪链路,检测循环和临时重定向 |
link_audit | 区分内部/外部链接、检查 rel 属性和通用锚文本,并可选择抽样检查失效链接 |
hreflang_check | 验证 BCP-47、检查自引用、x-default 和重复项,并可选择验证互反性 |
每个工具均为只读,声明 outputSchema,并返回 structuredContent(由 SDK 验证),同时提供人类可读的 Markdown(默认格式)或 JSON(response_format="json"),以及可执行的错误信息。
说明
此服务会刻意避免夸大两件事,而大多数 GEO 内容都会在这方面出错。相关说明会显示在工具输出中,而非藏在这里:
llms.txt并非已采纳的标准。 它是 2024 年 9 月提出的社区提案。没有任何主流 AI 厂商说明其爬虫会从第三方网站读取该文件,Google 也曾公开表示不会。该工具会报告文件是否存在并验证其格式,而geo_audit刻意不为其评分。(llms-full.txt是文档工具的惯例,并非该提案的一部分。)- robots.txt 中的某些限制仅供参考。 据各自厂商的文档,
Perplexity-User、ChatGPT-User和meta-externalfetcher会忽略或可能忽略 robots.txt。将这些爬虫报告为已明确“屏蔽”会造成误导,因此它们会单独列为无法强制执行。
爬虫令牌带有 provenance 字段,用于区分来自厂商官方文档的信息和来自社区聚合站点的信息;同时会明确列出未公布任何令牌的厂商(xAI/Grok、Microsoft Copilot),因为缺少规则不能被视为允许或屏蔽。
安装
需要 Node.js 20.18+。无需克隆项目——每个 MCP 客户端都可以通过 npx 运行。
与 Claude Code 搭配使用
claude mcp add seo-geo -- npx -y seo-geo-mcp-server
与 Claude Desktop 或 Cursor 搭配使用
添加到 claude_desktop_config.json(或 ~/.cursor/mcp.json)中——参见 examples/:
{
"mcpServers": {
"seo-geo": {
"command": "npx",
"args": ["-y", "seo-geo-mcp-server"]
}
}
}
在 Windows 上,使用 "command": "cmd",并设置 "args": ["/c", "npx", "-y", "seo-geo-mcp-server"]。
重启客户端,然后询问:“审查 example.com 的 SEO 和 GEO。”
自托管(HTTP 传输)
同一服务支持无状态的 Streamable HTTP,供远程或多客户端使用。一个端点即可兼容两个协议版本;无需会话状态,也无需携带 Mcp-Session-Id。
TRANSPORT=http npx -y seo-geo-mcp-server
# POST JSON-RPC to http://127.0.0.1:3000/mcp · health at /healthz
默认情况下,它是安全的:服务绑定到 127.0.0.1,且只接受 localhost 的 Host 和 Origin 标头,因此可以阻止来自网页的 DNS 重绑定攻击。若要公开访问——例如部署在 Coolify 或 Traefik 后面——请明确启用:
| 变量 | 默认值 | 用途 |
|---|---|---|
TRANSPORT | stdio | 使用 http 提供 Streamable HTTP |
PORT | 3000 | 监听端口 |
HOST | 127.0.0.1 | 绑定地址;设为 0.0.0.0 以接受远程连接 |
ALLOWED_HOSTS | — | Host 标头可携带的主机名,以逗号分隔(例如 mcp.example.com) |
ALLOWED_ORIGINS | — | 允许从浏览器发起调用的来源,以逗号分隔 |
MCP_AUTH_TOKEN | — | 如果设置,每个请求都必须携带 Authorization: Bearer <token> |
绑定到非环回地址,但未设置 ALLOWED_HOSTS 或 MCP_AUTH_TOKEN 时仍可运行,不过服务会在 stderr 中提示这一点。使用 Docker 时(镜像会设置 HOST=0.0.0.0):
docker build -t seo-geo-mcp .
docker run -p 3000:3000 -e ALLOWED_HOSTS=mcp.example.com -e MCP_AUTH_TOKEN=change-me seo-geo-mcp
开发
npm run dev # tsx watch (stdio)
npm test # deterministic unit tests: SSRF guard, robots matcher, nesting guard,
# gzip sitemaps, SPA detection, JSON-LD, HTTP transport defaults
npm run smoke # call all 17 tools over MCP, in BOTH protocol eras, and validate
# structuredContent vs outputSchema
npm run inspect # open the MCP Inspector against the built server
npm run build # type-check + emit dist/
evals/ 中包含一组 10 个问题的大模型评测集(稳定且可验证),以及运行说明——请参阅 evals/README.md。
工作原理
src/
├── index.ts # transport selection: serveStdio | createMcpHandler + Express
├── server.ts # the factory: registers every tool on one McpServer
├── schemas.ts # Zod 4 outputSchema for each tool
├── core/ # pure logic, no MCP coupling — reusable & testable
│ ├── validate.ts # host/URL validation and the address classifier
│ ├── netguard.ts # connect-time SSRF guard (every socket's address is checked)
│ ├── fetch.ts # fetch: guarded dispatcher, manual redirects, loop detection, byte caps
│ ├── page.ts # HTML loading + the shared parsed-document model
│ ├── meta.ts # title/description/canonical/robots, Open Graph, hreflang
│ ├── content.ts # headings, readability, word counts, image SEO
│ ├── structured-data.ts # JSON-LD/microdata + Google rich-result requirements
│ ├── robots.ts # RFC 9309 parser and rule matcher
│ ├── ai-crawlers.ts # the AI crawler registry (token, purpose, compliance, provenance)
│ ├── sitemap.ts # discovery, index following, gzip, protocol limits
│ ├── links.ts # link classification + broken-link sampling
│ ├── redirects.ts # chain tracing + host canonicalisation
│ ├── geo.ts # llms.txt, JS-rendering detection, GEO scoring
│ └── seo-audit.ts # the composite audits (one fetch, every analyser)
└── tools/ # thin MCP wrappers (Zod schemas, descriptions, formatting)
core/ 层刻意不依赖任何 MCP 类型,因此相同的逻辑既可用于此服务,也可用于网页 UI。
安全
这些工具会获取调用者指定的 URL,也会获取受审计网站指定的 URL(链接、og:image、hreflang 替代页面、站点地图子项、重定向),因此所有出站连接都会经过筛查,以防服务器端请求伪造:
- 各种格式的私有、环回、链路本地(云元数据)、共享(CGNAT)、多播和保留地址都会被拒绝,包括嵌入 IPv4 地址的 IPv6 地址(
[::ffff:127.0.0.1])。 - 检查会在建立连接时针对套接字即将使用的地址执行,因此 DNS 重绑定以及只有内部解析器知道的名称也会被拒绝。重定向会逐个手动跟进,每一跳都会经过筛查,并会报告循环。
- 不可信输入受到限制:HTML 为 2 MB、嵌套深度为 512 层(浏览器所保留的深度)、robots.txt 匹配器不会发生回溯、每个站点地图为 10 MiB(包括 gzip 解压后的输出)、同时检查 6 个链接,且每个结果列表最多包含 200 项。
发现问题?请提交私密安全公告。
许可证
MIT © Marco Orta
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。