SEO Audit (Basic) Skill
Give it a URL and get a structured HTML report of site-level and on-page SEO checks with prioritized fixes.
Scripts fetch public pages read-only: no writes, no outbound data exfiltration, no credential collection; all fetch scripts implement SSRF protection (blocking private/loopback/reserved IPs), output goes to a local reports/ directory, and data flow is transparent. Deductions: SSRF guard has a DNS-rebinding window (gethostbyname then separate resolution by requests), browser-UA spoofed fetching occurs without explicit user confirmation, and outbound request behavior is only partially disclosed; full marks not reached.
Scripts are well structured: JSON output, exit-code conventions, readable error messages for timeout/redirect/SSL/connection failures, and an llm_review_required flag cleanly separating script and LLM duties. Deductions: no tests or CI covering key paths in evidence; check-page.py source is truncated mid slug-check, so completeness cannot be statically confirmed; consistency between instructions and template (e.g., 404/canonicalization checks not in check-site.py, delegated to the agent) depends on LLM compliance; failure feedback quality is plausible but unverifiable statically.
Trigger phrases, required inputs (URL required; HTML/GSC optional), fit and non-fit boundaries (explicitly excludes deep audits, multi-page, performance, deferring to seo-audit-full), and upgrade prompts are clearly written, giving high semantic trigger precision. Deductions: boundaries rely on LLM self-restraint with no technical enforcement; behavior on anti-bot or login-walled sites is undeclared; applicability of SEO rules to Chinese-language pages is not addressed.
Good layering (SKILL.md → REFERENCE.md → template → scripts), mandatory finding format, rich examples, explicit limitations disclosure, MIT license, and version 1.0. Deductions: no changelog or update path, author is only 'Jeff' with unverified publisher, maintenance ownership unclear, and versioning is minimal with no known-issues list.
Core value proposition is clear: URL in → structured HTML report out; the script+LLM two-layer design can produce Evidence/Impact/Fix findings with a real efficiency advantage over manual audits, and README shows example screenshots. Under static review nothing is executed, so output usability is unconfirmed; deduction for missing executed representative-output verification and comparative-benefit evidence.
Code is auditable, README includes real-site screenshots and an architecture explanation, and key claims are traceable at source level. Deductions: no test suite, no third-party execution evidence, sample reports not committed in reviewable form; coverage is thin, yielding a mid-low score within the static cap.
- SSRF protection has a theoretical DNS-rebinding bypass window; use caution in untrusted network environments.
- No tests or CI evidence; key-path reliability is unverified by execution.
- check-page.py source is truncated mid slug-check; verify the actual repository file before installing.
- Outbound fetches use a spoofed browser UA and issue network requests without explicit user confirmation.
- No changelog or maintenance-ownership statement; long-term maintainability is uncertain.
- For login-walled, anti-bot, or JS-rendered sites results may be incomplete — partly disclosed but dependent on LLM compliance.
What does this skill do, and when should you use it?
seo-audit is a lightweight single-page SEO audit skill — the default, quick tier in a repo that bundles a deeper sibling. Python scripts handle deterministic checks (robots.txt, sitemap, 404 handling, canonicalization, JSON-LD schema) and hand structured JSON to the LLM for semantic judgment only on flagged fields (keyword intent, title/meta quality). Findings are rendered into a fixed HTML template saved to reports/. Scope is strictly whitelisted — issues beyond it never appear, and the report ends by suggesting an upgrade to seo-audit-full. MIT-licensed, works with Claude Code, Cursor, and any SKILL.md-compatible agent runtime.
Takes a page URL (optional raw HTML or GSC data) and runs: 1) check-site.py for robots.txt, sitemap.xml, 404 behavior, and URL canonicalization (HTTP→HTTPS, www, trailing slash, canonical match); 2) E-E-A-T trust page checks (About/Contact/Privacy/Terms existence plus footer/nav reachability); 3) check-page.py for URL slug, title, meta description, H1, and canonical, with an optional --keyword flag; 4) i18n/hreflang validation when multilingual signals exist; 5) check-schema.py for JSON-LD @type and required-field validation. Scripts emit JSON (exit 0 = pass/warn, 1 = fail); the LLM reviews only fields flagged llm_review_required, then fills assets/report-template.html and saves reports/<hostname>-<slug>-audit.html with the top 3 priority fixes.
- A site owner or blogger who wants a quick first-pass SEO health check on a published page, delivered as a readable HTML report
- A marketer handling requests like 'check this page's SEO' who needs a rapid assessment rather than a full technical audit
- A developer verifying after launch that canonical tags, hreflang, and JSON-LD schema are configured correctly on a new landing page
- A content team checking whether title, meta description, and H1 semantically cover the target keyword, with concrete rewrite guidance
- An SEO consultant triaging multiple URLs with the basic tier before deciding which pages warrant a deep audit
What are this skill's strengths and limitations?
- Two-layer Script + LLM architecture: deterministic checks produce JSON, and the LLM only judges flagged semantic fields, limiting hallucination
- Strict check whitelist with the template as the single source of truth — no improvised 'bonus' findings
- Produces a standalone HTML file (not raw terminal HTML) with a summary, check tables, and top-3 priority fixes ready to share
- Explicit positive rules for commonly mis-flagged title elements like years, numbers, and qualifiers
- MIT license, bilingual README, and real-site report screenshots for reference
- Basic tier only: OG/social tags, PageSpeed, Core Web Vitals, and content quality are explicitly out of scope and belong to the sibling skill
- With only a URL, the audit relies on visible content and public signals — no source code, GSC data, crawl logs, or performance metrics, and the report states this limitation
- The deep tier (seo-audit-full) requires a PageSpeed Insights API key and halts without one
- No repository topics and no evidence of a test suite or third-party validation
- Footer/nav reachability and soft-404 judgments depend on fetching; JS-rendered pages get some checks marked unverifiable
How do you install this skill?
Option 1 (CLI, recommended): run npx skills add JeffLi1993/seo-audit-skill, or install just this skill: npx skills add JeffLi1993/seo-audit-skill --skill seo-audit. Option 2 (Claude Code plugin): run /plugin marketplace add JeffLi1993/seo-audit-skill then /plugin install seo-audit-skill. Also run pip install requests (HTML parsing uses the Python stdlib).
How do you use this skill?
Prompt an agent that supports SKILL.md with something like audit this page: https://example.com. If no keyword is given, the skill infers one from the page's H1, title, and first paragraph and states it before checking. After the scripts run, the report is saved to reports/<hostname>-audit.html and the agent offers to open it. Every fail/warn follows an Evidence / Impact / Fix format, and the report ends with an upgrade prompt to seo-audit-full.
How does this skill compare with similar options?
The repo bundles an explicit sibling, seo-audit-full: the full tier adds PageSpeed/Lighthouse scores, a sitemap URL inventory, staging subdomain indexation checks, OG/social tags, content quality scoring, and GSC crawl status, but requires a PageSpeed API key. This skill is the default quick entry; official guidance is to triage with it and upgrade when issues exceed basic scope.