
Web Quality Audit
- 170 installs
- 5k repo stars
- Updated August 4, 2026
- tech-leads-club/agent-skills
This is a copy of web-quality-audit by addyosmani - installs and ranking accrue to the original listing.
Use web-quality-audit for development tasks
About
web-quality-audit: A skill for development. This provides functionality for development workflows.
- web-quality-audit
Web Quality Audit by the numbers
- 170 all-time installs (skills.sh)
- +9 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/tech-leads-club/agent-skills --skill web-quality-auditAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 170 |
|---|---|
| repo stars | ★ 5k |
| Last updated | August 4, 2026 |
| Repository | tech-leads-club/agent-skills ↗ |
What it does
Use web-quality-audit for development tasks
Files
Web quality audit
Comprehensive quality review based on Google Lighthouse audits. Covers Performance, Accessibility, SEO, and Best Practices across 150+ checks.
How it works
1. Analyze the provided code/project for quality issues 2. Categorize findings by severity (Critical, High, Medium, Low) 3. Provide specific, actionable recommendations 4. Include code examples for fixes
Audit categories
Performance (40% of typical issues)
Core Web Vitals — Must pass for good page experience:
- LCP (Largest Contentful Paint) < 2.5s. The largest visible element must render quickly. Optimize images, fonts, and server response time.
- INP (Interaction to Next Paint) < 200ms. User interactions must feel instant. Reduce JavaScript execution time and break up long tasks.
- CLS (Cumulative Layout Shift) < 0.1. Content must not jump around. Set explicit dimensions on images, embeds, and ads.
Resource Optimization:
- Compress images. Use WebP/AVIF with fallbacks. Serve correctly sized images via
srcset. - Minimize JavaScript. Remove unused code. Use code splitting. Defer non-critical scripts.
- Optimize CSS. Extract critical CSS. Remove unused styles. Avoid
@import. - Efficient fonts. Use
font-display: swap. Preload critical fonts. Subset to needed characters.
Loading Strategy:
- Preconnect to origins. Add
<link rel="preconnect">for third-party domains. - Preload critical assets. LCP images, fonts, and above-fold CSS.
- Lazy load below-fold content. Images, iframes, and heavy components.
- Cache effectively. Long cache TTLs for static assets. Immutable caching for hashed files.
Accessibility (30% of typical issues)
Perceivable:
- Text alternatives. Every
<img>has meaningfulalttext. Decorative images usealt="". - Color contrast. Minimum 4.5:1 for normal text, 3:1 for large text (WCAG AA).
- Don't rely on color alone. Use icons, patterns, or text alongside color indicators.
- Captions and transcripts. Video has captions. Audio has transcripts.
Operable:
- Keyboard accessible. All functionality available via keyboard. No keyboard traps.
- Focus visible. Clear focus indicators on all interactive elements.
- Skip links. Provide "Skip to main content" for keyboard users.
- Sufficient time. Users can extend time limits. No auto-advancing content without controls.
Understandable:
- Page language. Set
langattribute on<html>. - Consistent navigation. Same navigation structure across pages.
- Error identification. Form errors clearly described and associated with fields.
- Labels and instructions. All form inputs have associated labels.
Robust:
- Valid HTML. No duplicate IDs. Properly nested elements.
- ARIA used correctly. Prefer native elements. ARIA roles match behavior.
- Name, role, value. Interactive elements have accessible names and correct roles.
SEO (15% of typical issues)
Crawlability:
- Valid robots.txt. Doesn't block important resources.
- XML sitemap. Lists all important pages. Submitted to Search Console.
- Canonical URLs. Prevent duplicate content issues.
- No noindex on important pages. Check meta robots and headers.
On-Page SEO:
- Unique title tags. 50-60 characters. Primary keyword included.
- Meta descriptions. 150-160 characters. Compelling and unique.
- Heading hierarchy. Single
<h1>. Logical heading structure. - Descriptive link text. Not "click here" or "read more".
Technical SEO:
- Mobile-friendly. Responsive design. Tap targets ≥ 48px.
- HTTPS. Secure connection required.
- Fast loading. Performance directly impacts ranking.
- Structured data. JSON-LD for rich snippets (Article, Product, FAQ, etc.).
Best practices (15% of typical issues)
Security:
- HTTPS everywhere. No mixed content. HSTS enabled.
- No vulnerable libraries. Keep dependencies updated.
- CSP headers. Content Security Policy to prevent XSS.
- No exposed source maps. In production builds.
Modern Standards:
- No deprecated APIs. Replace
document.write, synchronous XHR, etc. - Valid doctype. Use
<!DOCTYPE html>. - Charset declared.
<meta charset="UTF-8">as first element in<head>. - No browser errors. Clean console. No CORS issues.
UX Patterns:
- No intrusive interstitials. Especially on mobile.
- Clear permission requests. Only ask when needed, with context.
- No misleading buttons. Buttons do what they say.
Severity levels
| Level | Description | Action |
|---|---|---|
| Critical | Security vulnerabilities, complete failures | Fix immediately |
| High | Core Web Vitals failures, major a11y barriers | Fix before launch |
| Medium | Performance opportunities, SEO improvements | Fix within sprint |
| Low | Minor optimizations, code quality | Fix when convenient |
Audit output format
When performing an audit, structure findings as:
## Audit results
### Critical issues (X found)
- **[Category]** Issue description. File: `path/to/file.js:123`
- **Impact:** Why this matters
- **Fix:** Specific code change or recommendation
### High priority (X found)
...
### Summary
- Performance: X issues (Y critical)
- Accessibility: X issues (Y critical)
- SEO: X issues
- Best Practices: X issues
### Recommended priority
1. First fix this because...
2. Then address...
3. Finally optimize...Quick checklist
Before every deploy
- [ ] Core Web Vitals passing
- [ ] No accessibility errors (axe/Lighthouse)
- [ ] No console errors
- [ ] HTTPS working
- [ ] Meta tags present
Weekly review
- [ ] Check Search Console for issues
- [ ] Review Core Web Vitals trends
- [ ] Update dependencies
- [ ] Test with screen reader
Monthly deep dive
- [ ] Full Lighthouse audit
- [ ] Performance profiling
- [ ] Accessibility audit with real users
- [ ] SEO keyword review
References
For detailed guidelines on specific areas:
- Performance Optimization
- Core Web Vitals
- Accessibility
- SEO
- Best Practices
#!/bin/bash
set -e
# Web Quality Audit Script
# Analyzes HTML files for common quality issues
usage() {
echo "Usage: $0 <file_or_directory>" >&2
echo "Analyzes HTML files for web quality issues." >&2
exit 1
}
if [ -z "$1" ]; then
usage
fi
TARGET="$1"
ISSUES=()
WARNINGS=()
analyze_html() {
local file="$1"
echo "Analyzing: $file" >&2
# Check for doctype
if ! grep -qi "<!doctype html>" "$file"; then
ISSUES+=("$file: Missing HTML5 doctype")
fi
# Check for charset
if ! grep -qi 'charset.*utf-8' "$file"; then
WARNINGS+=("$file: Missing or non-UTF-8 charset declaration")
fi
# Check for viewport
if ! grep -qi 'name="viewport"' "$file"; then
ISSUES+=("$file: Missing viewport meta tag")
fi
# Check for lang attribute
if ! grep -qi '<html.*lang=' "$file"; then
ISSUES+=("$file: Missing lang attribute on <html>")
fi
# Check for images without alt
if grep -qE '<img[^>]*>' "$file" && grep -qE '<img(?![^>]*alt=)[^>]*>' "$file" 2>/dev/null; then
WARNINGS+=("$file: Possible images without alt text")
fi
# Check for title tag
if ! grep -qi '<title>' "$file"; then
ISSUES+=("$file: Missing <title> tag")
fi
# Check for HTTPS in links
if grep -qE 'http://' "$file"; then
WARNINGS+=("$file: Contains non-HTTPS URLs")
fi
}
# Process files
if [ -d "$TARGET" ]; then
find "$TARGET" -name "*.html" -o -name "*.htm" | while read -r file; do
analyze_html "$file"
done
elif [ -f "$TARGET" ]; then
analyze_html "$TARGET"
else
echo "Error: $TARGET is not a valid file or directory" >&2
exit 1
fi
# Output results as JSON
echo '{'
echo ' "issues": ['
for i in "${!ISSUES[@]}"; do
if [ $i -gt 0 ]; then echo ','; fi
echo -n " \"${ISSUES[$i]}\""
done
echo ''
echo ' ],'
echo ' "warnings": ['
for i in "${!WARNINGS[@]}"; do
if [ $i -gt 0 ]; then echo ','; fi
echo -n " \"${WARNINGS[$i]}\""
done
echo ''
echo ' ],'
echo " \"issueCount\": ${#ISSUES[@]},"
echo " \"warningCount\": ${#WARNINGS[@]}"
echo '}'