---
title: "No favicon / app icon (lint/missing-icon)"
description: "lint/missing-icon: Browsers request /favicon.ico anyway (a 404 on every page), tabs and bookmarks show a blank icon and search results show a generic globe."
canonical: https://void-design.vercel.app/rules/lint/missing-icon
lastModified: 2026-09-16
---

# No favicon / app icon

`lint/missing-icon` · severity **warn** · category Lint · detected by `void lint` and `void audit`

## Why it matters

Browsers request /favicon.ico anyway (a 404 on every page), tabs and bookmarks show a blank icon and search results show a generic globe. An SVG-only icon isn't supported by Safari and some crawlers.

## How to fix it

Add `app/icon.png` (or `favicon.ico`) plus `app/apple-icon.png`; keep `icon.svg` as an extra, not the only icon.

## Example

```text
app/favicon.ico
app/icon.svg
app/apple-icon.png   (180×180)
```

## References

- https://nextjs.org/docs/app/api-reference/file-conventions/metadata/app-icons

## More lint rules

`void lint` reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.

- `not-found-in-suspense` `notFound()`/`redirect()` inside a component rendered under `<Suspense>` — [lint/not-found-in-suspense](https://void-design.vercel.app/rules/lint/not-found-in-suspense)
- `missing-sitemap` No sitemap — [lint/missing-sitemap](https://void-design.vercel.app/rules/lint/missing-sitemap)
- `missing-robots` No robots.txt — [lint/missing-robots](https://void-design.vercel.app/rules/lint/missing-robots)
- `missing-og-image` No Open Graph image anywhere — [lint/missing-og-image](https://void-design.vercel.app/rules/lint/missing-og-image)
- `missing-llms-txt` No `/llms.txt` — [lint/missing-llms-txt](https://void-design.vercel.app/rules/lint/missing-llms-txt)
- `dynamic-metadata-streaming` Request-time `generateMetadata` without `htmlLimitedBots` — [lint/dynamic-metadata-streaming](https://void-design.vercel.app/rules/lint/dynamic-metadata-streaming)
- `missing-lang` Root `<html>` without `lang` — [lint/missing-lang](https://void-design.vercel.app/rules/lint/missing-lang)
- `jsonld-missing` No JSON-LD structured data — [lint/jsonld-missing](https://void-design.vercel.app/rules/lint/jsonld-missing)

Detected by `void lint` and `void audit`. Explain it in a terminal: `void rules lint/missing-icon`
