Usually one of two things prompts the question. Either a speed report keeps flagging requests to fonts.googleapis.com and fonts.gstatic.com, or a customer or partner in Europe has asked whether your website passes visitors’ details to Google every time a page loads. Both lead to the same fix: host Google Fonts locally, so the font files come from your own server instead of Google’s.
It is a reasonable change for most sites and often a simple one. The part people skip is checking afterwards, because a site can be “self-hosting” fonts in its settings while a plugin quietly keeps calling Google. This post covers why it helps, the ways to do it on WordPress, and how to confirm no remote font requests remain.
Why host Google Fonts locally at all
There are three reasons, and they carry different weight for different sites.
Speed. Loaded from Google, fonts need a stylesheet from one address and the files from another, with a new connection to each. Served from your own domain, the browser reuses the connection it already has to your site, and the stylesheet that describes the fonts can be part of your own CSS. The wider reasons fonts slow pages, such as too many families and weights, are covered in why Google Fonts can slow a page; this post assumes you have already trimmed the list.
Privacy. Loading anything from another company’s server sends that server the visitor’s IP address, along with ordinary browser details. For fonts that is a small exchange, but it is still a transfer of personal data to a third party.
Control. When the files are yours, nothing changes unless you change it. You can also preload the one or two most important font files, which is awkward to do with Google’s addresses because the file names are not fixed.
It is worth being honest about the other side. Google’s font service is fast and well run. Self-hosting only helps if your own server delivers static files efficiently, with compression, long browser caching and HTTP/2 or later. On a struggling shared server, moving fonts there will not make them quicker.
A note for sites with European visitors
This section is general information, not legal advice. Under European data protection rules, an IP address can count as personal data. At least one German court has found that loading fonts from Google’s servers without the visitor’s consent passed that data to a third party without a good enough reason, when the same font could have been served from the site itself. How far that view applies elsewhere is a question for a lawyer, not a speed guide.
For that reason, many European businesses and agencies now self-host fonts by default. If your site serves visitors in Europe and you are unsure what applies to you, ask a professional who advises on data protection in your country. From a technical point of view, self-hosting fonts is a cheap, low-risk change either way.
Before you start: list the fonts you use
Open your site in a private window, open DevTools, go to the Network tab and filter by Font. Reload. Note each family, weight and style that loads. Then click the request to fonts.googleapis.com under CSS to see the exact list the site asks for.
Do this on two or three different templates, such as the home page, a blog post and the contact page, because different pages can load different fonts. This list is what you will self-host, and it is your checklist for testing later.
Ways to self-host fonts on WordPress
A setting in your theme or builder
Check here first. Several popular themes have a performance or typography option to load Google Fonts locally, and recent versions of Elementor include a similar option. When switched on, the theme or builder downloads the files to your server and rewrites its CSS to use them. It is the least work and keeps working when you change fonts in the settings.
The Font Library in block themes
If you use a block theme and the Site Editor, WordPress’s own font library can install Google Fonts onto your site. Go to the Site Editor, open Styles, then the typography settings, and manage fonts from there. Fonts installed this way are stored with your site’s files and served from your domain, rather than linked from Google.
A font plugin
Plugins such as OMGF (Optimize My Google Fonts) and Local Google Fonts scan your pages for Google Fonts requests, download the files and serve them locally, then replace or remove the remote requests. This is the practical choice when fonts come from several places at once, such as the theme, a builder and a form plugin. Configure it, clear caches, and then check, because a plugin can only replace requests it detects.
Manually, in a child theme
A developer can download the font files in the woff2 format, place them in a child theme or the uploads folder, write the font declarations in the child theme’s CSS, and switch off the theme’s remote font loading. It gives the cleanest result and the most control, but it has to be updated by hand if the design changes.
Whichever route you use, the fonts in the Google Fonts collection are published under open licences that allow you to host them yourself. If your design uses a font from another source, check that font’s licence before self-hosting it.
Check that no remote font calls remain
This is the step that matters most, and the one most often skipped.
- Clear every cache: the optimisation plugin, any server cache and the CDN.
- Open each template from your earlier list in a private window, logged out.
- In the Network tab, clear the filter and type “fonts.g” into the search box. Any request to fonts.googleapis.com or fonts.gstatic.com means something is still calling Google.
- View the page source and search for “googleapis” to find the line that adds the request, and work out which theme, plugin or widget it belongs to.
- Check pages with forms, maps, popups and embedded videos too. Plugins for these sometimes load their own fonts.
Keep in mind that fonts are only one way a site talks to Google. Maps, reCAPTCHA, YouTube embeds and analytics are separate, and self-hosting fonts does not change them.
Keep self-hosted fonts quick
A few details decide whether the change actually speeds things up:
- Serve woff2. All current browsers support it and it is the smallest format. Older formats are rarely needed now.
- Preload sparingly. Preloading the one font used in your main heading can help that heading appear sooner. Preloading every weight competes with more important files.
- Cache for a long time. Font files rarely change, so your server or CDN should tell browsers to keep them.
- Watch the address. Fonts served from a different domain, including a CDN hostname or the www version of your site, need a permission header or browsers will refuse them. If icons or fonts disappear after the switch, our post on fonts and icons missing in WordPress explains the fix.
Whether visitors see invisible text while the files download is a separate setting, covered in font-display swap explained. For where fonts sit among all the other causes of a slow page, our website loading speed guide sets the priorities.
Fonts are only one of the files that can hold up the first paint. The overview of render-blocking files and the order to tackle them puts them in context with your stylesheets and scripts.
Frequently asked questions
Is it legal to download and host Google Fonts myself?
In general, fonts in the Google Fonts collection are released under open licences that allow you to use, copy and host them, including on commercial sites. Fonts from other foundries have their own licences, and some do not permit self-hosting on the web, so read the licence before copying a font from anywhere else. This is general information, not legal advice.
Will self-hosting fonts make my site faster in every case?
Usually, but not always. It removes connections to two extra addresses, which helps most on mobile. If your own server is slow, lacks compression or sends fonts without long caching, the gain shrinks or disappears. Measure font timing in the Network tab before and after to see the real effect.
Do I have to repeat this when I change fonts?
It depends on the method. Theme, builder and plugin options usually pick up new fonts automatically when you change typography settings. If fonts were added manually in a child theme, someone has to download and declare the new files and remove the old ones, or the site may fall back to calling Google.
Does self-hosting fonts remove all connections to Google from my site?
No. It only stops font requests. Google Analytics, Tag Manager, Maps, reCAPTCHA and YouTube embeds each connect to Google separately. If your goal is privacy rather than speed, list every third-party service the site uses and decide on each one, ideally alongside your cookie and consent setup.
Google Fonts optimisation and self-hosting is one of the items in our website speed optimisation work. It sits inside a full audit of the site, we apply changes only once you have approved them, and we re-test afterwards so you can compare before and after.
Next in this series: Font-display Swap Explained: Stop Invisible Text