Amazing SEO Skill
Single entry-point orchestrator for end-to-end SEO/AEO/GEO analysis across all industries. Combines reasoning, deterministic checkers, real-browser measurement, and multi-LLM cross-validation into one unified workflow.
First time setup? Tell the user: "Run
./tools/onboarding.shin the skill directory — it shows which capability layers (L0-L4) are active on this machine and lists the API keys needed to unlock the rest." See alsoONBOARDING.mdfor the full reference.
Quick Reference
| Command | What it does |
|---|---|
audit <domain> | Full website audit, parallel sub-agents, site-wide Health Score. Delegates to tools/site_audit.sh for multi-page parallelism. |
page <url> | Single-page deep-dive. Runs every L1 checker on one URL, aggregates into 0-100 Health Score with prioritized findings. Calls scripts/page_score.py. |
ai_visibility <url> | Composite AI Visibility Score (0-100) — AI crawler access + SSR + schema + llms.txt + hreflang + live citations. |
cms <url> | Detect CMS / framework (24+ platforms) and get platform-specific SEO tips |
js_render <url> | Compare raw HTML vs JS-rendered HTML — critical for SPA SEO |
logs <log_file> | Parse server access logs: bot behavior, crawl waste, error spikes, sitemap cross-check |
content <url> | Content quality + Flesch + E-E-A-T markers + citable-passage extraction |
local <url> | Local-SEO audit: NAP, LocalBusiness schema, GBP, citations |
serp "<query>" | SerpAPI: top-10 organic, SERP features, AI Overview, target-domain position |
technical <url> | Technical SEO across 9 categories (robots/sitemap/security/redirects/CWV) |
schema <url> | Detect, validate, generate Schema.org markup |
images <url> | Image optimization (alt, format, dims, lazy, size) |
links <url> | Broken-link audit (4xx + 5xx + auth-gated) |
security <url> | Security-headers audit (HSTS, CSP, XFO, mixed content) |
sitemap <url | generate> | Analyze or generate XML sitemaps |
geo <url> | AI Overviews / Generative Engine Optimization |
aeo <url> [keyword] | Live AEO citation check (5-LLM ensemble inc. Gemini) |
history {store|list|diff|trend} | SQLite audit history — store runs, compare over time |
dashboard | Build static HTML dashboard from history.db |
serve_dashboard [PORT] | Serve dashboard on localhost:8080 |
report <json_file> | Render page_score JSON → styled HTML report |
plan <industry> | Strategic SEO plan from industry template |
programmatic [url | plan] | Programmatic SEO analysis or planning |
competitor-pages [url | generate] | Competitor comparison page generation |
hreflang [url] | Hreflang/i18n SEO audit and generation |
growth <url> | Growth opportunities vs competitors (Ahrefs gap) |
Architecture: 4-Layer Data Model
| Layer | Source | When to use |
|---|---|---|
| L0 | Claude reasoning + WebFetch | Analysis, prioritization, recommendations |
| L1 | Python scripts in scripts/ | Deterministic checkers: robots, sitemap, hreflang, schema, llms.txt, redirect chains, internal link graph, PSI/CWV |
| L2 | Local CLIs in .bin/ | 251-rule deep audit + real-browser CWV; live AEO citations |
| L3 | External APIs | Ahrefs MCP, Google Search Console |
| L4 | Multi-LLM ensemble | Cross-validation via 5 LLM providers (anthropic, openai, perplexity, xai, gemini-with-search-grounding) |
API keys for L4 are read from macOS Keychain at runtime:
anthropic-api-key, openai-api-key, perplexity-api-key, x.ai-api-key,
google-gemini-api-key (the latter enables a Gemini-with-Google-Search
probe that closes the Google AI Overviews / AI Mode gap).
Retrieve with security find-generic-password -s <name> -w.
Orchestration Logic
When invoked with audit, delegate to sub-agents in parallel:
- Detect business type from homepage signals (SaaS, local, ecommerce, publisher, agency, generic)
- Spawn parallel sub-agents:
technical— crawlability, indexability, security, CWVcontent— E-E-A-T, readability, thin contentschema— detection, validation, generationsitemap— structure, coverage, quality gatesperformance— Core Web Vitals via real browservisual— screenshots, mobile testing, above-fold
- Dedupe contradictions across sub-agent reports (inline reasoning)
- Generate unified report:
- SEO Health Score (0-100)
- Findings table with confidence labels (Confirmed / Likely / Hypothesis)
- Prioritized action plan (Critical → High → Medium → Low)
For individual commands, load the relevant module from skills/ directly.
Industry Detection
Identify business type from homepage signals:
- SaaS — pricing page, /features, /integrations, /docs, "free trial", "sign up"
- Local Service — phone number, address, service area, "serving [city]", Google Maps embed
- E-commerce — /products, /collections, /cart, "add to cart", Product schema
- Publisher — /blog, /articles, /topics, Article schema, author pages, publication dates
- Agency — /case-studies, /portfolio, /industries, "our work", client logos
Apply industry-specific thresholds and templates from industry/<type>.md.
Quality Gates (hard rules)
Read references/quality-gates.md for thin-content thresholds per page type.
Hard rules that override any contrary suggestion:
- ⚠️ WARNING at 30+ location pages (enforce 60%+ unique content)
- 🛑 HARD STOP at 50+ location pages (require user justification)
- Never recommend HowTo schema (deprecated September 2023)
- FAQ schema only for government and healthcare sites
- All Core Web Vitals references use INP, never FID
- Never suggest doorway pages or thin content at scale
Reference Files
Load these on-demand as needed — do NOT load all at startup:
references/cwv-thresholds.md— Current Core Web Vitals thresholds (LCP, CLS, INP)references/schema-types.md— All supported schema types with deprecation statusreferences/eeat-framework.md— E-E-A-T evaluation criteria (Sept 2025 QRG update)references/quality-gates.md— Content length minimums, uniqueness thresholdsindustry/<type>.md— Industry template for detected business typedocs/google-seo-reference.md— Google search documentation reference
Deterministic Checkers (L1)
Lightweight Python scripts in scripts/. Each runs standalone, outputs JSON,
returns a meaningful exit code (0 = clean, 1 = fetch failed, 2 = issues found),
and is wired through scripts/_fetch.py (realistic Chrome UA, SSRF guard,
retries). Use these for Confirmed findings; falling back to L0 reasoning
only when the relevant checker can't reach the target.
| Checker | What it verifies | Notes |
|---|---|---|
robots_checker.py <domain> | robots.txt: structure, sitemap refs, per-bot Allow/Disallow for 20 crawlers (GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, PerplexityBot, Google-Extended, meta-externalagent, Bytespider, etc.) | Recommends 301 vs 302 for upgrades |
sitemap_validator.py <url> | XML validity, sitemap-index recursion, URL count vs 50k limit, HTTPS-only, lastmod sanity, deprecated <priority>/<changefreq>, sample HTTP-200 check, robots.txt cross-reference | --sample N configurable |
redirect_chain_checker.py <url> | per-hop redirect trace, HTTP→HTTPS upgrade, 301 vs 302 mix, loop detection, canonical alignment on final URL | Hop count ≥ 3 flagged |
security_headers_checker.py <url> | HSTS (max-age, includeSubDomains, preload), CSP (unsafe-inline / nonce / hash), X-Frame-Options or CSP frame-ancestors, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, mixed-content scan | Page Experience signals |
broken_links_checker.py <url> | Per-page link audit: every <a>, <link>, <script>, <img>, <source>, <iframe>, CSS background. Concurrent HEAD with GET fallback. Splits 4xx vs 5xx vs auth-gated 401/403 (separate |