Why one image is not enough
A favicon is not a single file any more. Different contexts ask for different things: a browser tab wants a small icon, a bookmark bar a larger one, an iOS home screen shortcut a much larger one, and Android something different again.
Supply only a 16×16 and every other context has to scale it up — which looks exactly as bad as it sounds. Supply a full set and each context gets a purpose-made image.
This page renders all of them from one source and gives you the HTML to link them.
Start large and square
Square. Icons are rendered into square canvases. A rectangular source will be squashed to fit, so crop before you start.
Large. A PNG at 512×512 or bigger. Every smaller size is rendered down from it, and downscaling produces clean results in a way upscaling never does.
Design for sixteen pixels
This is the part most people get wrong.
At 16×16 there is room for a single letter, a simple geometric mark, or a strong silhouette. That is all. A detailed logo — one with a wordmark, fine lines, or several colours — becomes an unreadable smudge at tab size, no matter how good the source image is.
The practical approach is to design the smallest version first and let the larger sizes inherit from it, rather than shrinking a logo and hoping.
Why isn’t my favicon updating?
Almost always caching. Browsers cache favicons far more aggressively than other assets and frequently ignore an ordinary refresh.
Before concluding anything is broken:
- Hard reload the page
- Try a private window
- Visit the icon file directly by its URL
If the file loads correctly when you visit it, your icon is fine — the cache will catch up on its own.
Where the files go
The root of your site, unless you deliberately change the paths in the link tags. Some browsers request /favicon.ico from the root regardless of what your HTML says, so keeping everything there avoids a class of problem entirely.
You still need the link tags. Root-level fallbacks cover the basic case, but the larger and platform-specific icons are only discovered through the HTML.
Nothing is uploaded
Every size is rendered inside this browser tab. The Uploaded readout beside the result measures this page’s own outbound network calls, and reads 0 B on a successful generation.