Website audit
Custom Claude Code skills for session handoff, verification, planning, research, audits, and decision-gathering.
npx -y skills add giovicordova/skills-gc --skill website-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Audits any website for SEO, AEO (Answer Engine Optimization), GEO (Generative Engine Optimization), and Structured Data. Crawls with Playwright, runs Lighthouse, checks Perplexity citations, applies research-backed rules, scores deterministically, and produces a prioritised fix list with letter grades. Use this skill whenever the user mentions a domain or URL and wants to know what's wrong with it from an SEO, content, structured data, or AI-readiness perspective — even if they don't use the word 'audit'. Triggers include: auditing a website, checking SEO issues, evaluating AI-readiness or answer-engine optimisation, comparing two sites or documentation portals, reviewing structured data or JSON-LD, checking robots.txt AI crawler policy, running a website health check, assessing whether content will appear in Perplexity/ChatGPT search results, or any request for a scored website quality analysis. Also triggers on: /website-audit [domain] [categories...]
SKILL.md
10.1 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
Website Audit
Audit any website across 5 categories: AEO, GEO, SEO Technical, SEO On-Page, and Structured Data. Produces a scored, prioritised report with actionable fixes.
Arguments
/website-audit <domain> [categories...] [+refresh] [comparison-domain]
- domain (required): The site to audit (e.g.
example.com) - categories (optional): Subset of
aeo,geo,seo-technical,seo-on-page,structured-data. Omit to audit all 5. - +refresh: Force-refresh reference files even if <30 days old.
- comparison-domain: If a second domain is provided, run comparison mode.
Dependencies
Before starting, verify these are available. If any are missing, tell the user what to install and stop.
- Node.js 22+ (
node --version) - Playwright CLI (
npx playwright --version) — if missing:npx playwright install chromium - Python 3 (
python3 --version) - Lighthouse (
lighthouse --version) — if missing:npm install -g lighthouse - jq (
jq --version) - Optional:
PERPLEXITY_API_KEYenv var for citation checking
Audit Flow
Work through these phases in order. Each phase builds on the previous one's data.
Phase 0: Setup
- Parse arguments. Extract domain(s) and requested categories. Default to all 5 categories.
- Check dependencies. Run the version commands above. Stop on failure.
- Comparison mode? If two domains provided, set
COMPARISON_MODE=true. You will run the full audit on each domain, then produce a comparison report instead of two separate ones. - Reference freshness. Check if any file in
references/is >30 days old (use file modification time). If so, or if+refreshwas requested, readreferences/refresh-guide.mdand follow its instructions to update stale files. If all files are fresh and no+refresh, skip this.
Phase A: Crawl Technical Files + Homepage
Run these four tasks in parallel:
-
robots.txt + sitemap.xml — Fetch via curl:
curl -sL "https://{domain}/robots.txt" -o /tmp/audit-robots.txt curl -sL "https://{domain}/sitemap.xml" -o /tmp/audit-sitemap.xmlParse robots.txt for Disallow rules and AI bot directives. Parse sitemap for URL list.
-
Lighthouse — Spawn a background subagent:
Agent(lighthouse-runner): model: haiku prompt: | Run Lighthouse audit on https://{domain} using the script at {skill_path}/scripts/lighthouse.sh Save the JSON output to /tmp/audit-lighthouse-{domain}.json Extract and return: performance score, accessibility score, best-practices score, SEO score, and Core Web Vitals (LCP, FID, CLS). -
Perplexity citation check — Spawn a background subagent (skip if no
PERPLEXITY_API_KEY):Agent(perplexity-checker): model: haiku prompt: | Check if {domain} is cited by Perplexity AI using the script at {skill_path}/scripts/perplexity-check.sh Domain: {domain} Generate 5 queries likely to surface this domain based on its content. Save results to /tmp/audit-perplexity-{domain}.json Return: number of queries tested, number with citations, citation details. -
Homepage crawl — Use Playwright to navigate to
https://{domain}and run the extraction function frommodules/extraction.js. This captures 20+ signals per page (headings, meta tags, structured data, links, content metrics, etc.).
Phase B: Page Discovery and Classification
Using the sitemap URLs and internal links found on the homepage:
- Build page list. Merge sitemap URLs with discovered internal links. Deduplicate. Cap at 20 pages for audit (prioritise: homepage, key landing pages, blog posts, product pages).
- Classify pages. Assign each URL a type:
homepage,blog,product,about,contact,landing,legal,other. Use URL patterns and page titles to classify.
Phase C: Parallel Page Crawling
For each page in the audit list (beyond the homepage already crawled):
- Navigate with Playwright and run
modules/extraction.json each page. - Process pages in batches of 3-5 to avoid overwhelming the browser.
- Store extraction results per URL.
Phase D: Blog/Article Analysis
For pages classified as blog or article:
- Run additional AEO checks: Does the first paragraph answer a question? Are there answer blocks of 40-60 words? Question-based headings?
- Run additional GEO checks: Author visible? Credentials stated? Published date? Sources linked? Fact density?
- These signals feed into the category scoring.
Phase E: Apply Rules and Score
This is where the audit happens. For each requested category:
-
Read the reference file. Load the relevant file from
references/(e.g.,references/aeo.mdfor AEO). -
Apply each rule against the crawled data. For every check, record:
- Check ID (e.g.
AEO-C1) - Description
- Severity:
Critical,Important, orNice to have - Result:
PASS,WARNING,FAIL,N/A, orUNTESTABLE - Evidence (what you observed)
- Fix (if FAIL or WARNING — what specifically to change)
- Check ID (e.g.
-
Also apply
references/indexability.mdrules (always) andreferences/ai-bots.mdanalysis (always, but informational — does not affect score). -
Run schema deprecation check if structured-data category is included:
bash {skill_path}/scripts/check-schema-deprecations.sh '<json-ld-content>' -
Score deterministically. Write the check results as JSON to a temp file, then run:
python3 {skill_path}/scripts/score.py /tmp/audit-checks-{domain}.jsonThe scoring engine handles severity weighting, category weighting, and grade calculation. Read its output for the final scores.
Phase F: Generate Report
- Read the report template from
modules/report-template.md. - Populate the template with all collected data: site profile, AI crawler policy analysis, per-category results with check details, Lighthouse results (when ready), Perplexity citation results (when ready), and the prioritised fix list.
- Write the report with the naming convention:
- Single site:
{YYYY-MM-DD}-audit-{domain}.md - Comparison:
{YYYY-MM-DD}-compare-{domain1}-vs-{domain2}.md
- Single site:
- Place the report in the current working directory.
Scoring System
The scoring is fully deterministic and handled by scripts/score.py. Here is how it works so you can explain it to the user:
Severity weights: Critical = 3, Important = 2, Nice to have = 1
Result multipliers: PASS = 1.0, WARNING = 0.5, FAIL = 0.0
N/A and UNTESTABLE are excluded from both numerator and denominator — they do not affect the score.
Category score = sum(weight x multiplier) / sum(weights) x 100
Category weights for overall score:
| Category | Weight |
|---|---|
| AEO | 25% |
| GEO | 25% |
| SEO Technical | 20% |
| SEO On-Page | 15% |
| Structured Data | 15% |
If only some categories are audited, weights redistribute proportionally among audited categories.
Letter grades: A+ (95+), A (90-94), B+ (85-89), B (80-84), C+ (75-79), C (70-74), D (60-69), F (<60)
Check Result JSON Format
When writing check results for the scoring engine, use this structure:
{
"domain": "example.com",
"categories": {
"aeo": {
"checks": [
{
"id": "AEO-C1",
"description": "First paragraph answers the page's primary question",
"severity": "Critical",
"result": "PASS",
"evidence": "First paragraph provides a direct answer in 45 words",
"fix": null
}
]
}
}
}
Comparison Mode
When two domains are provided:
- Run the full audit (Phases A-E) on both domains.
- Instead of two separate reports, produce a single comparison report:
- Side-by-side score table (overall + per category)
- Category-by-category analysis of differences
- Top 3 priority fixes for each site
- Winner per category with reasoning
- Use the comparison naming convention for the output file.
Important Guidance
- Be thorough but honest. Mark checks as
UNTESTABLEwhen you genuinely cannot verify something from a crawl (e.g., server-side configuration). Do not guess. - Evidence matters. Every FAIL and WARNING must include specific evidence (the actual meta description length, the actual heading text, the actual schema type found). This makes the report actionable.
- Prioritise fixes. The fix list at the end of the report should be ordered by impact: Critical FAILs first, then Critical WARNINGs, then Important FAILs, and so on.
- Do not fabricate data. If Lighthouse or Perplexity subagents fail or are unavailable, note this in the report and mark those checks as UNTESTABLE. Do not invent scores.
- Respect rate limits. Add 1-2 second delays between Playwright page navigations to avoid being blocked.
What ships with it: 42 files
221.1 KB alongside SKILL.md, 5 of them executable
evals/
- evals.json1.3 KB
modules/
- extraction.jsruns6.0 KB
- report-template.md4.0 KB
references/
- aeo.md4.5 KB
- ai-bots.md3.7 KB
- geo.md5.0 KB
- indexability.md2.4 KB
- seo-on-page.md3.7 KB
- seo-technical.md4.3 KB
- structured-data.md6.2 KB
scripts/
- check-schema-deprecations.shruns2.7 KB
- lighthouse.shruns1.2 KB
- perplexity-check.shruns1.9 KB
- score.pyruns4.1 KB
workspace/
- iteration-1/benchmark.json3.1 KB
- iteration-1/benchmark.md359 B
- iteration-1/eval-1-partial-audit/eval_metadata.json1.3 KB
- iteration-1/eval-1-partial-audit/without_skill/grading.json1.6 KB
- iteration-1/eval-1-partial-audit/without_skill/outputs/seo-technical-structured-data-audit.md18.3 KB
- iteration-1/eval-1-partial-audit/without_skill/timing.json88 B
- iteration-1/eval-1-partial-audit/with_skill/grading.json1.6 KB
- iteration-1/eval-1-partial-audit/with_skill/outputs/2026-04-04-audit-claude-ai.md13.4 KB
- iteration-1/eval-1-partial-audit/with_skill/outputs/2026-04-04-checks-claude-ai.json14.0 KB
- iteration-1/eval-1-partial-audit/with_skill/outputs/2026-04-04-scores-claude-ai.json658 B
- iteration-1/eval-1-partial-audit/with_skill/timing.json88 B
- iteration-1/eval-2-full-audit/eval_metadata.json1.5 KB
- iteration-1/eval-2-full-audit/without_skill/grading.json2.0 KB
- iteration-1/eval-2-full-audit/without_skill/outputs/anthropic-com-full-audit.md20.0 KB
- iteration-1/eval-2-full-audit/without_skill/timing.json88 B
- iteration-1/eval-2-full-audit/with_skill/grading.json2.2 KB
- iteration-1/eval-2-full-audit/with_skill/outputs/2026-04-04-audit-anthropic-com.md22.1 KB
- iteration-1/eval-2-full-audit/with_skill/timing.json88 B
- iteration-1/eval-3-comparison/eval_metadata.json1.2 KB
- iteration-1/eval-3-comparison/without_skill/grading.json1.5 KB
- iteration-1/eval-3-comparison/without_skill/outputs/aeo-geo-comparison-report.md15.8 KB
- iteration-1/eval-3-comparison/without_skill/outputs/comparison-summary-table.md2.0 KB
- iteration-1/eval-3-comparison/without_skill/timing.json88 B
- iteration-1/eval-3-comparison/with_skill/grading.json1.6 KB
- iteration-1/eval-3-comparison/with_skill/outputs/2026-04-04-compare-docs-anthropic-com-vs-platform-openai-com.md15.0 KB
- website-audit.skill25.9 KB
2 more files not listed here. See all 42 in the repository.