Back to Skills

Seo Audit

Run SEO audit (39 rules) with AI visibility checks — GEO (20 rules for AI bot access, snippet restrictions) and AEO (4 schema checks). Auto-fix included. Use when user wants to check or improve search visibility.

restai
By Houseofmvps
10913Updated 1 day agoJavaScriptMIT

Skill Content

# SEO Audit + AI Visibility

Search optimization audit with AI visibility signals. Finds issues AND fixes them.

## Process

### Phase 1: Scan

Run the SEO scanner on the project:
```bash
node ${CLAUDE_PLUGIN_ROOT}/tools/seo-scanner.mjs <project-directory>
```

Parse the JSON output for findings and scores (seo, geo, aeo).

> **Large sites:** when a site has many pages and each needs page-specific fixes, escalate to a **dynamic Workflow** (describe the audit and include the word "workflow") so the scan-then-fix-then-verify pipeline runs across pages in parallel instead of one at a time.

### Phase 2: Report

Present findings grouped by category with severity:
- **SEO**: meta tags, OG tags, headings, alt text, canonical, robots.txt, sitemap
- **GEO**: structured data, llms.txt, content structure for AI
- **AEO**: FAQPage schema, speakable markup, snippet optimization

### Phase 3: Fix

For each finding, apply the appropriate fix:

**SEO fixes** (use Edit tool on HTML files):
- Missing title → add `<title>` in `<head>`
- Missing meta description → add `<meta name="description" content="...">`
- Missing OG tags → generate from page content
- Missing H1 → add appropriate heading
- Missing alt text → add descriptive alt attributes
- Missing canonical → add `<link rel="canonical">`
- Missing sitemap → run: `node ${CLAUDE_PLUGIN_ROOT}/tools/sitemap-generator.mjs <dir> <url>`
- Missing robots.txt → run: `node ${CLAUDE_PLUGIN_ROOT}/tools/robots-generator.mjs <dir> <url>`
- Missing favicon → warn user to add one

**GEO fixes**:
- Missing llms.txt → run: `node ${CLAUDE_PLUGIN_ROOT}/tools/llms-txt-generator.mjs <dir>`
- Missing structured data → run: `node ${CLAUDE_PLUGIN_ROOT}/tools/structured-data-generator.mjs <dir> --type=<type>`
- Improve content structure: add clear headings, FAQ sections, definitive statements

**AEO fixes**:
- Missing JSON-LD → generate appropriate schema type
- Missing FAQ schema → create FAQPage structured data from page content
- Snippet optimization → restructure key answers to 40-60 words

### Phase 4: Search Engine Registration (GSC + Bing)

**Google Search Console** (requires ULTRASHIP_GSC_CREDENTIALS):
```bash
# Submit sitemap
node ${CLAUDE_PLUGIN_ROOT}/tools/gsc-client.mjs submit-sitemap <site-url> <sitemap-url>

# Check if pages are indexed
node ${CLAUDE_PLUGIN_ROOT}/tools/gsc-client.mjs inspect-url <site-url> <page-url>

# See what keywords you rank for
node ${CLAUDE_PLUGIN_ROOT}/tools/gsc-client.mjs query <site-url> 28

# List all submitted sitemaps
node ${CLAUDE_PLUGIN_ROOT}/tools/gsc-client.mjs list-sitemaps <site-url>
```

**Bing Webmaster Tools** (requires ULTRASHIP_BING_KEY):
```bash
# Submit sitemap (also powers DuckDuckGo + ChatGPT Search)
node ${CLAUDE_PLUGIN_ROOT}/tools/bing-webmaster.mjs submit-sitemap <site-url> <sitemap-url>

# Submit specific URLs for fast indexing
node ${CLAUDE_PLUGIN_ROOT}/tools/bing-webmaster.mjs submit-url <site-url> <page-url>

# Batch submit multiple URLs
node ${CLAUDE_PLUGIN_ROOT}/tools/bing-webmaster.mjs submit-url-batch <site-url> <url1> <url2> ...

# Check URL traffic
node ${CLAUDE_PLUGIN_ROOT}/tools/bing-webmaster.mjs url-info <site-url> <page-url>
```

If credentials are not set, show setup instructions from the tool's error output. Do NOT skip this phase — submitting sitemaps to both GSC and Bing is critical for indexing speed.

