How to self-host fonts in WordPress

You can self-host fonts in WordPress by installing licensed font files on your own site and applying them through global Styles. Local delivery gives you control over those files and can remove visitor requests to a separate font provider. It does not automatically make a page faster or establish GDPR compliance.

This guide uses a block theme in WordPress 6.6 or later, including 7.x. You will need access to the font settings and a font license that permits web use. Keep a backup of the site and record the current typography choices before replacing anything.

How to self-host fonts in WordPress

1. Check whether the fonts are already local

Open a public page in your browser, then open the browser’s developer tools and select Network. Reload the page and filter requests by Font. Inspect the domains serving the actual font files, not just the family names shown in the editor.

A familiar font name does not mean the visitor is contacting its original distributor. Conversely, uploading a local copy does not remove a remote stylesheet that a plugin still adds. Inspect both font requests and the stylesheets that initiate them.

Daybreak and Monograph explicitly list fonts loaded from your own site without external font requests. If you use one of those editions, first determine whether you need a different family at all. Other installed components can still make their own requests.

2. Choose the smallest useful font set

List the roles you actually use: paragraph text, headings, navigation, captions, and emphasis. Decide which roles can share a family and which weights are necessary. An unused weight adds maintenance work even if the browser never requests it.

Obtain the files from a source authorized to distribute them, and keep the license with your project records. A desktop font purchase does not necessarily include web embedding rights. Check the applicable license rather than treating every downloadable file as permission to use it.

Prefer an appropriate web format such as WOFF2 when available. Confirm language coverage before selecting a subset. A small file that omits the accented characters in a client’s name is not a useful optimization.

3. Open the Font Library for your version

In WordPress 6.6, go to Appearance → Editor, open Styles → Typography, and select Manage fonts. In WordPress 7.x, the library is also managed through Appearance → Fonts. Use the library interface provided by your installed version.

Choose Upload and select the licensed font files from your computer. Review the uploaded families and variants in Library. Keep your intended styles enabled and avoid installing an entire collection simply because it is available.

The Install Fonts tab can connect WordPress to Google Fonts for installation. That administrative connection is distinct from how visitors receive the installed files. If you want to avoid that installation connection, use files you have obtained separately through the Upload tab.

4. Apply the uploaded family

Return to Appearance → Editor → Styles → Typography. Assign the family to Text, Headings, or the relevant element. Installation alone does not change the design, so check the preview before assuming the upload failed.

Use a sample page with regular text, bold text, italics, and headings. If a requested style is missing, the browser may approximate it. Compare the intended font files with the weights and styles your content actually requests.

Check Styles → Blocks and individual block typography settings when one element keeps its old family. Remove the specific outdated choice rather than resetting all styles. Save the intended changes and confirm them on the public page.

5. Remove the old remote font source

Find the setting, plugin, or custom code that previously loaded the remote fonts. Disable that specific font integration after confirming that the local family works. Do not delete unrelated stylesheet registrations or disable a plugin whose other features the site still needs.

If the old request comes from custom theme code, have the site maintainer remove it in the maintained customization layer. Avoid editing vendor theme files as a quick fix that will disappear during an update. Record what changed so the next maintainer knows who owns font delivery.

After saving, clear relevant caches and reload the page with browser caching disabled in developer tools. Check several page types. A landing page, article, and embedded widget may each introduce different stylesheets or remote resources.

6. Verify delivery and measure the result

In Network, inspect the final font URLs and response status. Confirm that the expected files load successfully from your site’s delivery infrastructure. If a CDN serves them, record that arrangement rather than describing the traffic as strictly same-origin.

Compare the total font transfer size before and after the change under the same conditions. Keep the browser, page, cache state, and test device consistent. A local file can still be large, and replacing a small remote subset with a complete family can increase the download.

Check whether text remains readable while fonts load and whether line wrapping shifts afterward. Font-display behavior and fallback metrics may need attention from the maintainer. Do not preload every variant: preloads compete with images and other resources the first screen needs.

7. Review the privacy claim separately

Self-hosting can remove a particular visitor connection to an outside font provider. That is the concrete change you can inspect. It says nothing by itself about analytics, video embeds, forms, server logs, consent, or other processing on the site.

For GDPR-related work, document the requests you removed and check the rest of the site’s data handling separately. Avoid labeling the entire website compliant based on a font upload. The technical result here is local font delivery, not a legal certification.

Keep the font license, a short record of the settings changed, and the page types inspected. These details make the work repeatable without turning a simple typography task into an unsupported privacy promise.

Common problems

The browser still contacts a font provider

Check the request’s initiator in Network. A plugin, embed, or old stylesheet may still add the remote source. Installing local files does not automatically remove those separate integrations.

Bold or italic text looks wrong

Confirm that the required variant is installed and that its weight and style match the choice in the editor. Test real emphasized text, not just the regular sample displayed in the library.

The new font does not appear publicly

Save the typography assignment, clear relevant caches, and check the font request for an error. If the upload succeeded but the URL fails, investigate the server’s file access or delivery configuration before re-uploading repeatedly.

FAQ

Can I self-host fonts in WordPress to improve speed and privacy?

Self-hosting can remove an external font request, but speed depends on file size and loading behavior. GDPR compliance depends on the site’s wider data handling; local fonts alone do not settle it.

Summary

Check existing requests, install only licensed variants you need, apply them in Styles, and remove the old remote integration. Verify the public requests and compare performance before making claims about the result.

For layouts that list local fonts among their features, explore WordPress photography themes.