Favicon Builder

Favicon Not Showing? How to Check & Fix It

Published December 9, 2025 · Updated June 9, 2026

Favicon not showing? The usual cause is aggressive browser or CDN caching. Hard-refresh, add a cache-busting query string, then check the path, tags, and MIME type.

If your favicon isn’t showing, the cause is almost always caching, not a broken file. Browsers cache favicons separately from the rest of your site and hold them aggressively. So before you change any code: hard-refresh the page (Ctrl/Cmd + Shift + R), then load the icon directly at https://yoursite.com/favicon.ico. If it’s there but the tab still shows the old one, force a fresh download with a cache-busting query string — href="/favicon.ico?v=2". That fixes most “favicon not working” reports in under a minute.

In one line: a favicon that won’t update is usually cached, not broken — bust the cache first, debug second.

Want it checked for you? Run your site through the favicon checker — it fetches your page, reads your favicon tags, downloads each icon and tells you exactly what’s missing, wrong, or out of date (and what’s actually fine), with a one-click fix.

If the cache-buster doesn’t fix it, the problem is real: a wrong path, a missing or malformed <link> tag, an invalid .ico, or a bad MIME type. The table below maps each common symptom to its cause and fix.

Fastest fix: bust the cache

Caching is the number-one reason a favicon “isn’t working.” Three layers can each hold a stale copy:

  1. Your browser. Favicons live in a dedicated cache and survive a normal reload. A hard refresh with Ctrl/Cmd + Shift + R (Safari: Cmd + Option + R) bypasses it.
  2. Your CDN. Cloudflare, Fastly, and similar caches serve the old file to everyone until you purge it. In Cloudflare, use Caching → Configuration → Purge Cache and purge the favicon files specifically.
  3. Google’s search index. Google keeps its own favicon cache, separate from any browser, and re-crawls on its own schedule — so search results can lag your tab by days or weeks.

The cleanest fix for browser and CDN caching is to change the URL so it counts as a new file:

<link rel="icon" href="/favicon.ico?v=2">

Bump the version (?v=3, ?v=4) each time you change the icon. To confirm a stubborn cache rather than a real bug, open your site in an incognito/private window — that bypasses the browser favicon cache entirely. If the new icon shows there but not in your normal window, it’s cache, full stop.

Symptom → cause → fix

Find your symptom, then jump to the matching fix below.

SymptomLikely causeFix
Old icon still shows after an updateBrowser favicon cacheHard refresh; add ?v=2; test in incognito
New icon live for you, old one for visitorsCDN/Cloudflare cachePurge the favicon files at the CDN
Correct in tab, wrong/missing in GoogleGoogle’s separate SERP cacheEnsure valid root favicon.ico ≥48×48; wait for re-crawl
Generic blank-page icon in the tabWrong path or missing <link>Check the path and tags; confirm 200 in Network tab
/favicon.ico returns 404File not uploaded or wrong directoryUpload to the site root
Loads (200) but renders blankInvalid or 0-byte .icoRegenerate the file
Downloads instead of renderingWrong MIME type from serverSet the correct Content-Type
Black square on iPhone home screenTransparent apple-touch-icon.pngRe-export it opaque, with padding

How to check whether the favicon is actually working

Three quick checks tell you whether you’re chasing a cache ghost or a real bug.

  1. Open the file directly. Visit https://yoursite.com/favicon.ico (and /favicon.svg). If the icon renders, the file exists and is reachable at the root. A 404 means it’s missing or in the wrong folder.
  2. View source. Press Ctrl/Cmd + U and search for rel="icon". The <link> tags must be inside <head>, use href (not src), and point at paths that resolve.
  3. Check the Network tab. Open DevTools (F12, or Cmd + Option + I on Mac) → Network, type favicon in the filter, and reload. Read the status code:
    • 200 — loaded fine; if it still doesn’t show, it’s cache or an invalid file.
    • 404 — wrong path or the file isn’t uploaded.
    • 403 — blocked by permissions or server config.
    • No request at all — your HTML has no valid favicon <link>, or it’s outside <head>.

Run those three and you’ll know which fix below you need.

Wrong file path

Browsers expect favicons at the site root. The auto-requested favicon.ico must live at https://yoursite.com/favicon.ico, not in /assets/ or /images/. If your HTML says href="/favicon.ico" but the file sits in a subfolder, the request 404s.

Fix it by moving the files to the root (recommended, since browsers auto-request that path anyway) or updating every href. Root-relative paths starting with / are safest — a relative favicon.ico resolves differently on nested URLs.

If the Network tab shows no favicon request, the browser never found a tag to act on. Common culprits:

<!-- Wrong attribute: favicons use href, not src -->
<link rel="icon" src="/favicon.ico">

<!-- Never valid — drop it -->
<link rel="shortcut icon" href="/favicon.ico">

