SEO Audit Skill

Skill

Enter a URL and get a single-page SEO audit report in HTML: checks title and meta description, H1, robots, sitemap, structured data and more, and lists priority fixes. Needs local Python; the full audit also needs a Google PageSpeed API key.

JeffLi1993/seo-audit-skill766
Voir sur GitHub
README

seo-audit-skill

English · 中文 · SEO Audit Agent Skill

Reusable Agent Skills for single-page SEO auditing. Give it a URL — get a structured HTML report with actionable findings.

Built on a Script + LLM two-layer architecture: Python scripts handle deterministic checks (HTTP status, XML parsing, string matching), while the LLM handles semantic judgment (keyword intent, content quality, page type inference). Works with Claude Code, Cursor, and any agent runtime that supports SKILL.md.

Best practices

  1. Run npx skills add JeffLi1993/seo-audit-skill, then audit your page (for example: audit this page: https://example.com). Open the report at reports/<hostname>-audit.html and review it yourself: keep what matters for your goals, skip what does not.
  2. Share the report (or the key sections) with Cursor or Claude Code and have the assistant work through the findings and fixes item by item.

Report Output

Each basic audit produces a standalone HTML report saved to reports/<hostname>-audit.html. Full audits save to reports/<hostname>-full-audit.html.

SectionWhat you get
Audit SummaryOne-line verdict + critical / warnings / passing at a glance
Site ChecksSitemap URL Inventory · Crawlability · URL Canonicalization · i18n · Schema · E-E-A-T
Page SpeedFull only — Lighthouse scores, lab metrics, final URL, screenshot availability
Page ChecksTDK · H1 · Headings · Word Count · Internal Links · Social Tags
Priority ActionsTop 3 highest-impact fixes, ranked
Insight WalkthroughEvidence → Impact → Fix for each major finding
audit this page: https://openclaw.ai
→ ✅ Report saved → reports/openclaw-ai-audit.html
WebsiteAudit SummarySite ChecksPage Checks & insights
colaos.aiAudit SummarySite ChecksPage Checks and insights

Skills

SkillTierWhen to use
seo-auditBasicDefault — give it a URL, get a 20+ check structured report
seo-audit-fullFullDeep audit with PageSpeed, sitemap inventory, social tags, content quality, GSC data, competitor gap

seo-audit-full requires a Google PageSpeed Insights API key for PageSpeed checks. Set PAGESPEED_API_KEY / GOOGLE_PAGESPEED_API_KEY, or pass --api-key; without a key, the full audit stops and asks you to configure one.


Audit Coverage

Site-level

CheckWhat it verifiesBasicFull
Sitemap URL InventoryStandalone table of top sitemap directories: URL count, page type, representative example URL—✅
Staging Subdomain IndexationDetects public test., staging., dev., preview., beta., uat. hosts that mirror production and may be indexable—✅
robots.txtRFC 9309 group parsing, Allow/Disallow logic, Googlebot status, Sitemap directives✅✅
sitemap.xmlValid XML, URL count, follows Sitemap directive path from robots.txt, samples child sitemap URLs when needed✅✅
404 HandlingTrue 404 vs soft 404 (200) vs redirect-to-homepage (301)✅✅
URL CanonicalizationHTTP→HTTPS redirect, www consistency, trailing slash, canonical tag match✅✅
i18n / hreflangReciprocal symmetry, BCP 47 codes, x-default, default-language URL duplication, canonical/hreflang alignment✅✅
Schema (JSON-LD)Parseability, @type detection, required/recommended fields, nested fields, type conflicts, localized schema language/URL alignment✅✅
E-E-A-T Trust PagesAbout / Contact / Privacy / Terms — exists (HTTP 200) + reachable from footer/nav✅✅
GSC Crawl StatusIndex coverage, crawl errors, blocked resources—✅
PageSpeed / LighthousePerformance · Accessibility · Best Practices · SEO scores, lab metrics, final URL, screenshot availability—✅

Sitemap URL Inventory is intentionally rendered as its own table before Crawlability:

DirectoryURL CountPage TypeExample Page
/blog/300Blog / Content Pageshttps://xx.ai/blog/best-ai-video-tools
/tools/80Tool Pageshttps://xx.ai/tools/image-generator
/alternatives/40Alternative / Competitor Pageshttps://xx.ai/alternatives/synthesia

Use it as a site-level map, then choose representative URLs from important directories for deeper full audits.

Page-level

CheckWhat it verifiesBasicFull
URL SlugLowercase, hyphenated, keyword present, stop word & stuffing detection✅✅
Title Tag50–60 chars, keyword position, homepage vs inner page rules✅✅
Meta Description120–160 chars, keyword match, concrete value prop (not generic fluff)✅✅
H1 TagSingle H1, keyword match (full / partial / none), semantic intent review✅✅
Canonical TagSelf-referencing, matches final URL after redirects✅✅
Image Alt TextAlt attribute check on all <img>, JS-render detection✅✅
Word CountBody text ≥ 500 words, thin content flag✅✅
Keyword PlacementPrimary keyword within first 100 body words✅✅
Heading StructureH2 count (target 5–7), H3/H2 ratio, keyword distribution in H2s✅✅
Internal LinksSame-origin links (excl. nav/footer), equity distribution✅✅
OG / Social Tagsog:image, twitter:card, social preview completeness—✅
Content QualityE-E-A-T depth, readability, specificity vs competitors—✅
Robots Metanoindex, nofollow, max-snippet directives—✅

Structure

seo-audit-skill/
├── seo-audit/
│   ├── SKILL.md                       # Skill definition + agent workflow
│   ├── references/REFERENCE.md        # Field definitions, edge cases
│   ├── assets/report-template.html    # HTML output template
│   └── scripts/
│       ├── check-site.py              # robots.txt + sitemap → JSON
│       ├── check-page.py              # TDK + H1 + canonical + slug → JSON
│       ├── check-schema.py            # JSON-LD extraction + validation → JSON
│       └── fetch-page.py              # Raw HTML fetcher, SSRF protection
└── seo-audit-full/
    ├── SKILL.md
    ├── references/REFERENCE.md
    ├── assets/report-template.html
    └── scripts/
        ├── check-site.py              # staging + sitemap inventory + robots/sitemap → JSON
        ├── check-pagespeed.py         # PageSpeed Insights / Lighthouse → JSON
        ├── check-social.py            # OG + Twitter Card validation → JSON
        └── check-schema.py            # JSON-LD quality + localized schema validation → JSON

Architecture: Script + LLM

URL
 │
 ▼
┌──────────────────────────────────────────────────┐
│  Layer 1 · Python Scripts                        │
│  Deterministic checks → structured JSON          │
│                                                  │
│  check-site.py      sitemap inventory, staging   │
│  check-page.py      H1 / title / meta / canonical│
│  check-schema.py    JSON-LD fields + localization│
│  fetch-page.py      raw HTML + SSRF protection   │
└───────────────────────┬──────────────────────────┘
                        │ JSON + llm_review_required flag
                        ▼
┌──────────────────────────────────────────────────┐
│  Layer 2 · LLM Agent                             │
│  Semantic judgment on flagged fields only         │
│                                                  │
│  · Keyword intent alignment (H1 / title)         │
│  · Meta description quality & specificity        │
│  · Page type → expected Schema @type mapping     │
│  · E-E-A-T trust page reachability (footer/nav)  │
│  · Content analysis (word count, heading, links) │
└───────────────────────┬──────────────────────────┘
                        │
                        ▼
              report-template.html
              → reports/<hostname>-audit.html

Why two layers? Scripts handle the 80% of checks that are deterministic — does robots.txt exist? Is the title 55 characters? The LLM handles the 20% that require understanding — does this H1 semantically cover the intent of "AI workflow automation"? The llm_review_required flag ensures the LLM only intervenes when the script explicitly cannot make the call. No hallucination on factual checks, no blind spots on semantic ones.


Installation

Option 1: CLI (Recommended)

npx skills add JeffLi1993/seo-audit-skill

# Or install a specific tier
npx skills add JeffLi1993/seo-audit-skill --skill seo-audit
npx skills add JeffLi1993/seo-audit-skill --skill seo-audit-full

Option 2: Claude Code Plugin

/plugin marketplace add JeffLi1993/seo-audit-skill
/plugin install seo-audit-skill

Usage

audit this page: https://example.com

Scripts

All scripts output structured JSON to stdout. Exit code 0 = pass/warn, 1 = any fail.

ScriptWhat it does
check-site.pyrobots.txt + sitemap + sitemap inventory — RFC 9309 parsing, staging subdomain checks, top directory grouping
check-page.pyH1 / title / meta / canonical / URL slug — keyword match with stop-word-aware filter
check-schema.pyJSON-LD extraction, @graph flattening, @type + required field validation, localized schema alignment
fetch-page.pyRaw HTML fetch — SSRF protection, redirect chain tracking, Googlebot UA option
check-pagespeed.pyFull only — PageSpeed Insights / Lighthouse scores and lab metrics; requires API key
check-social.pyFull only — OG tags + Twitter Card validation

Dependency: pip install requests


License

MIT