This article is adapted from Monotype's “How to host fonts on a CDN: step-by-step guide.” article.
A Content Delivery Network (CDN) is a distributed network of servers that delivers assets from locations closest to website visitors. Hosting font files on a CDN can:
Improve font loading performance globally
Reduce latency and page load times
Lower bandwidth demand on origin servers
Support better Core Web Vitals scores (through more efficient font rendering and caching)
Provide reliable and scalable font delivery
Important: CDN hosting does not automatically mean you can distribute font files publicly. Always ensure your hosting method complies with your Monotype font licensing (EULA).
Before you begin
Verify that your font license permits web use and the delivery model you intend to use.
Common delivery models
Delivery method | Description | License posture |
Monotype font delivery service | Monotype-operated web font delivery (authorized embed or product CDN) | Covered when your agreement includes Monotype delivery |
Self-hosting / Authorized Hosting Provider | You serve fonts from infrastructure you control or an approved third-party service. | Often permitted under a standard Monotype web font license when delivery stays within that scope |
Public CDN distribution | Fonts are published on open CDNs or package repositories. | This is generally not permitted for commercial Monotype font software. |
A desktop license does not grant permission for website font delivery. Use a valid web font license and review your agreement for reporting or tracking requirements.
Steps to get your licensed fonts on CDN
The steps below focus on self-hosting via your own origin or an authorized host provider. They are not instructions for publishing commercial Monotype font software on a public open CDN.
See also: Monotype Font Delivery vs. Self-Hosting in the reference repository.
Prerequisite: Before you start, know which license you have, Desktop, Standard web font, Monotype web font, or Monotype font delivery. Your license decides which steps below apply to you.
Match your license to a delivery path
A desktop license doesn't cover browser delivery. Self-hosting on infrastructure you control (including an authorized host CDN scoped to your domains) is usually fine. However, a public, open CDN is not recommended.
Seven steps to a compliant, fast setup
Step 1: Confirm your license covers this delivery
Check whether your license allows web embedding and the delivery method you're planning, including any usage reporting or tracking-script requirement for self-hosted fonts.
Covered: your own CDN or an authorized host, scoped to your licensed domains.
Not covered: a public or open CDN where unrelated sites can fetch the files.
Step 2: Optimize your font files
Serve WOFF2 as your primary format which is about 30% smaller than WOFF. Subset each file to only the characters and styles your site uses, and keep WOFF or TTF only as an optional fallback.
Step 3: Upload to your CDN
Choose infrastructure that matches your license, then upload optimized files to your storage or origin and point the CDN at them.
Approach | Best for | Status |
Commercial CDN or static host you control (Cloudflare, CloudFront, Bunny, Azure) | Production sites that self-host | Scoped & covered |
Monotype font delivery service | Foundry-operated delivery | If included in license |
Public open CDN or package host (jsDelivr, unpkg) | Freely redistributable fonts | Not recommended |
Step 4: Configure caching and compression
Set a long TTL with hashed filenames (up to one year for edge and browser caches)
Enable Gzip or Brotli for font MIME types such as
font/woff2andapplication/font-woffRe-deploy when a file's hash changes for browsers to pick up the update
Step 5: Set up Cross-Origin Resource Sharing (CORS) headers
A missing or incorrect CORS header makes the browser drop the font silently. So, inspect DevTools → Network → Font and the rendered typeface, and not just the console.
Access-Control-Allow-Origin: https://www.yourdomain.com
Origin scoped to your licensed page origin — not
*Vary: Originset when serving more than one originFonts tested in multiple browsers after a cache purge
CDN cache invalidated after any header or file update
Step 6: Implement cache-busting with hashed filenames
Add a content hash to each updated filename, then update every @font-face reference to match.
@font-face { font-family: 'BrandSans'; src: url('https://cdn.example.com/fonts/brand-sans-regular.a1b2c3.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; }Step 7: Add resource hints
Preconnect to your CDN early, then preload the font that renders above the fold.
<link rel="preconnect" href="https://cdn.example.com">
<link rel="preload" href="https://cdn.example.com/fonts/brand-sans-regular.a1b2c3.woff2" as="font" type="font/woff2" crossorigin="anonymous">
Warning
Don't publish commercial Monotype font files on a public or open CDN. Once they're there, any site can fetch them, regardless of your font license terms.
A compliant, fast setup checks your license and reporting requirements, optimizes and subsets your files, hosts them where your license allows, and adds caching, CORS, and resource hints on top.
Suggested readings
For licensing definitions (Monotype font delivery vs self-hosting vs authorized host provider vs public open CDN), see the canonical reference:
For runnable self-hosting patterns:
Web Fonts Docs Hub: https://monotype.github.io/docs-webfonts-hub/
Next.js (next/font/local): https://github.com/Monotype/pattern-nextjs-webfonts
React component libraries (CSS variables): https://github.com/Monotype/pattern-react-webfonts
SaaS server-controlled font endpoint: https://github.com/Monotype/pattern-saas-fonts-embedding

