Favicon ToolsVerifyBuild
Troubleshooting

Fix a favicon that won't show or update

The symptom is the same everywhere; the cause depends on your stack. A missing icon is a wrong file, path, or build config. A stale one is a cache. Pick your framework for the fix written to its own rules, or run the checker to see exactly what your site serves.

Next.js

In the App Router, Next.js builds the icon links from files in the app directory. Miss the filename and it emits nothing. In the Pages Router there is no convention at all. Work out which one you're hitting and the fix is obvious.

Read the fix

The file changed and the tab didn't. On Next.js that's one of three caches: the browser's favicon store, a stale .next build, or a CDN serving the old bytes. Rule them out in that order.

Read the fix

React

React renders into a DOM node and never touches the head, so the favicon lives in a static HTML file. A blank tab means that file's link tag is wrong, or the icon was imported from src and no longer sits at a fixed path.

Read the fix

You swapped the file and the tab kept the old icon. In a React app that's the browser caching the favicon, or the build output and CDN still serving the previous copy from public/.

Read the fix

Vite

Vite copies public/ to the output root and rewrites index.html at build time. A favicon that works in dev and 404s in production nearly always has the public/ segment in its path, or was imported from src and hashed.

Read the fix

Vue

A Vue single-file component cannot render a link tag into the head, so the favicon is declared in index.html: at the project root under Vite, inside public/ under Vue CLI. A blank tab means that file's tag is wrong.

Read the fix

Angular

Angular copies static files only if the build configuration tells it to. An icon that isn't matched by the assets entry in angular.json never reaches dist. The build succeeds and the file isn't there.

Read the fix

Astro

Astro copies public/ to the output untouched but never injects icon tags for you. A blank tab means the link isn't in the layout your pages use, or a page rendered its own html element and skipped the layout.

Read the fix

WordPress

WordPress does not serve a favicon from a file you drop in the theme. It prints the icon tags from one Site Icon setting, and a blank tab almost always means that setting was never applied, or a theme is fighting it.

Read the fix

You set a new Site Icon and the old one won't budge. On WordPress that's almost always a caching layer (a page-cache plugin or CDN serving stale HTML) with the browser's own favicon cache as a second suspect.

Read the fix

Shopify

On Shopify the favicon is a theme setting, not a file on a server. The theme renders one icon link from an image you pick in the editor, so a blank tab means it's unset, you edited the wrong theme, or the format was rejected.

Read the fix

You picked a new favicon and the live store still shows the old one. On Shopify that's nearly always a draft theme that was never published, or the image CDN and browser caching the previous icon.

Read the fix