**Why Bing matters for AI search:** Bing's index powers ChatGPT Search, DuckDuckGo, and Yahoo. Submitting your sitemap to Bing directly improves AI search visibility.

### Phase 4b: Content Quality Analysis

Run content scoring on all pages:
```bash
node ${CLAUDE_PLUGIN_ROOT}/tools/content-scorer.mjs <project-directory>
```

For pages with a known target keyword:
```bash
node ${CLAUDE_PLUGIN_ROOT}/tools/content-scorer.mjs <project-directory> --keyword=<keyword>
```

Report readability scores (Flesch-Kincaid), keyword density, thin content, and GEO heading optimization.

### Phase 4c: Social Preview Validation

Validate Open Graph tags and image accessibility:
```bash
node ${CLAUDE_PLUGIN_ROOT}/tools/og-validator.mjs <project-directory>
```

Fix missing OG tags, broken OG images, and oversized preview images.

### Phase 4d: Redirect Audit

If a production URL is available, check for redirect chains:
```bash
node ${CLAUDE_PLUGIN_ROOT}/tools/redirect-checker.mjs --sitemap=<sitemap-url>
```

Fix redirect chains (consolidate to single hop), convert 302s to 301s, and resolve mixed HTTP/HTTPS.

### Phase 5: Verify

Re-run the scanner to confirm fixes and report before/after scores.

Save scores for historical comparison:
```bash
node ${CLAUDE_PLUGIN_ROOT}/tools/audit-history.mjs save <project-dir> seo <score>
node ${CLAUDE_PLUGIN_ROOT}/tools/audit-history.mjs save <project-dir> geo <score>
node ${CLAUDE_PLUGIN_ROOT}/tools/audit-history.mjs save <project-dir> aeo <score>
```

### Phase 6: AI Search Content Strategy

After technical fixes, advise on content-level optimizations that the scanner cannot automate:

**GEO Content Patterns (for AI citation):**
- Rewrite key H2 headers as questions: "What is [topic]", "How does [feature] work", "Why use [product]"
- Add 1-2 sentence TL;DR summaries under important H2 sections — AI engines extract these as standalone answers
- Use plain-language definitions before introducing nuance: "[Product] is [clear definition]"
- Write in citation-ready format: concise, factual, quotable — avoid vague marketing copy
- Create comparison tables, statistics pages, and glossaries — these are the most-cited page formats by AI

**E-E-A-T Signals (for AI trust):**
- Add Author/Person schema with credentials, role, and expertise
- Include first-hand experience statements: "We tested", "In our experience", "Based on [N] customers"
- Add original visuals, screenshots, and data — AI cannot synthesize these, so they prove authenticity
- Ensure author bios establish subject-matter relevance on every content page

**AI Bot Access:**
- Verify robots.txt explicitly allows GPTBot (ChatGPT), PerplexityBot, and Claude-Web
- Block Google-Extended and CCBot only if you want to prevent AI training (not citation)

**Citation-Worthy Page Formats:**
- Ultimate guides consolidating a topic into one authoritative resource
- "[Topic] Statistics (2026)" pages centralizing referenceable data
- "Best [Category] Tools Compared" with explicit comparison tables
- FAQ pages with direct, quotable answers (not marketing fluff)

**Key test:** "If your content can't answer a question clearly in 30 seconds, AI engines won't select it for generated answers."

### Phase 7: Content Audit Framework

For SEO specialists working on client sites, provide a content audit after the technical scan:

**Content Health Assessment:**
- Flag pages with <300 words as thin content — recommend consolidation or expansion
- Identify pages with duplicate titles/descriptions — each page must be unique
- Find orphan pages (0 internal links pointing to them) — add links or consider removing
- Check internal link distribution — important pages should have 3+ internal links

**Competitor Gap Analysis Guidance:**
After technical fixes, advise the user to:
1. Search their top 5 target keywords in ChatGPT, Perplexity, and Google AI Overviews
2. Note which competitors are cited — study their content structure
3. Identify topics competitors cover that the client site doesn't
4. Create "definitive answer" content for each gap — direct, structured, quotable

**Content Update/Consolidate/Delete Decision Framework:**
For each existing content page, recommend one of:
- **Update**: Has traffic potential but content is outdated or thin → refresh with current data
- **Consolidate**: Multiple pages targeting the same keyword → merge into one authoritative page
- **Delete/Redirect**: Zero traffic, zero backlinks, no strategic value → 301 redirect to relevant page
- **Leave**: Performing well, no changes needed

