Every browser since the late 1990s knows to try https://yourdomain.com/favicon.ico even when your HTML never mentions it. If that file returns 404, browsers fall back to generic tab icons, pick another declared PNG, or show nothing useful. A missing root favicon.ico is still one of the top reasons sites look unfinished in tabs.
This guide explains automatic favicon.ico requests, what each browser does without it, and how to fix or deliberately replace it with modern PNG tags.
The automatic /favicon.ico request
When a page loads, browsers parse HTML for explicit icon tags. If none exist, or alongside them, most engines still fire:
GET /favicon.ico HTTP/1.1
Host: yourdomain.com
This behavior predates <link rel="icon">. It is hard-coded convention, not a spec requirement, but universal in practice.
Your server logs may show thousands of /favicon.ico 404s. That noise is normal on sites that only ship PNG favicons in HTML without a root ICO file.
Scan any URL with Favicon Check. The tool reports whether /favicon.ico exists and whether HTML declares alternatives.
What browsers do when favicon.ico is missing
| Browser | Without favicon.ico | With PNG link tags only |
|---|---|---|
| Chrome | Generic icon if no tags either | Uses PNG from rel="icon" |
| Firefox | Generic icon if no tags | Uses PNG from rel="icon" |
| Safari | Generic icon if no tags | Uses PNG from rel="icon" |
| Edge | Same as Chrome | Uses PNG from rel="icon" |
| curl/wget bots | 404 logged | N/A |
| Old bookmark importers | May fail silently | May use declared PNG |
Modern browsers do not require favicon.ico if valid rel="icon" tags point at reachable PNG or SVG files. The root ICO is a fallback and a compatibility habit, not a strict requirement.
Problems arise when:
- HTML also missing or broken
- Only favicon.ico expected by a CMS or host default
- Tools and audits flag 404 on /favicon.ico as an error
- Legacy integrations hardcode
/favicon.icopath
When missing favicon.ico actually breaks your icon
No HTML tags and no ICO file
Worst case. Browser has nothing. Users see a generic document or globe icon.
Fix: add at least one of:
<link rel="icon" href="/favicon.ico" sizes="any">or PNG tags plus an actual file at that path.
HTML points at favicon.ico but file missing
<link rel="icon" href="/favicon.ico">Server returns 404. Browser shows generic icon even if PNG files exist elsewhere on disk unused.
Fix: upload favicon.ico or change href to a PNG that exists.
CMS expects ICO at root
WordPress Site Icon, Shopify, and some static hosts upload to paths that assume /favicon.ico or redirect to it. Missing root file breaks their admin preview.
Subpath deployments
Site lives at example.com/app/. Browser still requests example.com/favicon.ico, not example.com/app/favicon.ico. Root ICO must sit at domain root or tags must use correct absolute paths.
See Favicon Not Showing in Browser? for path debugging.
Do you still need favicon.ico in 2026?
Short answer: recommended, not mandatory, if you have complete PNG/SVG tags.
Reasons to keep favicon.ico:
- Covers undeclared pages and legacy crawlers
- Stops 404 noise in logs
- Satisfies tools that probe root ICO first
- Multi-size ICO embeds 16×16 and 32×32 in one file
- Some email clients and RSS readers assume
/favicon.ico
Reasons to skip ICO:
- You ship PNG and SVG with explicit tags everywhere
- You use a static host that prefers PNG only
- ICO generation adds pipeline complexity you do not need
If you skip ICO, ensure HTML tags are complete and test with Favicon Check. The scanner flags missing root ICO so you can decide consciously.
How to add favicon.ico properly
Option 1: Single ICO at web root
Upload favicon.ico to the directory that serves https://yourdomain.com/.
Declare it:
<link rel="icon" href="/favicon.ico" sizes="any">Generate ICO from PNG using ImageMagick, realfavicongenerator.net, or your design export tool. Include 16×16 and 32×32 layers inside the ICO.
Option 2: PNG-only with no ICO
Valid modern setup:
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">Accept that /favicon.ico requests still 404 unless you redirect or add a stub file.
Option 3: Redirect ICO to PNG
nginx example:
location = /favicon.ico { rewrite ^ /favicon-32x32.png permanent;}Browsers get an image. Purists prefer a real ICO file instead of redirect for oldest clients.
Full HTML setup: How to Add a Favicon to Your Website.
Size reference: Favicon Sizes Guide.
favicon.ico vs PNG vs SVG
| Format | Root /favicon.ico | rel="icon" PNG | rel="icon" SVG |
|---|---|---|---|
| Legacy fallback | Best | Good with tags | Needs fallback |
| Multi-size one file | ICO supports | Separate files | N/A |
| Sharp on retina | OK at 32×32 | Good | Excellent |
| Safari iOS tab | Uses PNG/ICO | Preferred | With fallback |
A missing ICO matters less when PNG tags are correct. A missing PNG when ICO exists usually still works in desktop tabs.
Debugging missing favicon.ico
- Open
https://yourdomain.com/favicon.icoin browser. 404 confirms missing. - View-source. Search
rel="icon". Note href targets. - Open each href. Confirm 200 responses.
- Scan page URL with Favicon Check.
- Check server root vs deploy artifact. File may exist locally but not in CI output.
- Verify CDN is not blocking
.icoextension. - Confirm case sensitivity:
Favicon.icovsfavicon.icoon Linux servers.
Framework notes
Next.js: place favicon.ico in app/ or public/.
Vite: put in public/favicon.ico.
WordPress: set Site Icon in Customizer. WordPress generates sizes but root behavior depends on theme.
What crawlers and tools expect
Google Search may fetch favicons for SERP display. It uses declared icons and may probe /favicon.ico. Missing files do not directly hurt rankings but reduce branded SERP slots.
Slack and Discord unfurl previews use Open Graph, not favicon.ico. For social previews, use the Open Graph scanner separately.
Security scanners and uptime monitors often HEAD /favicon.ico as a health check. 404 alerts do not mean users see broken tabs if HTML tags work.
Common mistakes
Assuming no ICO is fine without checking HTML
Both missing. Generic icons everywhere.
404 only on www subdomain
www.example.com/favicon.ico exists. example.com/favicon.ico 404. Pick one canonical host.
ICO file corrupt or zero bytes
Returns 200 but invalid image. Browser shows generic icon. Re-export ICO.
Replacing ICO but CDN serves old 404
Cache issue, not missing file. See Favicon Not Updating After Change?.
Blurry ICO from upscaled logo
File exists but looks bad. Fix source art: Favicon Looks Blurry?.
Hosting platform defaults
Some platforms ship a default favicon.ico you never uploaded. Removing your custom icon may revert to the host default, which looks like "wrong favicon" rather than missing.
GitHub Pages: No default ICO. You must add one or use HTML tags in your template.
Netlify / Vercel: Default placeholder until you deploy public/favicon.ico.
Shared hosting (cPanel): May include a generic globe ICO until overwritten via File Manager at public_html/favicon.ico.
Check your host docs. The Favicon Check shows what the live domain actually serves, not what your repo contains locally.
Step-by-step decision workflow
- Scan URL with Favicon Check.
- If tab icon broken: fix HTML tags first regardless of ICO.
- If
/favicon.ico404 and logs matter: add root ICO or redirect. - If tags point at ICO 404: upload file or update href to PNG.
- Redeploy. Re-scan. Test incognito in Chrome and Safari.
- Optional: full metadata pass with Open Graph scanner.
FAQ
Is favicon.ico required?
Not strictly, if valid rel="icon" tags point at reachable PNG or SVG files. Root ICO is still recommended for fallback and compatibility.
Why do browsers request favicon.ico automatically?
Historical convention from early browsers. The request persists even when HTML declares other formats.
My site works without favicon.ico. Should I add one?
Yes, if you want to stop 404 log noise and support tools that probe root ICO. Low effort, broad compatibility.
HTML has PNG tags but audit says favicon.ico missing
Audits often check root ICO independently. Add ICO or configure audit to accept PNG-only setup.
404 on favicon.ico but icon shows in tab?
PNG link tags are working. ICO 404 is harmless for tab display. Add ICO if you want clean logs.
Where does favicon.ico go on my server?
Web root: same folder as index.html or site entry point at domain root, not necessarily project repo root on subpath hosts.
Can I use PNG renamed to favicon.ico?
No. Browsers expect ICO container format at that path unless Content-Type is image/png and bytes are valid PNG. Use proper ICO or redirect.
How do I verify quickly?
Favicon Check on your URL shows ICO probe result and all declared icons with previews.
Bottom line
Missing favicon.ico triggers automatic 404 requests but modern browsers fall back to rel="icon" PNG or SVG when declared correctly. Add a root ICO for compatibility and quiet logs, or ship complete PNG tags and accept the fallback 404. Scan with Favicon Check to see exactly what exists and what each browser can use.