Description
LocalFonts automatically detects, downloads, and serves Google Fonts from your own server instead of loading them from Google’s external CDN. No manual configuration needed — just activate and your site’s fonts are instantly self-hosted.
Why Self-Host Google Fonts?
Loading web fonts from Google’s servers (fonts.googleapis.com and fonts.gstatic.com) sends your visitors’ IP addresses to Google with every page load. This raises serious privacy concerns and has legal implications under data protection regulations worldwide.
- GDPR & DSGVO Compliance — European courts have ruled that loading Google Fonts from Google’s servers without consent violates GDPR (General Data Protection Regulation) / DSGVO (Datenschutz-Grundverordnung). A German court fined a website operator for transmitting visitor IP addresses to Google via externally loaded fonts. Self-hosting fonts eliminates this risk entirely.
- Privacy Protection — When fonts are served locally, zero connections are made to Google’s servers. No visitor IP addresses are transmitted, no tracking occurs, and no third-party requests are made. Your visitors’ data stays on your server.
- Faster Page Load Times — Eliminate extra DNS lookups, TCP connections, and TLS handshakes to fonts.googleapis.com and fonts.gstatic.com. Local fonts load from the same server as your site, reducing latency and improving Core Web Vitals metrics including Largest Contentful Paint (LCP), First Contentful Paint (FCP), and Cumulative Layout Shift (CLS).
- Better PageSpeed & Performance Scores — Google PageSpeed Insights, GTmetrix, and Lighthouse often flag external font loading as a performance bottleneck. Self-hosting fonts eliminates “Reduce the impact of third-party code” and “Preconnect to required origins” warnings.
- Reliability & Uptime — No dependency on Google’s CDN availability. Your fonts work even if Google’s servers are slow, blocked, or unreachable in certain regions or corporate networks.
- Simplified Cookie Consent — By eliminating third-party connections to Google, you reduce the scope of your cookie consent and privacy policy requirements, as there are fewer external services to disclose.
What Google Font References Does It Catch?
This plugin intercepts Google Fonts loaded through every common method used by WordPress themes, plugins, and page builders:
- Enqueued stylesheets — Fonts registered and enqueued via
wp_enqueue_style()using the Google Fonts CSS API v1 (/css?family=) and CSS API v2 (/css2?family=) - Hardcoded
<link>tags — Font references hardcoded directly in theme templates, header.php, footer.php, or plugin output - CSS
@import url(...)rules — Import statements in inline<style>blocks and external stylesheets - CSS
@import "..."rules — Import statements without theurl()wrapper (valid CSS syntax) - Google Material Icons — References to the
/iconendpoint at fonts.googleapis.com for Material Design icon fonts and Material Symbols - Protocol-relative URLs — URLs starting with
//fonts.googleapis.com(without https:) - HTML-encoded URLs — URLs containing
&and other HTML entities commonly output by themes and page builders
It also removes dns-prefetch and preconnect resource hints for fonts.googleapis.com and fonts.gstatic.com, ensuring your site makes absolutely zero connections to Google’s font servers.
How It Works
- Detect — On the first page load after activation, the plugin automatically identifies all Google Font URLs across your entire site.
- Download — Font files are downloaded in the background via WP-Cron so visitors experience no delay. The plugin requests WOFF2 format — the smallest and fastest web font format supported by all modern browsers.
- Rewrite — All Google Font references in your page HTML are rewritten to point to the locally hosted copies on your server.
- Serve — Subsequent page loads serve the cached local font files instantly from your own server with no external requests.
Font files are stored in wp-content/uploads/lgfl-fonts/ with each unique font URL getting its own subdirectory.
Compatibility
LocalFonts works with virtually any WordPress setup:
- Any WordPress theme — flavor starter themes, starter themes, commercial themes, custom themes, classic themes, and block themes (Full Site Editing)
- Page builders — Elementor, Beaver Builder, Divi, WPBakery, Brizy, Oxygen, Bricks, Breakdance, Kadence, GeneratePress, Avada, and more
- WooCommerce — Catches fonts loaded by WooCommerce and its extensions
- Block Editor (Gutenberg) — Works with the native WordPress block editor and block-based themes
- Multilingual plugins — Compatible with WPML, Polylang, TranslatePress, and other translation solutions
- Caching plugins — Works alongside WP Super Cache, W3 Total Cache, LiteSpeed Cache, WP Rocket, and other caching solutions
- Any plugin that loads Google Fonts — If it loads fonts from fonts.googleapis.com, LocalFonts will catch and self-host them
Features
- Zero configuration — Works automatically on activation with no settings to configure
- Enable/disable toggle — Easily turn local font hosting on and off from Settings
- Manual download button — Pre-download all detected Google Fonts with one click
- System status dashboard — Check write permissions, filesystem method, and font storage directory status at a glance
- Activity logging — Monitor font downloads, errors, and plugin events in real-time
- Async background downloads — Fonts are downloaded via WP-Cron in the background so the first visitor is never delayed
- Clean deactivation — All downloaded font files are automatically removed when the plugin is deactivated
Installation
- Upload the
localfontsfolder to/wp-content/plugins/. - Activate the plugin through the Plugins menu in WordPress.
- That’s it. Google Fonts are automatically downloaded and served from your server.
Optional: Visit Settings > LocalFonts to check system status, view activity logs, or manually trigger font downloads.
FAQ
-
Does this plugin work with any WordPress theme?
-
Yes. LocalFonts works at two levels: it filters WordPress-enqueued stylesheets (via the style_loader_src hook) and also processes the full HTML output to catch hardcoded Google Font references from any theme or plugin. Whether your theme uses wp_enqueue_style, hardcoded link tags, or CSS @import rules to load fonts from fonts.googleapis.com, LocalFonts will intercept and self-host the font files.
-
Is this plugin GDPR / DSGVO compliant?
-
When active and working correctly, LocalFonts ensures zero connections are made to Google’s servers — no font file loading from fonts.gstatic.com, no DNS prefetch, and no preconnect hints to fonts.googleapis.com. This directly addresses the core GDPR (General Data Protection Regulation) and DSGVO (Datenschutz-Grundverordnung) concern of transmitting visitor IP addresses to third-party servers without consent.
-
Does it work with Google Material Icons and Material Symbols?
-
Yes, fully supported. The plugin intercepts both
fonts.googleapis.com/css(regular Google Fonts) andfonts.googleapis.com/icon(Google Material Design Icons and Material Symbols) endpoints, downloading and serving all icon font files locally. -
Does it work with page builders like Elementor, Divi, or Beaver Builder?
-
Yes. Any Google Fonts that appear in the page HTML — whether added by Elementor, Beaver Builder, Divi Builder, WPBakery Page Builder, Brizy, Oxygen Builder, Bricks Builder, or any other page builder — will be intercepted and served from your local server.
-
What font formats are downloaded?
-
The plugin requests fonts as a modern browser (Chrome user agent), so Google serves WOFF2 files — the smallest and fastest web font format with broad browser support including Chrome, Firefox, Safari, Edge, and Opera.
-
Where are the font files stored?
-
In
wp-content/uploads/lgfl-fonts/. Each unique Google Font URL gets its own subdirectory containing the rewritten CSS file and the individual WOFF2 font files. -
Will it slow down my site?
-
No — it makes your site faster. By eliminating external DNS lookups and connections to fonts.googleapis.com and fonts.gstatic.com, page load times decrease. The very first page load after activation may be marginally slower as fonts are downloaded in the background via WP-Cron, but all subsequent page loads serve fonts from your local server cache instantly.
-
What happens if a font download fails?
-
The plugin gracefully falls back to the original Google Font URL so fonts still load for your visitors. Failed downloads are logged in the Activity Logs on the settings page so you can investigate and retry.
-
What happens when I deactivate the plugin?
-
All downloaded font files are automatically deleted from your server to keep things clean. Google Fonts will then load from Google’s servers again as they did before activation.
-
Does it work with WordPress caching plugins?
-
Yes. LocalFonts is compatible with all major caching plugins including WP Super Cache, W3 Total Cache, LiteSpeed Cache, WP Rocket, WP Fastest Cache, and others. After fonts are downloaded locally, clear your page cache so the updated local font URLs are reflected in cached pages.
-
Does it improve my Google PageSpeed Insights score?
-
Yes. Self-hosting Google Fonts eliminates third-party font requests, which can improve your PageSpeed Insights, GTmetrix, and Lighthouse performance scores. It resolves common audit warnings including “Reduce the impact of third-party code,” “Eliminate render-blocking resources” (from external font CSS), and “Preconnect to required origins.”
-
Can I use this alongside other font optimization plugins?
-
LocalFonts is designed to be the only plugin managing your Google Fonts hosting. Using it alongside other Google Fonts optimization or local font plugins may cause conflicts. If you are switching from another solution, deactivate the previous plugin first before activating LocalFonts.
-
Does it work with WooCommerce?
-
Yes. LocalFonts catches Google Fonts loaded by WooCommerce, WooCommerce themes, and WooCommerce extensions. Any font request to fonts.googleapis.com — regardless of which plugin or theme triggers it — will be intercepted and served locally.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“LocalFonts” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “LocalFonts” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.0
- Added output buffering to catch hardcoded
<link>tags,@importrules, and inline styles - Added support for Google Material Icons (
/iconendpoint) - Added
dns-prefetchandpreconnectremoval for complete disconnection from external font servers - Added HTML entity decoding for URLs with
& - Added support for
@importwithouturl()wrapper - Improved activity logging
1.0
- Initial release
- Automatic font interception via
style_loader_srcfilter - Manual download button
- Admin settings page with system status