**Page Speed Budget by Page Type:**
- Landing pages / homepage: target Lighthouse 90+
- Blog posts / content pages: target Lighthouse 85+
- Dashboards / app pages: target Lighthouse 70+ (not search-indexed)
- API-only backends: skip Lighthouse entirely

### Phase 8: Domain Authority & Backlink Strategy

Ultraship cannot check backlinks (requires paid APIs like Ahrefs/Semrush with massive crawl indexes). Instead, provide strategic guidance that a $10K/month SEO consultant would give:

**Internal Link Optimization (we CAN automate):**
The scanner already detects orphan pages and pages with zero internal links. After fixing those:
- Ensure every important page has 3+ internal links pointing to it
- Use descriptive anchor text with keywords (not "click here" or "read more")
- Add contextual links within content, not just navigation
- Create hub pages that link to all related content (topic clusters)

**Backlink Acquisition Strategy (guidance for user):**

*High-value link building tactics (ranked by ROI):*
1. **Create link-worthy assets** — original research, data studies, industry surveys, free tools, calculators. These attract natural links.
2. **Guest posting** — write for authoritative sites in your niche. One link from a DR60+ site > 100 links from spam sites.
3. **Broken link building** — find broken links on competitor sites, offer your content as replacement.
4. **HARO/Qwoted/Featured** — respond to journalist queries to earn media mentions with backlinks.
5. **Competitor backlink analysis** — use Ahrefs/Semrush free trials to find where competitors get links, then target the same sources.
6. **Strategic partnerships** — co-create content with complementary businesses, cross-link naturally.

*What NOT to do:*
- Never buy links (Google penalizes this)
- Never use PBNs (private blog networks)
- Never spam forum/comment links
- Never use automated link building tools

**Domain Authority Monitoring (guidance for user):**
- Check DA/DR monthly via free Ahrefs Webmaster Tools or Moz free tier
- Track referring domains, not just total backlinks (10 links from 10 domains > 100 links from 1 domain)
- Monitor for toxic backlinks quarterly and disavow via GSC if needed

## Key Principle

**Fix, don't just audit.** Every finding should have a concrete fix applied. Every content page should have a strategy to be cited by AI. Every client engagement should include technical fixes + content audit + backlink strategy.

How to use

  1. Copy the skill content above
  2. Create a .claude/skills directory in your project
  3. Save as .claude/skills/ultraship-seo-audit.md
  4. Use /ultraship-seo-audit in Claude Code to invoke this skill
<div align="center"> <img src="assets/hero-banner.jpg" alt="Ultraship — Claude Code Plugin" width="100%"/>

Claude Code plugin. 43 expert-level skills for building, shipping, and scaling production software. 37 audit tools (accessibility, vibe-coding security, AI evals, pentest, code quality, bundle size, SEO + AI Readiness check) plus a blocking ship-gate close the loop before deploy. A built-in Currency Guard keeps Claude on current docs, not stale training data.

npm version npm downloads npm total GitHub stars License: MIT CI Sponsor


Follow @kaileskkhumar LinkedIn houseofmvps.com kailxlabs.co

Built by Kaileskkhumar, founder of HouseofMVPs and Kailxlabs

</div>
0 dependencies · 274 tests · Node.js ESM · MIT

Install

# Claude Code plugin
claude plugin marketplace add Houseofmvps/ultraship
claude plugin install ultraship

# Or standalone via npx
npx ultraship ship .
npx ultraship seo .
npx ultraship security .

How It Works

flowchart LR
    U["You type a<br/>slash command"] --> S["Skill<br/>(markdown instructions)"]
    S --> A["Agent<br/>(dispatched worker)"]
    S --> T["Tools<br/>(Node.js scripts)"]
    A --> T
    T --> O["JSON Results"]
    O --> R["Scorecard / Report /<br/>Actionable Fixes"]

    style U fill:#f59e0b,stroke:#d97706,color:#000
    style S fill:#8b5cf6,stroke:#7c3aed,color:#fff
    style A fill:#3b82f6,stroke:#2563eb,color:#fff
    style T fill:#10b981,stroke:#059669,color:#000
    style R fill:#ef4444,stroke:#dc2626,color:#fff
