seo-skills/seo-audit-skill
GitHub: seo-skills/seo-audit-skill
跨 20 个类别、251 条规则的 SEO 审计工具,提供 CLI 和 Electron 桌面应用,支持 CI/CD 集成与多页面并发爬取。
Stars: 330 | Forks: 40
# SEOmator 审计
一款全面的 SEO 审计工具,包含跨 **20 个类别** 的 **251 条审计规则**。同时提供 **命令行工具** 和 **Electron 桌面应用程序**。分析任意网站的 SEO 最佳实践、Core Web Vitals、安全标头、结构化数据、无障碍访问、JavaScript 渲染、重定向链等。
## 功能
- **251 条 SEO 审计规则**,涵盖 20 个类别
- **桌面应用程序** - 可视化审计仪表盘,包含实时进度、交互式结果、分数历史以及浅色/深色主题
- **CLI 工具** - 支持单页面和爬取模式,提供 5 种输出格式
- **Core Web Vitals** - 通过 Playwright 测量 LCP、CLS、FCP、TTFB、INP
- **JavaScript 渲染分析** - 针对 SPA/CSR 站点对比原始 DOM 与渲染后的 DOM
- **5 种输出格式** - Console、JSON、HTML、Markdown 以及针对 LLM 优化的 XML
- **AI/GEO 就绪** - 检查语义化 HTML、AI 机器人访问权限以及 llms.txt
- **重定向链检测** - 检测循环、断裂的重定向、Meta/JS 重定向
- **HTML 验证** - Doctype、charset、head 结构、lorem ipsum 检测
- **跨页面分析** - 重复内容检测、孤立页面、分页
- **并发爬取** - 具备可配置并发性的快速多页面审计
- **SQLite 存储** - 支持压缩和审计历史的持久化爬取数据
- **CI/CD 就绪** - 提供退出码、JSON 输出、GitHub Actions 和 GitLab CI 示例
- **TOML 配置** - 支持预设和继承的项目级设置
## 安装
### 通过 npm 安装(推荐)
```
# 全局安装
npm install -g @seomator/seo-audit
# 运行 audit
seomator audit https://example.com
```
### 从源码安装
```
git clone https://github.com/seo-skills/seo-audit-skill.git
cd seo-audit-skill
npm install
npm run build
# 直接运行
./dist/cli.js audit https://example.com
# 或全局 link
npm link
seomator audit https://example.com
```
## 桌面应用程序
桌面应用程序提供了一个可视化审计仪表盘,支持实时进度流、交互式结果、分数历史以及浅色/深色主题。
### 运行
```
# 从源码
git clone https://github.com/seo-skills/seo-audit-skill.git
cd seo-audit-skill
npm install
npx electron-rebuild -f -w better-sqlite3 # Compile native module for Electron
npm run electron:dev # Launch with hot reload
```
### 构建
```
npm run electron:build # Production build
npm run electron:pack # Build + package distributable
```
### 桌面应用功能
- **实时进度** - 审计运行时按类别显示实时进度
- **分数仪表盘** - 整体得分环、类别网格和问题汇总表
- **交互式结果** - 可展开的规则卡片,包含规则描述、受影响项目、页面 URL 徽章和内联修复建议
- **筛选与导航** - 按状态筛选(全部/失败/警告/通过),点击问题跳转至详情
- **分数历史** - 按域名追踪随时间变化的审计分数及趋势图
- **浅色/深色主题** - 跟随您的系统偏好或手动切换
## 快速开始 (CLI)
```
# 基础 audit
seomator audit https://example.com
# 跳过 Core Web Vitals(更快)
seomator audit https://example.com --no-cwv
# audit 特定类别
seomator audit https://example.com -c core,security,perf
# JSON 输出(用于 CI/CD 或解析)
seomator audit https://example.com --format json
# HTML 报告
seomator audit https://example.com --format html -o report.html
# LLM 优化输出(pipe 到 Claude)
seomator audit https://example.com --format llm --no-cwv | claude "analyze and prioritize fixes"
# 爬取多个页面
seomator audit https://example.com --crawl --max-pages 20
# 完整选项
seomator audit https://example.com --crawl -m 50 --concurrency 5 --timeout 60000 --format json -o results.json
```
## 命令
### `seomator audit
`
对指定 URL 执行 SEO 审计。
| 选项 | 别名 | 描述 | 默认值 |
|--------|-------|-------------|---------|
| `--format ` | `-f` | 输出格式:console, json, html, markdown, llm | console |
| `--output ` | `-o` | 输出文件路径 | - |
| `--categories ` | `-c` | 以逗号分隔的待审计类别 | 所有 |
| `--json` | `-j` | 以 JSON 格式输出(已废弃,请使用 --format json) | false |
| `--crawl` | - | 启用多页面爬取模式 | false |
| `--max-pages ` | `-m` | 最大爬取页面数 | 10 |
| `--concurrency ` | - | 并发请求数 | 3 |
| `--timeout ` | - | 请求超时时间(毫秒) | 30000 |
| `--no-cwv` | - | 跳过 Core Web Vitals 测量 | false |
| `--verbose` | `-v` | 显示进度 | false |
| `--refresh` | `-r` | 忽略缓存,重新获取 | false |
| `--resume` | - | 恢复中断的爬取 | false |
| `--config ` | - | 配置文件路径 | - |
| `--save` | - | 将报告保存至 .seomator/reports/ | false |
### `seomator init`
创建 `seomator.toml` 配置文件。
```
seomator init # Interactive setup
seomator init -y # Use defaults
seomator init --preset blog # Blog preset
seomator init --preset ecommerce # E-commerce preset
seomator init --preset ci # Minimal CI config
```
### `seomator crawl `
在不运行分析的情况下爬取网站。保存数据以便后续通过 `seomator analyze` 进行分析。
```
seomator crawl https://example.com -m 20
seomator crawl https://example.com --refresh
seomator crawl https://example.com --resume
```
### `seomator analyze [crawl-id]`
对已存储的爬取数据执行规则分析。
```
seomator analyze # Analyze latest crawl
seomator analyze --latest --save # Analyze and save
seomator analyze 2026-01-23-abc123 # Specific crawl
```
### `seomator report [query]`
查看并查询历史报告。
```
seomator report --list # List all reports
seomator report --project mysite # Filter by project
```
### `seomator config [key] [value]`
查看或修改配置。
```
seomator config --list # Show all config
seomator config crawler.max_pages 50 # Set value
seomator config validate # Validate config
```
### `seomator db`
数据库管理。
```
seomator db migrate # Migrate JSON to SQLite
seomator db migrate --dry-run # Preview migration
seomator db stats -v # Database statistics
seomator db restore # Rollback migration
```
### `seomator self doctor`
检查系统设置和依赖项。
```
seomator self doctor -v # Verbose diagnostics
```
## 退出码
| 代码 | 含义 |
|------|---------|
| 0 | 审计通过(分数 >= 70) |
| 1 | 审计失败(分数 < 70) |
| 2 | 发生错误 |
## 类别与规则(共 251 条)
### 核心(19 条规则) - 权重 12%
| 规则 | 描述 |
|------|-------------|
| `core-title-present` | 存在 `` 标签 |
| `core-title-length` | Title 长度应为 30-60 个字符 |
| `core-description-present` | 存在 Meta description |
| `core-description-length` | Description 长度应为 120-160 个字符 |
| `core-canonical-present` | 存在 Canonical URL |
| `core-canonical-valid` | Canonical URL 是有效的绝对 URL |
| `core-viewport-present` | 存在 Viewport meta 标签 |
| `core-favicon-present` | 存在 Favicon 链接 |
| `core-h1-present` | 至少存在一个 H1 |
| `core-h1-single` | 只存在一个 H1 |
| `core-canonical-header` | HTML Canonical 与 Link 标头匹配 |
| `core-nosnippet` | 检测 nosnippet/max-snippet:0 指令 |
| `core-robots-meta` | 检查 noindex/nofollow 指令 |
| `core-title-unique` | Title 应在全站唯一 |
| `core-canonical-conflicting` | HTML 和标头 Canonical 不应冲突 |
| `core-canonical-to-homepage` | Canonical 不应始终指向首页 |
| `core-canonical-http-mismatch` | Canonical 协议应与页面协议匹配 |
| `core-canonical-loop` | 检测循环 Canonical 链 |
| `core-canonical-to-noindex` | Canonical 不应指向 noindex 页面 |
### 性能(22 条规则) - 权重 12%
| 规则 | 描述 |
|------|-------------|
| `cwv-lcp` | Largest Contentful Paint(<2.5s 通过,>4s 失败) |
| `cwv-cls` | Cumulative Layout Shift(<0.1 通过,>0.25 失败) |
| `cwv-inp` | Interaction to Next Paint(<200ms 通过,>500ms 失败) |
| `cwv-ttfb` | Time to First Byte(<800ms 通过,>1800ms 失败) |
| `cwv-fcp` | First Contentful Paint(<1.8s 通过,>3s 失败) |
| `perf-dom-size` | DOM 节点数应 <1500 |
| `perf-css-file-size` | CSS 文件大小应合理 |
| `perf-font-loading` | 应使用 Font-display: swap |
| `perf-preconnect` | 为第三方源提供 Preconnect 提示 |
| `perf-render-blocking` | 脚本应使用 async/defer |
| `perf-lazy-above-fold` | 首屏图片不应使用懒加载 |
| `perf-lcp-hints` | 应预加载 LCP 元素 |
| `perf-text-compression` | 响应应使用 gzip/Brotli 压缩 |
| `perf-brotli` | 优先使用 Brotli 而非 gzip 以获得更好的压缩率 |
| `perf-cache-policy` | 静态资源应具有缓存标头 |
| `perf-minify-css` | CSS 应被压缩 |
| `perf-minify-js` | JavaScript 应被压缩 |
| `perf-response-time` | 服务器响应时间应 <200ms |
| `perf-http2` | 站点应通过 HTTP/2 提供服务 |
| `perf-page-weight` | 页面总大小应 <3MB |
| `perf-js-file-size` | 单个 JS 文件应 <500KB |
| `perf-video-for-animations` | 使用 `
标签:Core Web Vitals, GNU通用公共许可证, LNA, MITM代理, Node.js, Playwright, SEO工具, SQLite, Web审计, 桌面应用, 特征检测, 自动化攻击