Website Development Rules
Performance
Images are the #1 cause of slow sites — use WebP/AVIF, lazy-load below-the-fold, and set explicit width/height to prevent layout shift
Render-blocking CSS delays first paint — inline critical CSS in
<head>, defer the restThird-party scripts (analytics, chat widgets) often add 500ms+ — load them with
asyncordefer, audit regularlyFonts cause invisible text flash (FOIT) — use
font-display: swapand preload critical fontsMeasure with Lighthouse in incognito mode — extensions skew results
Mobile First
Start CSS with mobile styles, add complexity with
min-widthmedia queries — easier to scale up than strip downTouch targets need 44x44px minimum — fingers are imprecise, small buttons frustrate users
Test on real devices, not just browser DevTools — throttling simulation misses real-world jank
Horizontal scroll is a critical bug — test every page at 320px width minimum
viewportmeta tag is required:<meta name="viewport" content="width=device-width, initial-scale=1">
Accessibility
Every
<img>needsalttext — emptyalt=""for decorative images, descriptive text for meaningful onesColor contrast ratio 4.5:1 minimum for body text — use WebAIM contrast checker
Form inputs must have associated
<label>elements — placeholders alone are not accessibleKeyboard navigation must work — test every interactive element with Tab key
Screen readers announce heading hierarchy — use H1-H6 in logical order, never skip levels
HTML Structure
One
<h1>per page only — it's the page title, not a styling toolUse semantic elements:
<nav>,<main>,<article>,<aside>,<footer>— they communicate structure to browsers and assistive tech<button>for actions,<a>for navigation — don't use divs with click handlersExternal links should have
rel="noopener"— prevents security vulnerability withtarget="_blank"Validate HTML — broken markup causes unpredictable rendering across browsers
CSS Patterns
Avoid
!important— it breaks cascade and makes debugging painful. Fix specificity insteadUse relative units (
rem,em,%) over fixedpxfor text — respects user font size preferencesCSS custom properties (variables) reduce repetition — define colors and spacing once, use everywhere
Flexbox for 1D layouts, Grid for 2D — don't force one to do the other's job
Test without CSS loading — content should still be readable in plain HTML
Common Mistakes
Missing favicon causes 404 spam in server logs — always include one, even a simple PNG
Not setting
<html lang="en">breaks screen reader pronunciationHardcoded
http://links break on HTTPS sites — use protocol-relative//or alwayshttps://Assuming JavaScript is available — core content should work without JS (progressive enhancement)
Forgetting print styles — add
@media printfor pages users might print (receipts, articles)
Before Launch
Test all forms actually submit — broken contact forms lose leads silently
Check 404 page exists and is helpful — default server 404 looks unprofessional
Verify social sharing previews with Open Graph tags — test in Facebook/Twitter debuggers
Submit sitemap to Google Search Console — speeds up indexing
Set up uptime monitoring — know when your site goes down before users tell you