lighthouse-optimization
Optimize web applications to achieve 95%+ Lighthouse scores across all categories. Use when optimizing performance, accessibility, best practices, or SEO for web applications.
$ Installieren
git clone https://github.com/wchklaus97/remind-me-pwa /tmp/remind-me-pwa && cp -r /tmp/remind-me-pwa/.cursor/skills/lighthouse-optimization ~/.claude/skills/remind-me-pwa// tip: Run this command in your terminal to install the skill
name: lighthouse-optimization description: Optimize web applications to achieve 95%+ Lighthouse scores across all categories. Use when optimizing performance, accessibility, best practices, or SEO for web applications.
Lighthouse Optimization
Overview
This skill covers comprehensive optimization techniques to achieve 95%+ scores in all Lighthouse categories: Performance, Accessibility, Best Practices, and SEO.
Target Scores
- Performance: â„ 95%
- Accessibility: â„ 95%
- Best Practices: â„ 95%
- SEO: â„ 95%
Performance Optimization
Core Web Vitals
Target Metrics:
- FCP (First Contentful Paint): < 1.8s
- LCP (Largest Contentful Paint): < 2.5s
- TBT (Total Blocking Time): < 200ms
- CLS (Cumulative Layout Shift): < 0.1
- Speed Index: < 3.4s
Optimization Strategies
-
Minimize JavaScript Execution
- Code splitting
- Lazy loading
- Tree shaking
-
Optimize Asset Loading
- Preload critical resources
- Defer non-critical resources
- Use efficient cache lifetimes
-
Reduce Main Thread Blocking
- Minimize synchronous operations
- Use Web Workers for heavy computations
- Optimize WASM loading
Accessibility Optimization
Critical Issues
1. Touch Targets
Requirement: All interactive elements â„ 48x48px
.btn, .tab, button {
min-width: 48px;
min-height: 48px;
padding: 12px 16px;
margin: 4px; /* Spacing between targets */
}
2. Semantic HTML
Required Elements:
<html lang="en">- Language attribute<main role="main">- Main landmark<header role="banner">- Header landmark<footer role="contentinfo">- Footer landmark
3. ARIA Labels
Add ARIA labels for screen readers:
rsx! {
button {
aria_label: "Add new reminder",
onclick: move |_| { /* ... */ },
"+ New Reminder"
}
}
4. Heading Hierarchy
Ensure proper heading structure:
- One
<h1>per page - Sequential heading levels (h1 â h2 â h3)
- No skipping levels
Accessibility Checklist
- All touch targets â„ 48x48px
- Minimum 8px spacing between touch targets
-
<html>haslangattribute -
<main>landmark present - Proper heading hierarchy
- ARIA labels for interactive elements
- Color contrast ratio â„ 4.5:1
- Keyboard navigation works
- Screen reader compatible
Best Practices Optimization
Console Errors
Fix all console errors:
- Handle all error cases
- Remove debug logs in production
- Fix WASM loading errors
- Fix CSS 404 errors
Source Maps
Enable source maps for debugging:
[profile.wasm-release]
debug = true # Enable source maps
Security Headers
Implement security headers:
- Content Security Policy (CSP)
- HSTS (if using HTTPS)
- COOP (Cross-Origin-Opener-Policy)
- X-Frame-Options
SEO Optimization
Required Elements
- Meta Tags:
rsx! {
head {
meta { charset: "utf-8" }
meta { name: "viewport", content: "width=device-width, initial-scale=1.0" }
meta { name: "description", content: "A simple and elegant reminder app" }
title { "Remind Me PWA - Your Personal Reminder Assistant" }
}
}
- Open Graph Tags (optional but recommended):
meta { property: "og:title", content: "Remind Me PWA" }
meta { property: "og:description", content: "A simple and elegant reminder app" }
meta { property: "og:type", content: "website" }
- Structured Data (optional):
- JSON-LD for better search results
Implementation Patterns
HTML Structure
rsx! {
html {
lang: "en",
head {
meta { charset: "utf-8" }
meta { name: "viewport", content: "width=device-width, initial-scale=1.0" }
meta { name: "description", content: "App description" }
title { "App Title" }
link { rel: "stylesheet", href: "assets/style.css" }
link { rel: "manifest", href: "assets/manifest.json" }
}
body {
header {
role: "banner",
// Header content
}
main {
role: "main",
// Main content
}
}
}
}
Touch Target CSS
:root {
--touch-target-min: 48px;
--touch-target-spacing: 8px;
}
.btn, .tab, button {
min-width: var(--touch-target-min);
min-height: var(--touch-target-min);
padding: 12px 16px;
margin: var(--touch-target-spacing);
}
Service Worker Optimization
const CACHE_NAME = 'remind-me-pwa-v2';
const urlsToCache = [
'/remind-me-pwa/',
'/remind-me-pwa/index.html',
'/remind-me-pwa/assets/style.css',
'/remind-me-pwa/assets/manifest.json',
'/remind-me-pwa/wasm/remind-me-pwa.wasm',
'/remind-me-pwa/wasm/remind-me-pwa.js'
];
// Cache with efficient lifetimes
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
return response || fetch(event.request).then((fetchResponse) => {
// Cache static assets with long lifetime
if (event.request.url.includes('/assets/') ||
event.request.url.includes('/wasm/')) {
const responseToCache = fetchResponse.clone();
caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, responseToCache);
});
}
return fetchResponse;
});
})
);
});
Testing and Validation
Lighthouse Audit Process
-
Run Audit:
- Open Chrome DevTools
- Go to Lighthouse tab
- Select categories
- Run audit
-
Review Results:
- Check all scores
- Review failing audits
- Note opportunities
-
Fix Issues:
- Address critical issues first
- Fix accessibility issues
- Optimize performance bottlenecks
-
Re-audit:
- Run audit again
- Verify improvements
- Target 95%+ in all categories
Automated Testing
# Install Lighthouse CI
npm install -g @lhci/cli
# Run Lighthouse CI
lhci autorun
Common Issues and Solutions
Issue: Touch Targets Too Small
Solution:
- Increase min-width/min-height to 48px
- Add padding to increase touch area
- Add spacing between elements
Issue: Missing Main Landmark
Solution:
- Wrap main content in
<main>element - Add
role="main"attribute
Issue: Missing Lang Attribute
Solution:
- Add
lang="en"to<html>element - Use appropriate language code
Issue: CSS 404 Error
Solution:
- Verify CSS path matches
base_path - Check file exists in build output
- Update service worker cache URLs
Issue: Console Errors
Solution:
- Fix all JavaScript/WASM errors
- Handle error cases gracefully
- Remove debug logs
Best Practices
DO:
- â Always test with Lighthouse before release
- â Fix accessibility issues immediately
- â Optimize performance continuously
- â Use semantic HTML
- â Ensure proper touch target sizes
- â Add all required meta tags
- â Fix console errors
DON'T:
- â Don't ignore Lighthouse warnings
- â Don't skip accessibility fixes
- â Don't use small touch targets
- â Don't forget semantic HTML
- â Don't leave console errors
- â Don't skip source maps
Resources
Repository