flowchart TD
    subgraph Lifecycle["Full Lifecycle Coverage"]
        direction LR
        I["Idea<br/>/brainstorm"] --> B["Build<br/>/sprint"]
        B --> AU["Audit<br/>/ship /seo /secure"]
        AU --> D["Ship<br/>/deploy"]
        D --> L["Launch<br/>/launch /compete"]
        L --> G["Grow<br/>/grow /cost"]
        G --> RE["Rescue<br/>/rescue /canary"]
    end

    style I fill:#8b5cf6,stroke:#7c3aed,color:#fff
    style B fill:#3b82f6,stroke:#2563eb,color:#fff
    style AU fill:#f59e0b,stroke:#d97706,color:#000
    style D fill:#10b981,stroke:#059669,color:#000
    style L fill:#06b6d4,stroke:#0891b2,color:#000
    style G fill:#84cc16,stroke:#65a30d,color:#000
    style RE fill:#ef4444,stroke:#dc2626,color:#fff

What /ship Does

/ship runs 6 tools in parallel and outputs a scorecard:

flowchart LR
    SHIP["/ship"] --> SEO["seo-scanner<br/>63 rules"]
    SHIP --> A11Y["a11y-scanner<br/>WCAG 2.2"]
    SHIP --> SEC["secret-scanner<br/>+ npm audit"]
    SHIP --> CODE["code-profiler<br/>N+1, leaks, ReDoS"]
    SHIP --> BUNDLE["bundle-tracker<br/>JS/CSS/images"]
    SHIP --> ENV["env-validator<br/>+ migration-checker"]

    SEO --> SC["Scorecard<br/>READY TO SHIP"]
    A11Y --> SC
    SEC --> SC
    CODE --> SC
    BUNDLE --> SC
    ENV --> SC

    style SHIP fill:#f59e0b,stroke:#d97706,color:#000
    style SC fill:#10b981,stroke:#059669,color:#000
    style SEO fill:#3b82f6,stroke:#2563eb,color:#fff
    style SEC fill:#3b82f6,stroke:#2563eb,color:#fff
    style CODE fill:#3b82f6,stroke:#2563eb,color:#fff
    style BUNDLE fill:#3b82f6,stroke:#2563eb,color:#fff
    style ENV fill:#3b82f6,stroke:#2563eb,color:#fff
+===========================================+
|      U L T R A S H I P   S C O R E       |
+===========================================+
|  SEO + AI Vis.  92/100  ############-    |
|  Security        95/100  ############-    |
|  Code Quality    88/100  ###########--    |
|  Bundle Size     97/100  ############-    |
+===========================================+
|   OVERALL         90/100                  |
|   STATUS          READY TO SHIP           |
+===========================================+
<details> <summary>Demo</summary> <img src="assets/demo.gif" alt="Ultraship — SEO audit, secret scanning, scorecard" width="100%"/> </details>

Tools (40)

Each tool is a standalone Node.js script (node tools/<name>.mjs). JSON output. Exit 0 always. No build step.

Auditing

ToolWhat it checks
seo-scanner63 rules: 39 SEO (meta tags, canonicals, headings, OG tags, structured data, sitemap, cross-page duplicate/orphan detection), 20 GEO (AI bot access in robots.txt, snippet restrictions, llms.txt, structured data for AI extraction), 4 AEO (FAQPage/HowTo/speakable schema)
a11y-scannerWCAG 2.2 A/AA static checks: missing alt text, unlabeled form controls, icon-only buttons, missing lang/title/main, heading order, positive tabindex, zoom disabled, duplicate ids, broken aria references. Zero false positives.
ship-gateBlocking quality gate — scores all auditors (shared math with /ship), compares to .ultraship/ship-gate.json thresholds, hard-fails on leaked secrets / critical findings, exits 1 on fail. Generates a pre-push hook + GitHub Actions workflow.
secret-scannerAWS keys, Stripe keys, JWT secrets, database URLs, private keys. Redacts values in output.
vibe-security-scannerVibe-Coding Security Sentinel — context secret-scanner misses: server-only secrets behind a NEXT_PUBLIC_/VITE_ prefix, a decoded Supabase service_role key exposed to the client, service_role in a "use client" file, Supabase tables with no RLS. Zero false positives.
eval-scannerLocates every LLM call site (Anthropic, OpenAI, Gemini, Mistral, Cohere, Ollama, Vercel AI SDK, LangChain) by provider + model id, detects the test runner and whether an eval suite exists. Flags AI features shipping with no evals. Seeds /evals. Zero false positives.
code-profilerN+1 queries, sync I/O in handlers, unbounded queries, missing indexes, memory leaks, sequential awaits, ReDoS risk
bundle-trackerJS/CSS/image sizes in build output. Detects heavy deps (momentdayjs, lodash→native). History for before/after. Monorepo-aware.
dep-doctorUnused dependencies via import graph analysis (not just grep). Dead wrapper files. Outdated packages.
content-scorerFlesch-Kincaid readability, keyword density, thin content detection, GEO heading analysis
lighthouse-runnerLighthouse via headless Chrome. Core Web Vitals, render-blocking resources, diagnostics.

