---
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 just asks the server for that path and uses 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.
