Font Audit Checklist: Complete Font Usage Review Guide
A systematic checklist for auditing your website's font usage covering inventory, performance, accessibility, licensing, and ongoing governance
In Simple Terms
Start by inventorying every font loaded on your site using DevTools (document.fonts API or Network tab filtered to 'font'). Most sites load 3-8 font files; if you find more than 10, you likely have redundancies or unused fonts.Check performance: total font payload should be under 150KB (ideally under 100KB). All fonts should be WOFF2, served with immutable cache headers, and preloaded for above-the-fold content. Missing font-display causes invisible text (FOIT).Verify every font has a valid license for its usage context (web, desktop, app). Unlicensed web font usage is the #1 compliance risk found in font audits. Use our Font License Checker tool to verify permissions.
In this article
Why a Font Audit Matters
Fonts are often the most overlooked performance and compliance liability on a website. Industry data shows 70% of sites lack a font-display property, 55-60% fail font contrast ratio checks, and 40% have CLS issues caused by font loading. A font audit identifies unused fonts, licensing violations, performance bottlenecks, and accessibility gaps. Regular audits (quarterly or before major releases) prevent these issues from accumulating.
| Audit Area | Risk if Skipped | Typical Finding |
|---|---|---|
| Inventory | Unused fonts wasting bandwidth | 30% of loaded fonts are unused on the page |
| Performance | Slow LCP, layout shifts from fonts | Fonts add 300-800ms to page load |
| Accessibility | WCAG failures, poor readability | Body text below 16px or low contrast ratios |
| Licensing | Legal liability, $20K-$150K settlements | Desktop font used on web without web license |
Step 1: Font Inventory
Start by identifying every font your site loads. Open Chrome DevTools and use these methods:
// Method 1: List all loaded fonts via document.fonts API
const loadedFonts = [];
document.fonts.forEach(font => {
loadedFonts.push({
family: font.family,
weight: font.weight,
style: font.style,
status: font.status // 'loaded', 'loading', 'error', 'unloaded'
});
});
console.table(loadedFonts);
// Method 2: Check which fonts are actually used on the page
const usedFonts = new Set();
document.querySelectorAll('*').forEach(el => {
const computed = getComputedStyle(el);
usedFonts.add(computed.fontFamily.split(',')[0].trim().replace(/['"]/g, ''));
});
console.log('Fonts used on page:', [...usedFonts]);
// Method 3: Network tab - filter by "font" resource type
// DevTools > Network > filter: "font" to see all font requestsInventory Checklist
Step 2: Performance Audit
Pro Tip
Run a Lighthouse audit and look for the "Ensure text remains visible during webfont load" warning. This indicates missing font-display declarations. Also check "Reduce unused CSS" which often includes @font-face rules for unneeded weights.
Ideal @font-face Configuration
@font-face {
font-family: 'BrandFont';
src: url('/fonts/brand-regular-latin.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC,
U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074,
U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
U+FEFF, U+FFFD;
}
/* Preload in HTML <head> */
/* <link rel="preload" href="/fonts/brand-regular-latin.woff2"
as="font" type="font/woff2" crossorigin> */Step 3: Accessibility & Compliance
| WCAG Criterion | Requirement | How to Test |
|---|---|---|
| 1.4.3 Contrast | 4.5:1 (normal), 3:1 (large) | Chrome DevTools color picker, axe-core |
| 1.4.4 Resize Text | 200% zoom without loss | Browser zoom to 200%, check overflow |
| 1.4.12 Text Spacing | Override line-height, spacing without breaking | WCAG text spacing bookmarklet |
Step 4: License Compliance
Warning
Font foundries actively monitor the web for unlicensed usage. Monotype's Font Radar platform monitors over 98,000 fonts from 650+ foundries, and industry data shows 30-40% of websites have unlicensed fonts. Violation settlements range from $20,000 to $3.5M (NBC Universal paid $2M, $1.5M, and $3.5M in separate cases). Review your font licensing obligations carefully.
Audit Tools & Automation
Font Analysis
- Our Font Analyzer (browser-based)
- Wakamai Fondue (wakamaifondue.com)
- FontDrop! (fontdrop.info)
- FontTools (Python, command-line)
Performance Testing
- Lighthouse (built into Chrome DevTools)
- WebPageTest (webpagetest.org)
- Chrome UX Report (CrUX) for field data
- SpeedCurve for continuous monitoring
Accessibility
- axe DevTools (browser extension)
- WAVE Web Accessibility Evaluator
- Chrome DevTools Contrast Checker
- Pa11y (automated CI testing)
License Verification
- Our Font License Checker
- Font file metadata inspection (nameID 0, 7, 13)
- Foundry-provided license verification portals
- Internal license registry/spreadsheet
Fixing Common Issues
Issue: Fonts are TTF/WOFF instead of WOFF2
Convert all web fonts to WOFF2 using our converter tool or FontTools. WOFF2 saves 30-50% file size over TTF and 20-30% over WOFF.
Issue: Too many font weights loaded
Audit CSS to identify which weights are actually used. Most sites only need Regular (400) and Bold (700). Remove unused weights from @font-face declarations and delete the files.
Issue: Missing font-display
Add font-display: swap to every @font-face rule. This prevents FOIT (invisible text) and improves perceived load time. See our Font Loading Strategies guide for advanced options.
Issue: Fonts not subsetted
If your site only uses Latin characters, subset fonts to remove unused glyphs. This can reduce file size by 70-90%. Follow our Font Subsetting guide.
Ongoing Font Governance
A one-time audit is helpful, but sustainable font management requires ongoing governance integrated into your development workflow.
# Add to your CI pipeline: font performance budget check
# .github/workflows/font-audit.yml
name: Font Audit
on: [pull_request]
jobs:
font-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check font formats
run: |
# Fail if any non-WOFF2 web fonts exist
if find public/fonts -name "*.ttf" -o -name "*.woff" | grep -q .; then
echo "ERROR: Non-WOFF2 font files found in public/fonts/"
find public/fonts -name "*.ttf" -o -name "*.woff"
exit 1
fi
- name: Check total font size budget (150KB)
run: |
TOTAL=$(find public/fonts -name "*.woff2" -exec stat -c%s {} + | awk '{s+=$1} END {print s}')
if [ "$TOTAL" -gt 153600 ]; then
echo "FAIL: Total font size is $(($TOTAL/1024))KB (budget: 150KB)"
exit 1
fi
echo "PASS: Total font size is $(($TOTAL/1024))KB"Next Steps
For organizations managing fonts across multiple properties, see our Enterprise Font Management guide. For a deep dive on performance, check the Font Optimization Checklist.
Written & Verified by
Sarah Mitchell
Product Designer, Font Specialist
Font Audit FAQs
Common questions about auditing font usage
