Repository navigation
Brand Center font package falls back to default font after saving another "Change the look" pane in the same page session #11069
Description
Target SharePoint environment
SharePoint Online
What SharePoint development model, framework, SDK or API is this about?
SharePoint REST API
Developer environment
Windows
What browser(s) / client(s) have you tested
- 💥 Internet Explorer
- 💥 Microsoft Edge
- 💥 Google Chrome
- 💥 FireFox
- 💥 Safari
- mobile (iOS/iPadOS)
- mobile (Android)
- not applicable
- other (enter in the "Additional environment details" area below)
Additional environment details
- Edge Version 155.0.4283.62 (Official build) (64-bit)
- Chrome Version 156.0.8078.48 (Official Build) (64-bit)
Describe the bug / error
A site that uses a Brand Center font package loses its custom fonts and renders in Segoe UI when, in a single page session, a site owner chooses the font package in Settings > Change the look > Font, saves, and then saves another Change the look pane (for example Theme) without reloading the page.
After this the browser requests the font files relative to the current page instead of from the Brand Center, and every request returns 404:
/sites/<site>/SitePages/<font>-Bold.ttf 404
/sites/<site>/SitePages/<font>-SemiBold.ttf 404
/sites/<site>/SitePages/<font>-Medium.ttf 404
/sites/<site>/SitePages/<font2>.ttf 404
On working site in the same files load from
https://public-cdn.sharepointonline.com/contoso.sharepoint.com/sites/BrandCenter/Fonts/<file> (200).
Re-saving the font or theme afterwards does not repair the site. It reproduces every time, across any/all sites in my sandbox tenant.
What I found in the stored theme
The applied theme is written to the site's current themed folder, /sites/<site>/_catalogs/theme/Themed/<folder>/theme.sptheme, and _api/web?$select=ThemedCssFolderUrl names that folder. Its fontPackageJson attribute holds the font file paths. Watching that folder through the steps below:
| Step | Written by | Font paths in fontPackageJson |
Result |
|---|---|---|---|
| Font > choose package > Save | browser (about 1.3 KB) | bare file names, e.g | replaced about 1 second later by the next row |
| about 1 second after the font save | server (about 2.6 KB, CRLF line endings) | full Brand Center URLs, e.g. https://contoso.sharepoint.com/sites/BrandCenter/Fonts/<font>-Bold.ttf, plus a source key |
fonts load |
| Theme (or another pane) > Save, same page session | browser (about 1.5 KB) | pedPaths` equal to the bare name | fonts 404; no later step resolves them |
The font package itself is healthy: _api/FontPackages/GetById('<package id>') returns IsValid: true and MissingFontFiles: [], and its PackageJson holds bare file names, which appears to be by design. The server-side step that runs after a font save turnURLs. Saving another pane writes the page's in-memory copy of the theme, which still has the bare names from before that server step, and no server step follows it.
Steps to reproduce
Needs a site owner and a Brand Center font package with custom font files.
- Open the site home page and reload it.
- Settings > Change the look > Font > choose any other font package > Save.
- Without reloading: Settings > Change the look > Font > choose the Brand Center font package > Save. The themed folder now has full font URLs and the fonts load.
- Still without reloading: Settings > Change the look > Theme > Save (no change needed).
- Reload the page. The current
theme.spthemehas bare font paths and the font requests return 404.
Read-only check from the browser console on any site:
(async () => {
const site = location.pathname.match(/^\/sites\/[^/]+/)[0];
const web = await (await fetch(site + "/_api/web?$select=ThemedCssFolderUrl",
{headers: {Accept: "application/json;odata=nometadata"}})).json();
const t = await (await fetch(web.ThemedCssFolderUrl + "/theme.sptheme")).text();
return /BrandCenter\/Fonts/.test(t) ? "OK: full font paths" : "BROKEN: bare font paths";
})()Expected behavior
Saving any Change the look pane keeps the resolved Brand Center font URLs, or runs the same server-side resolution that a font save does. The custom fonts keep loading.
Workaround
A site owner can repair an affected site:
- Reload the page.
- Change the look > Font > choose a different package > Save.
- Reload.
- Change the look > Font > choose the Brand Center package again > Save.
- Reload before opening any other Change the look pane.
Activity
m365-agent-toolkit-assistant commentedon Oct 20, 2026
👋 Hi Shaun Eccles-Smith (@shauneccles),
Thank you for reporting this issue. Here is an AI-generated initial response:
Classification: Bug — saving another Change the look pane appears to break a previously working Brand Center font package; the specific cause is not yet confirmed.
theme.spthemeafter Theme > Save in the same session. Subsequent font requests return 404. This is consistent with a stale theme being saved, not with missing font files.type:bug-suspectedlabel is a triage signal, not confirmation of the cause or a fix.What to do now:
theme.spthemefiles and network requests to SharePoint support for investigation.Useful links:
Ashlesha-MSFT commentedon Oct 21, 2026
Hi Shaun Eccles-Smith (@shauneccles),
Thank you for providing the detailed steps and investigation.
I was able to reproduce the issue in my SharePoint Online test environment by following the steps described. After applying the Brand Center font package and then saving the Theme pane in the same page session without reloading, the font paths in theme.sptheme revert to bare file names. After reloading the page, the font requests return 404, and SharePoint falls back to Segoe UI.
I’ll raise this with our engineering team for further investigation. We’ll share updates here as we learn more about the fix.
Thanks again for reporting this and for the detailed reproduction steps!
