---
title: favicon.ico: What It Is and Whether You Still Need One
description: favicon.ico is the icon browsers request from your site root when no icon is declared. What is inside the file, where to put it, and why to keep it.
canonical: https://favicontools.com/glossary/favicon-ico-file
---

# favicon.ico: What It Is and Whether You Still Need One

favicon.ico is the icon file browsers request from the root of your domain at /favicon.ico when a page declares no icon of its own. It is an ICO container, so a single file can hold several bitmaps at once — usually 16x16, 32x32 and 48x48 — and the client picks the size it needs. You still want one, because crawlers, feed readers and link-preview bots request that exact path without reading your HTML.

## A convention, not a standard

The path /favicon.ico was never specified by anyone; Internet Explorer 5 requested it, and the rest of the web followed. That is why it works with no markup at all — a browser that finds no icon link tag on your page will simply ask the server for that path and use whatever comes back.

The knock-on effect is that the request happens whether or not you have the file. If it is missing, the server logs a 404 for every visitor, and any tool that only checks that path shows a blank placeholder for your site.

## What is inside a typical favicon.ico

| Entry | Used for |
| --- | --- |
| 16x16 | Address bar, bookmark lists, history entries |
| 32x32 | Browser tabs on standard-density displays |
| 48x48 | Windows shortcuts and higher-density tabs |

## Where the file goes

```
public/
  favicon.ico  <- add  # Served at /favicon.ico
  favicon-32x32.png  # Primary tab icon
  apple-touch-icon.png  # iOS Home Screen
```

It has to resolve at the site root, not in a subdirectory. Most frameworks map a public or static directory to the root for exactly this reason; some, including recent Next.js, also accept an app/favicon.ico and wire the tag up for you.

## Declaring it explicitly

```html
<link rel="icon" href="/favicon.ico" sizes="any">
```

Optional, since the path is requested anyway, but worth adding: it makes the icon set visible in the markup and lets you cache-bust with a query string when the icon changes.

> **Browsers cache this file hard:** Favicons are cached far more aggressively than page assets, so a replaced favicon.ico often keeps showing the old image long after deploy. Verify by loading /favicon.ico directly in a private window; if that is correct, the file shipped and you are looking at cache.

## favicon.ico FAQ

### Can favicon.ico actually be a PNG?

Browsers sniff the content rather than trusting the extension, so a PNG served at /favicon.ico usually works. It is still a bad idea — you lose the multi-size behaviour that is the only reason to use the path, and stricter consumers may reject it.

### How do I stop the 404s in my logs?

Ship the file. Suppressing the log line hides the symptom while every tool that requests the path still gets nothing back.

### Does the file have to be at the root?

For the automatic request, yes — clients ask for /favicon.ico specifically. You can serve an icon from any path if you point at it with a link tag, but the root file is what covers clients that never parse your HTML.