<!-- Outside <head>, so it's ignored -->
</head>
<body>
  <link rel="icon" href="/favicon.ico">

rel="shortcut icon" is a legacy mistake — “shortcut” was never a valid relation, so delete it and use rel="icon". Put all favicon tags inside <head>. The clean, verified set is at the bottom of this guide; see the favicon HTML reference for every tag and attribute.

Invalid or 0-byte .ico file

A request can return 200 OK and the icon still won’t render — because the file itself is broken. This happens when an .ico was renamed from a .png (renaming doesn’t convert it), saved at 0 bytes, or exported by a tool that produced a malformed file. The browser downloads it, fails to decode it, and falls back to the blank-page icon. Confirm it by opening /favicon.ico directly: a valid file shows your icon, a broken one shows nothing. The fix is to regenerate a real multi-size .ico bundling 16/32/48, not a renamed PNG. See how to convert PNG to ICO.

Rather than debug a broken file, regenerate the whole set. FaviconBuilder takes one upload (SVG preferred, or a PNG/JPG at 512×512 or larger) and outputs a valid multi-size .ico, an SVG, the opaque Apple touch icon, the PWA icons, the manifest, and the exact HTML — free, no account, and your image never leaves your browser.

Wrong MIME type from the server

If the favicon downloads instead of displaying, your server is sending the wrong Content-Type. Check it in DevTools → Network → click the favicon request → Response HeadersContent-Type. Correct values:

If it’s wrong, declare the types on the server:

# Apache (.htaccess)
AddType image/x-icon .ico
AddType image/svg+xml .svg
# Nginx
types {
    image/x-icon ico;
    image/svg+xml svg;
}

An SVG favicon served as text/plain or text/html will never render — the MIME type is what tells the browser it’s an image.

Showing in the tab but not in Google

This is its own problem, and it’s not a bug on your end. Google maintains a separate favicon cache for search results and refreshes it only when it re-crawls your site, which can take days to weeks. Your tab updating instantly while Google lags is normal.

To give Google the best chance:

Then wait — there’s no button to force a refresh; the next crawl picks it up. More in favicon SEO & browser support.

The clean, verified HTML

If you’re regenerating anyway, drop in this set. It’s the modern standard — no rel="shortcut icon", no long list of per-size PNG tags:

<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">

The .ico covers legacy browsers, desktop tabs, and Google’s fallback; the SVG is the sharp primary icon; the Apple touch icon handles iOS; the manifest carries the PWA sizes. Place all four in <head>. (Step-by-step setup →)

Summary

When a favicon won’t show, work in this order:

  1. Bust the cache first — hard refresh, add ?v=2, purge your CDN, and test in incognito. This resolves most cases.
  2. Open /favicon.ico directly to confirm the file exists and is reachable at the root.
  3. View source and the Network tab — check for a valid rel="icon" tag in <head> and a 200 status.
  4. Fix the real bug if it persists: wrong path, malformed/shortcut icon tag, invalid .ico, or wrong MIME type.
  5. For Google, keep a valid root favicon.ico ≥48×48 and wait for the next crawl — its cache is separate.
  6. When in doubt, regenerate the whole set so every file and tag is correct from the start.

Continue reading:

Frequently asked questions

Why is my favicon not showing after I uploaded it?

Almost always aggressive caching. Browsers cache favicons separately and hold them for days, so a hard refresh (Ctrl/Cmd + Shift + R) plus a cache-busting query string like /favicon.ico?v=2 fixes it. If the icon shows in an incognito window but not your normal one, it's confirmed cache.

How do I force my browser to reload a new favicon?

Open the favicon URL directly (for example https://yoursite.com/favicon.ico) and hard-refresh it, then hard-refresh the page. The most reliable fix is changing the URL with a version query string — href='/favicon.ico?v=2' — because the browser treats it as a brand-new file and re-downloads it.

Why does my favicon show in the browser tab but not in Google search?

Google keeps its own favicon cache, completely separate from your browser. It re-crawls the icon on its own schedule, so a new favicon can take days or weeks to appear in search results even when your tab is already correct. Make sure a valid favicon.ico exists at your site root and is at least 48×48, then wait for the next crawl.

How do I check if my favicon file actually exists?

Type the file URL straight into the address bar, e.g. https://yoursite.com/favicon.ico. If the icon displays, the file exists and is reachable; if you get a 404, the file is missing or at the wrong path. Then open DevTools (Network tab) and reload to confirm the request returns status 200.

Why is my favicon a black square on iPhone?

Your apple-touch-icon.png has a transparent background. iOS composites the icon onto a solid tile, so transparency renders as black. Re-export the 180×180 Apple touch icon as opaque with a solid background colour. See the transparent favicons guide for the rules.

Related guides

← All guides