Validation

ToolWhat it checks
health-checkHTTP status, response time, SSL certificate (issuer, expiry), 6 security headers
env-validatorCompares .env.example against actual .env. Catches missing/empty/placeholder vars.
migration-checkerPending DB migrations for Drizzle, Prisma, Knex
og-validatorOpen Graph tags, image reachability, size validation
redirect-checkerRedirect chains, loops, mixed HTTP/HTTPS. Sitemap-based bulk check.
api-smoke-testHit API endpoints, check status codes, response times, CORS headers

Generators

ToolWhat it creates
sitemap-generatorsitemap.xml from HTML files and routes
robots-generatorAI-friendly robots.txt (allows GPTBot, PerplexityBot, ClaudeBot)
llms-txt-generatorllms.txt for AI assistant discoverability
structured-data-generatorJSON-LD schema markup

Competitive & Launch

ToolWhat it does
compete-analyzerCompares two URLs: tech stack, SEO score, security headers, response time. ASCII comparison card.
launch-prepReads project, generates PH/Twitter/LinkedIn/HN copy, 14-item checklist, press kit
demo-prepFinds console.logs, TODOs, placeholder text, missing favicons. Scores demo readiness.

Operations

ToolWhat it does
incident-commanderHealth check + git culprit analysis + error patterns + rollback commands + post-mortem template
growth-trackerUptime, git velocity, SEO trajectory, dep health. Stores snapshots for week-over-week comparison.
cost-trackerLog AI token usage per feature/model. Built-in pricing for Claude, GPT-4o, Gemini. Daily trends.
pentest-scannerAutomated penetration testing: XSS, SQLi, SSTI, command injection, path traversal, CORS, JWT, GraphQL introspection, prototype pollution, race conditions, request smuggling. Zero false positives, every finding has proof-of-concept.
canary-monitorPost-deploy canary monitoring: HTTP status, response time, error patterns, baseline regression detection. Auto-saves baselines for future comparison.
retro-analyzerSprint retrospective: git velocity, commit patterns (features vs fixes), test health, hot files, shipping cadence. Generates insights and recommendations.
learnings-managerProject learnings CRUD: save, search, list, prune, export. Structured knowledge that compounds across sessions.

Project Analysis

ToolWhat it does
onboard-generatorAuto-generates developer guide: stack, directory tree, routes, schema, env vars, Mermaid diagram
architecture-mapper4 Mermaid diagrams: system overview, route tree, DB ER, data flow. Circular dependency + orphan detection.
pattern-analyzerAnalyzes testing, error handling, TypeScript usage, CI/CD, git practices. Cross-repo comparison.
audit-historySaves/compares audit scores over time

Integrations (optional)

ToolWhat it does
gsc-clientGoogle Search Console: submit sitemaps, inspect URLs, query rankings (requires ULTRASHIP_GSC_CREDENTIALS)
bing-webmasterBing Webmaster: submit sitemaps/URLs, IndexNow instant push, keyword research, backlinks, site-scan, URL inspection (requires ULTRASHIP_BING_KEY). Powers ChatGPT Search + Microsoft Copilot.
ga4-clientGoogle Analytics 4: overview, top-pages, landing-pages, traffic-sources, conversions, user-journey, devices, realtime, ai-traffic (ChatGPT/Perplexity/Copilot tracking), organic (search-only). --organic flag.
keyword-intelligence12-command keyword engine: analyze, quick-wins, cannibalization, content-gaps, intent-map, trending, high-intent, page-keywords, content-decay, difficulty, anomalies (CTR anomalies), cross-reference (GSC↔GA4). --brand flag for non-brand filtering.
index-doctorIndex diagnosis: inspect URLs via GSC URL Inspection API, diagnose 15+ coverage states, auto-fix and submit to Bing.

View source on GitHub