seo-skills/seo-audit-skill
GitHub: seo-skills/seo-audit-skill
Stars: 271 | Forks: 37
# SEOmator Audit
A comprehensive SEO audit tool with **251 audit rules** across **20 categories**. Available as both a **command-line tool** and an **Electron desktop app**. Analyze any website for SEO best practices, Core Web Vitals, security headers, structured data, accessibility, JavaScript rendering, redirect chains, and more.
## Features
- **251 SEO Audit Rules** across 20 categories
- **Desktop App** - Visual audit dashboard with real-time progress, interactive results, score history, and light/dark theme
- **CLI Tool** - Single page & crawl mode with 5 output formats
- **Core Web Vitals** - LCP, CLS, FCP, TTFB, INP measurement via Playwright
- **JavaScript Rendering Analysis** - Compare raw vs rendered DOM for SPA/CSR sites
- **5 Output Formats** - Console, JSON, HTML, Markdown, and LLM-optimized XML
- **AI/GEO Readiness** - Check semantic HTML, AI bot access, and llms.txt
- **Redirect Chain Detection** - Loops, broken redirects, meta/JS redirects
- **HTML Validation** - Doctype, charset, head structure, lorem ipsum detection
- **Cross-Page Analysis** - Duplicate content detection, orphan pages, pagination
- **Concurrent Crawling** - Fast multi-page audits with configurable concurrency
- **SQLite Storage** - Persistent crawl data with compression and audit history
- **CI/CD Ready** - Exit codes, JSON output, GitHub Actions & GitLab CI examples
- **TOML Configuration** - Project-level settings with presets and inheritance
## Installation
### From npm (recommended)
# Install globally
npm install -g @seomator/seo-audit
# Run audit
seomator audit https://example.com
### From source
git clone https://github.com/seo-skills/seo-audit-skill.git
cd seo-audit-skill
npm install
npm run build
# Run directly
./dist/cli.js audit https://example.com
# Or link globally
npm link
seomator audit https://example.com
## Desktop App
### Running
# From source
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
### Building
npm run electron:build # Production build
npm run electron:pack # Build + package distributable
### Desktop App Features
- **Real-time progress** - Live category-by-category progress as the audit runs
- **Score dashboard** - Overall score circle, category grid, and issues summary table
- **Interactive results** - Expandable rule cards with rule descriptions, affected items, page URL badges, and inline fix suggestions
- **Filter & navigate** - Filter by status (All/Failures/Warnings/Passed), click issues to jump to details
- **Score history** - Track audit scores over time per domain with trend charts
- **Light/dark theme** - Follows your system preference or toggle manually
## Quick Start (CLI)
# Basic audit
seomator audit https://example.com
# Skip Core Web Vitals (faster)
seomator audit https://example.com --no-cwv
# Audit specific categories
seomator audit https://example.com -c core,security,perf
# JSON output (for CI/CD or parsing)
seomator audit https://example.com --format json
# HTML report
seomator audit https://example.com --format html -o report.html
# LLM-optimized output (pipe to Claude)
seomator audit https://example.com --format llm --no-cwv | claude "analyze and prioritize fixes"
# Crawl multiple pages
seomator audit https://example.com --crawl --max-pages 20
# Full options
seomator audit https://example.com --crawl -m 50 --concurrency 5 --timeout 60000 --format json -o results.json
## Commands
### `seomator audit
`
Run SEO audit on a URL.
| Option | Alias | Description | Default |
|--------|-------|-------------|---------|
| `--format ` | `-f` | Output format: console, json, html, markdown, llm | console |
| `--output ` | `-o` | Output file path | - |
| `--categories ` | `-c` | Comma-separated categories to audit | All |
| `--json` | `-j` | Output as JSON (deprecated, use --format json) | false |
| `--crawl` | - | Enable crawl mode for multiple pages | false |
| `--max-pages ` | `-m` | Maximum pages to crawl | 10 |
| `--concurrency ` | - | Concurrent requests | 3 |
| `--timeout ` | - | Request timeout in milliseconds | 30000 |
| `--no-cwv` | - | Skip Core Web Vitals measurement | false |
| `--verbose` | `-v` | Show progress | false |
| `--refresh` | `-r` | Ignore cache, fetch fresh | false |
| `--resume` | - | Resume interrupted crawl | false |
| `--config ` | - | Config file path | - |
| `--save` | - | Save report to .seomator/reports/ | false |
### `seomator init`
Create a `seomator.toml` config file.
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 `
Crawl website without running analysis. Saves data for later analysis with `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]`
Run rules on stored crawl data.
seomator analyze # Analyze latest crawl
seomator analyze --latest --save # Analyze and save
seomator analyze 2026-01-23-abc123 # Specific crawl
### `seomator report [query]`
View and query past reports.
seomator report --list # List all reports
seomator report --project mysite # Filter by project
### `seomator config [key] [value]`
View or modify configuration.
seomator config --list # Show all config
seomator config crawler.max_pages 50 # Set value
seomator config validate # Validate config
### `seomator db`
Database management.
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`
Check system setup and dependencies.
seomator self doctor -v # Verbose diagnostics
## Exit Codes
| Code | Meaning |
|------|---------|
| 0 | Audit passed (score >= 70) |
| 1 | Audit failed (score < 70) |
| 2 | Error occurred |
## Categories & Rules (251 total)
### Core (19 rules) - 12% weight
| Rule | Description |
|------|-------------|
| `core-title-present` | `` tag exists |
| `core-title-length` | Title should be 30-60 characters |
| `core-description-present` | Meta description exists |
| `core-description-length` | Description should be 120-160 characters |
| `core-canonical-present` | Canonical URL exists |
| `core-canonical-valid` | Canonical URL is valid absolute URL |
| `core-viewport-present` | Viewport meta tag exists |
| `core-favicon-present` | Favicon link exists |
| `core-h1-present` | At least one H1 exists |
| `core-h1-single` | Only one H1 exists |
| `core-canonical-header` | HTML canonical and Link header match |
| `core-nosnippet` | Detects nosnippet/max-snippet:0 directives |
| `core-robots-meta` | Checks noindex/nofollow directives |
| `core-title-unique` | Titles should be unique site-wide |
| `core-canonical-conflicting` | HTML and header canonicals should not conflict |
| `core-canonical-to-homepage` | Canonical should not always point to homepage |
| `core-canonical-http-mismatch` | Canonical protocol should match page protocol |
| `core-canonical-loop` | Detects circular canonical chains |
| `core-canonical-to-noindex` | Canonical should not point to noindexed page |
### Performance (22 rules) - 12% weight
| Rule | Description |
|------|-------------|
| `cwv-lcp` | Largest Contentful Paint (<2.5s pass, >4s fail) |
| `cwv-cls` | Cumulative Layout Shift (<0.1 pass, >0.25 fail) |
| `cwv-inp` | Interaction to Next Paint (<200ms pass, >500ms fail) |
| `cwv-ttfb` | Time to First Byte (<800ms pass, >1800ms fail) |
| `cwv-fcp` | First Contentful Paint (<1.8s pass, >3s fail) |
| `perf-dom-size` | DOM should have <1500 nodes |
| `perf-css-file-size` | CSS files should be reasonably sized |
| `perf-font-loading` | Font-display: swap should be used |
| `perf-preconnect` | Preconnect hints for third-party origins |
| `perf-render-blocking` | Scripts should use async/defer |
| `perf-lazy-above-fold` | Above-fold images should not be lazy-loaded |
| `perf-lcp-hints` | LCP element should be preloaded |
| `perf-text-compression` | Responses should use gzip/Brotli compression |
| `perf-brotli` | Prefer Brotli over gzip for better compression |
| `perf-cache-policy` | Static assets should have cache headers |
| `perf-minify-css` | CSS should be minified |
| `perf-minify-js` | JavaScript should be minified |
| `perf-response-time` | Server response time should be <200ms |
| `perf-http2` | Site should serve over HTTP/2 |
| `perf-page-weight` | Total page size should be <3MB |
| `perf-js-file-size` | Individual JS files should be <500KB |
| `perf-video-for-animations` | Use `
标签:AI准备, Core Web Vitals, Electron桌面应用, GEO准备, HTML验证, JavaScript渲染分析, npm包, Playwright, SEO审计, SQLite存储, TOML配置, 可访问性, 威胁情报, 安全头, 审计规则, 并发抓取, 开发者工具, 技术SEO, 搜索引擎优化, 数字营销, 数据库存储, 爬虫工具, 结构化数据, 网站健康检查, 网站分析, 网站性能, 网络资产识别, 自动化攻击, 跨页分析, 输出格式, 重定向链