Admin Favicon vs WordPress Site Icon is an important distinction when you want the WordPress backend to have a different browser-tab identity from the public website.
At first glance, both features appear to solve the same problem:
show a small icon
inside the browser tab
But they operate at different levels.
The WordPress Site Icon is part of the site’s general identity. WordPress stores it as the site’s icon and uses it across several public-facing and platform contexts.
An admin favicon, by contrast, can be deliberately scoped to:
/wp-admin/
so that administrators see one browser-tab icon while public visitors continue to see another.
The practical distinction is:
WordPress Site Icon
→ site identity
Admin favicon
→ administration identity
This guide explains how both systems work, where each icon appears, why the WordPress Site Icon can sometimes appear in wp-admin even though WordPress does not explicitly print it there, how an admin-only favicon overrides that behavior and when it makes sense to use different icons for the public site and backend.
Quick answer: Admin Favicon vs WordPress Site Icon
The shortest useful comparison is:
WordPress Site Icon
Scope:
site-wide identity
Configured through:
WordPress settings
Primary use:
frontend browser tabs,
bookmarks,
application identity
Stored as:
site_icon option
Admin Favicon
Scope:
WordPress administration
Configured through:
custom code or an admin
customization feature
Primary use:
wp-admin browser tabs
Can differ from frontend:
yes
If you simply want one icon representing the complete WordPress website, use the Site Icon.
If you want:
public website
→ public brand icon
WordPress admin
→ backend-specific icon
then you need an administration-specific favicon layer.
TheOneWP Admin Favicon is designed specifically for that second use case.
What is the WordPress Site Icon?
The WordPress Site Icon is the platform’s built-in favicon and application-icon system.
WordPress describes the Site Icon as the image used in locations such as:
- browser tabs;
- bookmark bars;
- mobile applications;
- other places where the website needs a compact visual identity.
The official WordPress favicon documentation recommends using a square image at least 512 × 512 pixels.
Where is the WordPress Site Icon configured?
For WordPress 6.5 and later, the Site Icon was moved into:
Settings
↓
General
↓
Site Icon
The current WordPress Create a Favicon documentation describes this workflow.
WordPress’s current General Settings implementation also identifies the Site Icon as the image used in browser tabs, bookmark bars and WordPress mobile applications.
Block themes can also expose Site Icon controls
Current block-theme workflows can also expose site identity through the Site Editor.
The official Site Editor Identity documentation includes:
- Site Title;
- Site Tagline;
- Site Logo;
- Site Icon.
The Site Icon remains a separate identity concept from the Site Logo.
Site Logo and Site Icon are not the same thing
This distinction is worth making before comparing the admin favicon.
A Site Logo is normally a visible page element:
HEADER
[ COMPANY LOGO ]
A Site Icon is much smaller:
[■] Page title
↑
browser-tab icon
The official Site Logo block documentation explains that the Site Logo represents the website visually inside page layouts, while the Site Icon is used for browser-tab and application identity.
The Site Logo block can also expose a:
Use as site icon
option.
How WordPress stores the Site Icon
Internally, WordPress stores the Site Icon as an attachment ID in the option:
site_icon
The underlying logic is visible in the official get_site_icon_url() documentation.
Conceptually:
Site Icon setting
↓
Media Library attachment
↓
site_icon option
↓
WordPress retrieves
appropriate image sizes
Check whether a WordPress Site Icon exists
WordPress provides:
has_site_icon()
which returns whether the current site has a Site Icon.
Example:
if ( has_site_icon() ) {
// A Site Icon is configured.
}
See the official has_site_icon() reference.
Retrieve the Site Icon URL
You can retrieve a specific size with:
$icon_url = get_site_icon_url( 32 );
The first argument specifies the requested image size in pixels.
WordPress can return different generated sizes based on the Site Icon attachment.
WordPress generates Site Icon metadata
The Core function:
wp_site_icon()
generates the relevant icon metadata.
Current WordPress Core can output entries such as:
<link
rel="icon"
href="..."
sizes="32x32"
/>
<link
rel="icon"
href="..."
sizes="192x192"
/>
<link
rel="apple-touch-icon"
href="..."
/>
<meta
name="msapplication-TileImage"
content="..."
/>
The official wp_site_icon() reference documents this output.
Where does WordPress automatically output wp_site_icon()?
In current WordPress Core, wp_site_icon() is registered on:
wp_head
at priority:
99
The official wp_head documentation shows that relationship.
This means the Site Icon has an explicit Core output path for normal frontend pages.
WordPress does not register wp_site_icon() on admin_head by default
This is where the difference becomes important.
The backend has its own head action:
admin_head
The official admin_head documentation confirms that it fires inside the head section of administration pages.
Current WordPress Core does not simply register:
add_action(
'admin_head',
'wp_site_icon'
);
as the normal Site Icon output path.
So the direct markup model is:
Frontend
wp_head
↓
wp_site_icon()
↓
explicit Site Icon tags
Admin
admin_head
↓
no equivalent default
wp_site_icon() registration
Why can the Site Icon still appear in wp-admin?
This is the detail that makes favicon debugging confusing.
A browser does not necessarily require an explicit:
<link rel="icon">
element before attempting to find a favicon.
When no explicit icon is available, browsers can request the conventional:
/favicon.ico
location.
WordPress has a dedicated favicon request handler:
do_favicon()
WordPress /favicon.ico uses the Site Icon
The current WordPress do_favicon() implementation redirects the favicon request to:
get_site_icon_url( 32, fallback )
where the fallback is a WordPress image when no Site Icon is available.
That means the browser can effectively reach:
/favicon.ico
↓
WordPress
↓
get_site_icon_url( 32 )
↓
configured Site Icon
This creates an important nuance
It would therefore be too simplistic to say:
Site Icon never affects wp-admin
The more accurate explanation is:
WordPress does not normally print
Site Icon link tags in admin_head.
However:
a browser without an explicit
admin favicon may fall back
to /favicon.ico
and WordPress can resolve
/favicon.ico using the Site Icon.
This explains why an administrator may see the public Site Icon in an wp-admin browser tab even though the frontend Site Icon system is not directly being printed through admin_head.
An admin favicon creates an explicit backend identity
An administration-specific favicon avoids depending on browser fallback behavior.
Instead, the backend explicitly contains something like:
<link
rel="icon"
href="admin-icon.png"
/>
inside the administration document head.
The browser is therefore given an icon specifically for that admin page.
How an admin-only favicon can be added manually
The simplest conceptual implementation uses:
admin_head
because that hook exists specifically inside administration pages.
For example:
add_action(
'admin_head',
'mycompany_admin_favicon'
);
function mycompany_admin_favicon() {
$favicon_url = plugin_dir_url( __FILE__ )
. 'assets/admin-favicon.png';
echo '<link
rel="icon"
href="' .
esc_url( $favicon_url ) .
'">';
}
The custom tag exists in wp-admin but is not added to normal frontend pages.
Why admin_head provides useful isolation
Consider these WordPress contexts:
Frontend
→ wp_head
Administration
→ admin_head
Login screen
→ login_head
They have different lifecycle hooks.
Using the most specific hook lets you decide exactly where the icon should exist.
The admin favicon does not need to replace the Site Icon setting
A clean architecture can keep both:
Site Icon
→ public brand
Admin Favicon
→ backend brand
No conflict exists at the configuration level because the two concepts have different scopes.
Example: public logo and backend management icon
Imagine an agency manages a client website.
The public Site Icon could be:
[ACME symbol]
while the backend favicon could be:
[ACME management mark]
or:
[agency/client hybrid icon]
The visitor sees the public identity.
The administrator sees an icon optimized for distinguishing the backend.
Example: staging vs production
An admin-specific icon becomes especially useful when developers routinely have several environments open.
For example:
Production admin
→ normal brand icon
Staging admin
→ orange development icon
Local admin
→ different development mark
The public Site Icon can remain identical across all environments while backend tabs are visually distinguishable.
Why this can reduce operational mistakes
Consider several browser tabs:
[A] Acme production
[A] Acme staging
[A] Acme local
Identical favicons provide little visual warning.
With admin-specific icons:
[A] Production
[S] Staging
[D] Development
the environments become easier to distinguish at a glance.
This does not replace proper environment labels, access controls or deployment procedures, but it can provide another useful visual cue.
The WordPress Site Icon is still the correct public favicon system
Do not replace the built-in Site Icon with a custom admin favicon if your actual objective is simply to change the public website icon.
The WordPress Site Icon already handles:
- frontend icon markup;
- generated image sizes;
- browser-tab identity;
- mobile application identity;
- the conventional favicon route.
For the public website, use the native Site Icon system unless a specific project has a reason to implement something different.
Do not manipulate wp_head to change only wp-admin
This would target the wrong context:
add_action(
'wp_head',
'my_admin_favicon'
);
wp_head belongs to the frontend rendering lifecycle.
If the objective is:
admin only
use:
admin_head
The login screen is another separate context
The WordPress authentication page is neither an ordinary frontend theme page nor a normal wp-admin page.
It exposes:
login_head
The official login_head documentation confirms that the hook fires in the login page header.
Therefore:
Admin favicon
added through admin_head
does not automatically mean
login-page favicon
added through login_head
TheOneWP Admin Favicon is intentionally admin-scoped
TheOneWP Admin Favicon is designed specifically for WordPress administration pages.
The current module:
- lets the administrator select an image from the WordPress Media Library;
- stores the selected favicon configuration;
- outputs favicon link elements in
admin_head; - does not modify the WordPress Site Icon;
- does not change the public frontend favicon;
- does not resize or convert the selected image itself.
The configuration therefore creates a separate backend icon rather than replacing WordPress’s global Site Icon setting.
Which tags does TheOneWP Admin Favicon output?
When a valid icon URL is configured, the current implementation outputs:
rel="icon"
and
rel="shortcut icon"
inside the WordPress administration head.
That gives the browser an explicit backend favicon rather than relying on its fallback behavior.
Admin favicon image formats
The current TheOneWP interface recommends:
ICO
PNG
SVG
with a compact image suitable for approximately:
32 × 32px
browser-tab use.
This differs from the built-in WordPress Site Icon workflow, which recommends a square source image of at least:
512 × 512px
Why does WordPress request a much larger Site Icon source?
The Site Icon is not used only as a tiny desktop favicon.
WordPress can generate and reference several sizes.
The current wp_site_icon() implementation can request:
32px
192px
180px
270px
for different icon and application contexts.
That is why WordPress asks for a much larger square source image.
An admin-only favicon has a narrower job
A dedicated admin favicon is primarily intended to identify:
browser tab
+
WordPress administration context
It therefore does not necessarily need the same application-icon infrastructure as the global Site Icon.
Admin favicon vs Site Icon comparison
WORDPRESS SITE ICON
Purpose:
Global site identity
Native WordPress feature:
Yes
Main configuration:
Settings → General
Stored by WordPress:
Yes
Recommended source:
Square, at least 512 × 512
Frontend:
Yes
Browser tabs:
Yes
Bookmarks:
Yes
WordPress mobile apps:
Yes
Admin:
Can appear through browser
favicon fallback behavior
Separate admin control:
No
ADMIN FAVICON
Purpose:
Backend identity
Native independent
admin-only setting:
No
Typical implementation:
admin_head
Frontend:
No, when correctly scoped
wp-admin:
Yes
Login page:
Not automatically
Can differ from Site Icon:
Yes
Useful for:
branding,
multi-site management,
environment recognition
Should the Site Icon and Admin Favicon be identical?
They can be.
There is no requirement that they must differ.
Using the same icon everywhere creates maximum brand consistency:
Frontend
→ Acme icon
Backend
→ Acme icon
That is completely reasonable for many websites.
When should they be different?
A separate admin favicon is particularly useful when the backend represents a different operational context.
Examples include:
- agency-managed client websites;
- staging environments;
- development environments;
- large multisite networks;
- teams managing many installations;
- white-label applications;
- internal publishing systems.
Use a simplified mark for tiny favicons
A full horizontal logo is rarely suitable for a favicon.
This:
ACME INTERNATIONAL GROUP
compressed into a tiny browser-tab area becomes visually meaningless.
Prefer:
A
or a compact brand symbol.
Do not treat favicon dimensions like normal image dimensions
A favicon is displayed extremely small.
Fine details disappear.
Thin lines may become invisible.
Small typography can become unreadable.
Complex gradients can lose distinction.
Design for recognition rather than detail.
Transparent backgrounds need testing
A transparent icon may appear against:
- light browser chrome;
- dark browser chrome;
- colored tab groups;
- different operating-system themes.
A logo that is visible only against white is therefore risky.
Test both light and dark browser environments.
Do not use the admin favicon as the Admin Bar icon
The browser-tab favicon and WordPress Toolbar icon are separate interface elements.
The Toolbar icon exists inside the page interface.
The favicon exists in browser chrome.
For Toolbar branding, see How to Change the WordPress Admin Bar Icon.
TheOneWP Admin Bar Icon handles that separate branding layer.
Do not confuse the admin favicon with the admin menu logo
The left sidebar logo is another independent element.
Admin favicon
→ browser tab
Admin Bar icon
→ top Toolbar
Admin menu logo
→ left navigation
If the objective is to brand the sidebar, see How to Add a Custom Logo to the WordPress Admin Menu.
TheOneWP Admin Menu Logo addresses that location specifically.
Login branding remains independent
The login page can use:
- a different logo;
- different colors;
- different typography;
- a different background;
- its own favicon behavior.
For the complete authentication design, see How to Customize the WordPress Login Page and Branding the WordPress Login Screen for Clients.
TheOneWP Custom Login Page handles that separate visual layer.
One WordPress installation can therefore have several brand assets
A complete branding architecture might look like:
Public Site Icon
→ client symbol
Login logo
→ full client logo
Admin favicon
→ compact management symbol
Admin Bar icon
→ small client mark
Admin menu logo
→ compact horizontal logo
Each asset solves a different visual problem.
Use WordPress APIs to inspect the current Site Icon
You can retrieve the active global Site Icon programmatically:
$site_icon = get_site_icon_url( 32 );
if ( $site_icon ) {
echo esc_url( $site_icon );
}
The official esc_url() documentation covers escaping URLs before HTML output.
Retrieve larger Site Icon sizes
You can request different dimensions:
$icon_32 = get_site_icon_url( 32 );
$icon_192 = get_site_icon_url( 192 );
$icon_512 = get_site_icon_url( 512 );
WordPress selects an appropriate image derived from the configured Site Icon attachment.
site_icon_url() prints instead of returns
WordPress also provides:
site_icon_url()
The distinction is:
get_site_icon_url()
→ returns the URL
site_icon_url()
→ echoes the URL
The official site_icon_url() documentation covers the output helper.
The Site Icon metadata can be filtered
WordPress exposes:
site_icon_meta_tags
for filtering the array of Site Icon meta tags created by wp_site_icon().
The official site_icon_meta_tags reference documents that filter.
That is useful for customizing the global Site Icon metadata.
It is not necessarily the cleanest solution when the requirement is simply:
use a different icon in wp-admin
because the admin has its own head lifecycle.
Do not globally filter get_site_icon_url() for an admin-only favicon
WordPress exposes a:
get_site_icon_url
filter.
You could technically alter its result conditionally.
However, the Site Icon is used by multiple WordPress systems.
Changing the global retrieval API simply to customize one browser context creates unnecessary coupling.
A dedicated:
admin_head
favicon is easier to understand.
Global Site Icon changes can have wider effects
get_site_icon_url() is used by WordPress in several contexts beyond normal frontend favicon markup.
Its official documentation lists usage including:
- Site Icon metadata;
- the REST API;
- feeds;
- embed templates;
- the favicon request handler;
- Admin Bar site menus.
This reinforces the architectural distinction:
Site Icon
→ shared site identity resource
Admin favicon
→ scoped backend presentation
WordPress Site Icon and the REST API
The Site Icon can also be exposed in WordPress REST API site information.
This is another reason not to treat it as merely one:
<link rel="icon">
tag.
It is part of the broader WordPress site-identity model.
Admin Favicon does not need to modify the REST API
A backend-only icon generally has no reason to redefine the site’s public REST identity.
It represents an interface environment rather than the website as a whole.
What happens when no Site Icon is configured?
has_site_icon() returns false when WordPress cannot resolve a Site Icon.
For the conventional favicon route, current WordPress Core uses a WordPress logo image as the fallback in do_favicon().
This means a default-looking WordPress favicon in the backend does not necessarily indicate that explicit favicon markup exists on every administration page.
What happens when no custom admin favicon is configured?
With TheOneWP Admin Favicon, if no valid admin favicon has been selected, the module does not print its custom icon link elements.
The browser and WordPress therefore continue using their existing favicon behavior.
This creates a simple fallback model:
Custom Admin Favicon exists
↓
explicit admin favicon
No custom Admin Favicon
↓
normal WordPress/browser behavior
Changing the Site Icon does not change a custom admin favicon
Once wp-admin contains an explicit independent favicon configuration, changing:
Settings → General → Site Icon
should not be expected to update that separately configured admin asset.
The two settings represent different identities.
Changing the admin favicon does not change the public Site Icon
The reverse is equally important.
An admin-only implementation attached to:
admin_head
does not alter:
wp_head
site_icon option
wp_site_icon()
public favicon metadata
This isolation is exactly what makes an admin favicon useful.
Why does my frontend still show the old favicon?
If you changed only the admin favicon, the frontend is supposed to remain unchanged.
To change the public icon, update the WordPress Site Icon instead.
For an admin-specific troubleshooting process, see WordPress Admin Favicon Not Updating.
Why does my admin still show the public Site Icon?
Possible reasons include:
- no admin-specific favicon has been configured;
- the custom favicon output is missing;
- the selected URL is invalid;
- the browser is using cached favicon data;
- another plugin is outputting competing favicon markup;
- the browser has fallen back to the site’s conventional favicon request.
Again, the distinction between explicit admin markup and browser fallback matters.
Favicons are aggressively cached
Browser favicon caching can make testing unusually confusing.
You may update:
admin-icon-old.png
to:
admin-icon-new.png
and still see the previous icon for some time.
Do not immediately assume WordPress failed to save the setting.
Inspect the HTML head before blaming the setting
For wp-admin, inspect the document head and search for:
rel="icon"
rel="shortcut icon"
If the correct admin URL appears there, the server-side output is probably working and browser caching becomes a stronger suspect.
Check the actual favicon URL directly
Copy the URL from the generated:
<link rel="icon">
element and open it directly.
Verify that:
- the URL loads;
- the image is correct;
- there is no authentication error;
- there is no 404;
- the response is actually an image;
- the file has not been replaced by a cached redirect.
Use different filenames when debugging stubborn caches
If the browser keeps using:
admin-favicon.png
after the contents of that file have changed, using a new asset URL such as:
admin-favicon-v2.png
can help distinguish an application problem from a cached resource.
Do not repeatedly replace the WordPress Site Icon while troubleshooting wp-admin
If the project has a separate admin favicon, changing the public Site Icon repeatedly adds another variable to the investigation.
Debug one layer at a time:
1. Inspect admin head
2. Verify admin favicon URL
3. Check browser cache
4. Check conflicting icon tags
5. Only then inspect
global Site Icon behavior
Multiple favicon tags can create confusing results
Plugins, themes or custom snippets may output additional:
<link rel="icon">
elements.
If several different URLs appear in the same document head, browser selection can become difficult to reason about.
Before adding another favicon implementation, inspect the markup already being generated.
Do not add an admin favicon through the frontend theme header
Adding:
<link rel="icon">
to:
header.php
normally affects frontend theme output.
It does not provide a clean admin-only solution.
Do not edit wp-admin Core files
Avoid modifying:
wp-admin/admin-header.php
to insert favicon markup directly.
WordPress already provides:
admin_head
for administration head output.
Core files can be replaced by updates.
Keep backend branding outside the frontend theme when possible
If the administration favicon should survive a theme change, it generally belongs in:
- a functionality plugin;
- a site-specific plugin;
- a must-use plugin;
- a dedicated admin-customization plugin.
This keeps:
public theme presentation
separate from:
backend operational branding
Admin favicon and multisite
WordPress’s Site Icon API supports a blog ID when retrieving an icon:
get_site_icon_url(
$size,
$fallback,
$blog_id
);
This allows WordPress to resolve icons for individual sites in a Multisite network.
An admin-specific favicon system may similarly need to decide whether configuration belongs:
per site
or
network-wide
depending on the intended administration model.
Use separate admin icons to identify Multisite sites
On a large network, several administration tabs can be visually similar.
Site-specific admin favicons can provide an extra recognition layer:
[A] Acme
[B] Brand Two
[C] Corporate Portal
while the public Site Icons continue following each site’s public branding strategy.
Agency use case
An agency managing many client sites may want:
Public Site Icon
→ client's public brand
Admin favicon
→ client's compact backend mark
Admin menu logo
→ client or agency identity
Admin footer
→ agency support information
This provides useful context without changing the public brand.
For a broader system, see How to Brand the WordPress Admin Dashboard.
Standardize favicon rules across a team
If several developers manage the same collection of websites, define a consistent rule.
For example:
Production
→ client mark
Staging
→ client mark + orange variation
Development
→ monochrome development mark
Consistency makes the visual cue easier to learn.
See Standardizing the WordPress Admin for Teams for the wider administration strategy.
Do not over-brand the backend
An admin favicon is useful partly because it is unobtrusive.
Backend branding becomes less useful when every available surface competes for attention.
A restrained system may include:
favicon
+
small admin menu logo
+
support link
+
coherent colors
without reconstructing the entire WordPress interface.
For client-focused usability, see Reducing WordPress Admin Confusion for Clients.
The favicon does not affect permissions
Changing browser-tab identity has no effect on:
- roles;
- capabilities;
- authentication;
- admin URLs;
- REST API permissions;
- filesystem access;
- security headers.
It is purely an interface and branding concern.
The favicon does not hide WordPress
A custom backend icon is not a security or fingerprinting defense.
The site can still expose WordPress through many normal behaviors and endpoints.
Use an admin favicon because it improves recognition, not because it supposedly conceals the platform.
Common mistake: assuming Site Icon means frontend only
The Site Icon’s explicit metadata output is primarily tied to frontend wp_head.
However, the global icon can still influence conventional favicon fallback through WordPress’s /favicon.ico handling.
Therefore:
Site Icon
is global identity
not merely
one frontend HTML tag
Common mistake: assuming Site Icon gives you independent admin branding
It does not provide a separate:
Frontend Icon
Admin Icon
pair of settings.
If you need separate assets, introduce an admin-specific favicon layer.
Common mistake: changing the Site Icon when only wp-admin should change
This modifies the site’s wider icon identity and is therefore broader than necessary.
Use an admin-scoped implementation instead.
Common mistake: changing admin_head when the public site should change
The opposite error is equally possible.
If your public website needs a new favicon, update the WordPress Site Icon.
An admin_head callback is intentionally scoped too narrowly for that task.
Common mistake: treating the login page as wp-admin
The login interface uses a different lifecycle.
An icon added through:
admin_head
does not automatically produce the same markup through:
login_head
Common mistake: uploading a complex horizontal logo
A browser-tab favicon should be recognizable at tiny dimensions.
Use:
- a symbol;
- a monogram;
- a compact mark;
- a simple geometric identity.
Do not compress a full corporate wordmark into a square.
Common mistake: forgetting browser caching
Favicons are among the assets most likely to make a correct implementation appear broken during testing.
Inspect the generated source and actual resource URL before rewriting working code.
Common mistake: using several favicon plugins simultaneously
Multiple systems can produce competing:
rel="icon"
tags.
Choose one clear owner for each scope:
Site Icon
→ WordPress global identity
Admin favicon
→ backend identity
Common mistake: storing unsafe raw markup
If administrators select a favicon through a settings interface, store a controlled value such as:
attachment ID
or
sanitized URL
rather than arbitrary HTML.
Then generate the favicon markup yourself.
Use the Media Library for configurable admin icons
A settings-based implementation can store an attachment ID and retrieve the image through:
wp_get_attachment_image_url()
The official wp_get_attachment_image_url() reference documents the attachment-image API.
A simple custom admin favicon implementation
For a controlled plugin, the core concept can be as small as:
add_action(
'admin_head',
'project_admin_favicon',
1
);
function project_admin_favicon() {
$icon_url = plugin_dir_url( __FILE__ )
. 'assets/admin-favicon.png';
if ( ! $icon_url ) {
return;
}
?>
<link
rel="icon"
href="<?php echo esc_url( $icon_url ); ?>"
>
<?php
}
The important architectural property is not the number of lines.
It is the scope:
admin_head
→ administration only
If you want the same custom icon on login too
That should be an explicit second decision.
You could attach a shared renderer to both:
admin_head
and
login_head
if that is what the project requires.
Do not assume one context includes the other.
If you want one icon everywhere
Use the native Site Icon unless there is a specific reason not to.
The simple architecture is:
one website identity
↓
WordPress Site Icon
↓
frontend icon metadata
+
favicon fallback
+
other WordPress contexts
If you want separate public and backend identity
Use:
WordPress Site Icon
+
Admin Favicon
That architecture creates explicit separation without interfering with the global Site Icon system.
How TheOneWP fits into the distinction
TheOneWP keeps these responsibilities separate.
Admin Favicon controls the browser-tab icon used in WordPress administration pages.
Admin Bar Icon controls branding in the WordPress Toolbar.
Admin Menu Logo handles branding inside the left wp-admin navigation.
Custom Login Page handles visual identity around authentication.
The WordPress Site Icon remains a native WordPress site-identity setting rather than being replaced by those backend modules.
Admin Favicon vs Site Icon checklist
- Use the WordPress Site Icon for the public site’s general icon identity.
- Configure the Site Icon through WordPress rather than manually editing theme files where possible.
- Use a square Site Icon source of at least 512 × 512 pixels as recommended by WordPress.
- Remember that WordPress stores the Site Icon through the
site_iconoption. - Use
has_site_icon()to test whether a Site Icon exists. - Use
get_site_icon_url()when retrieving its URL programmatically. - Remember that
wp_site_icon()creates several icon-related tags. - Remember that Core hooks
wp_site_icon()into frontendwp_head. - Do not assume WordPress outputs the same function through
admin_head. - Remember that browsers can still use the conventional
/favicon.icofallback. - Remember that WordPress’s
do_favicon()can resolve that request through the Site Icon. - Use an explicit admin favicon when wp-admin needs a different icon.
- Use
admin_headfor administration-only favicon markup. - Use
login_headseparately if the authentication screen also needs a custom favicon. - Do not modify WordPress Core files.
- Do not use the global Site Icon filter merely to solve an admin-only requirement without considering its wider effects.
- Use compact artwork that remains recognizable at favicon sizes.
- Test light and dark browser chrome.
- Inspect the generated document head when debugging.
- Test the favicon URL directly.
- Account for aggressive browser caching.
- Check for duplicate or competing favicon tags.
- Use different backend icons for staging and production when that helps operational recognition.
- Do not treat favicon branding as a security mechanism.
- Keep browser favicon, Admin Bar icon, admin menu logo and login branding conceptually separate.
Related guides
- How to Change the WordPress Admin Favicon
- WordPress Admin Favicon Not Updating
- How to Brand the WordPress Admin Dashboard
- How to Add a Custom Logo to the WordPress Admin Menu
- How to Change the WordPress Admin Bar Icon
- Branding the WordPress Login Screen for Clients
Final recommendation
The WordPress Site Icon and an admin favicon should be treated as two different layers of site identity.
The Site Icon is WordPress’s global icon system. It is stored as a site setting, exposed through APIs such as get_site_icon_url(), rendered into frontend icon metadata through wp_site_icon() and used by other WordPress systems including the conventional favicon request.
An admin favicon has a narrower purpose:
identify wp-admin
without changing the identity shown to public visitors.
The architectural distinction is therefore:
WordPress Site Icon
→ website identity
Admin Favicon
→ administration identity
Do not replace the Site Icon when all you need is backend differentiation. Do not build a separate admin favicon system when one global site icon is already sufficient.
If a website should display one icon everywhere, the native WordPress Site Icon is the simplest solution.
If the public website and administration interface need separate visual identities, keep the Site Icon unchanged and add an explicit favicon through admin_head.
This approach is particularly useful for agencies, staging environments, development workflows and teams that manage many WordPress installations at the same time.
TheOneWP Admin Favicon implements exactly that separation by outputting the selected favicon only inside WordPress administration pages, while leaving the site’s native Site Icon and public frontend favicon unchanged.

