You scored 7/7 green and your favicon still 404s
You paste your <head> HTML into the Favicon Checker, click Analyze, and get 7/7 — all green. Then a colleague opens your site and the tab shows a blank icon because /favicon.ico returns a 404. The tool said you were fine. It wasn't wrong about what it measured; it measured the wrong thing. The "Checker" parses declarations in pasted HTML — it never fetches your site, opens the files, or validates the manifest JSON. A <link rel="icon" href="/favicon.ico"> is "ok" whether that file exists or not. The score rewards declaring favicons, not having them.
The central thing to understand: it's a declaration presence analyzer on HTML you paste, not a live site auditor. Use it to catch missing tags before deploy; confirm files load in your browser.
It parses pasted HTML, not a URL
There's no URL input. You copy your <head> from View Source and paste it. The parser runs two regexes — <link\s([^>]*)> and <meta\s([^>]*)> — over the text. A link is kept when its rel (lowercased) contains any of: icon, apple-touch-icon, manifest, shortcut, mask-icon. A meta is kept when its name (or property) is theme-color, msapplication-TileImage, or msapplication-TileColor.
Two consequences of the regex approach:
- The
relmatch is a substring test.rel="icon",rel="shortcut icon",rel="apple-touch-icon"all match. A hypotheticalrel="preiconnect"would also match — it contains "icon." Not a real risk, but the filter isn't exact. - Browsers' implicit
/favicon.icorequest is invisible. Browsers fetch/favicon.icoat the root even with no<link>tag. The tool can't see that fallback. A site with no link tags but a working root.icoscores low on the tool and works fine in browsers.
The seven-item checklist, and the two with loopholes
The tool scores exactly seven recommendations, always the same:
| # | Check | Passes when | If absent |
|---|---|---|---|
| 1 | favicon.ico fallback | any icon link with .ico href or no sizes attr |
warn |
| 2 | 32×32 icon | any sizes includes 32x32 or any type="image/x-icon" |
warn |
| 3 | 16×16 icon | any sizes includes 16x16 |
warn |
| 4 | Apple Touch Icon (180×180) | any rel includes apple-touch-icon |
warn |
| 5 | Web App Manifest | any rel includes manifest |
missing |
| 6 | Theme Color meta | any <meta name="theme-color"> |
missing |
Two loopholes:
-
The .ico fallback passes on any unsized icon. Check 1 passes if an icon link has no
sizesattribute — even<link rel="icon" href="/favicon.png">with no sizes satisfies "favicon.ico fallback," despite being a PNG. The logic isrel includes 'icon' && (href ends .ico || !sizes). If you want the check to mean ".ico file present," use an explicit.icohref. -
32×32 has a type shortcut that 16×16 doesn't. Check 2 passes on
type="image/x-icon"alone — a single<link rel="icon" type="image/x-icon" href="/favicon.ico">satisfies checks 1 and 2, with no explicit32x32size. Check 3 (16×16) has no equivalent shortcut — it requiressizes="16x16". So a combined .ico satisfies 32 but not 16, though both are inside the file. If you rely on a combined .ico, check 3 stays amber unless you add a redundant 16×16 link.
The Apple Touch Icon check ignores its own label
Check 4 is labeled "Apple Touch Icon (180x180)" but the code passes it on rel alone — any rel="apple-touch-icon" link, regardless of sizes. A <link rel="apple-touch-icon" sizes="57x57"> scores ok despite the 180×180 in the label. The label is aspirational; the check is rel-only. Apple recommends 180×180 (a single high-res icon it downsamples), but the tool doesn't enforce it. Verify the size yourself.
The checklist is from 2015
The seven checks cover the classic stack: .ico, 32, 16, apple-touch, manifest, theme-color. Three modern declarations are missing from the score:
- No SVG favicon check.
<link rel="icon" type="image/svg+xml" href="/favicon.svg">is parsed and appears in the table, but there's no "SVG favicon" recommendation. An SVG satisfies check 1 (unsized) but gets no credit of its own. mask-iconis parsed but never scored. The rel filter includesmask-icon(Safari's pinned-tab SVG), so it shows in the table — but no recommendation validates it.- No dark-mode
theme-color. The check passes on anytheme-colormeta, including amedia="(prefers-color-scheme: dark)"variant. But there's no check that you have both light and dark. A single light theme-color passes; the dark variant unscored.
Gotchas
- The score rewards completeness, not correctness. All seven declarations pointing to 404 files scores 7/7; a single correct
.icoscores 2/7. Treat the score as "did I declare the tags," not "do the favicons load." msapplication-configisn't detected. The parser catchesmsapplication-TileImageandmsapplication-TileColor, but notmsapplication-config(thebrowserconfig.xmlpointer). If you rely on browserconfig.xml, the tool won't reflect it.- The meta parser accepts
propertyas an alias forname.<meta property="theme-color">passes the theme-color check. Unusual, but allowed. - No manifest contents. With
<link rel="manifest">declared, the tool can't open the manifest to verify the 192×192 and 512×512 icons inside. The internal icons are unchecked.
Summary
- The tool parses pasted
<head>HTML — it doesn't fetch your site, open files, or validate the manifest. A 7/7 score means "all seven declarations present," not "all favicons load." The word "Checker" oversells a declaration presence analyzer. - Two loopholes: the .ico fallback passes on any unsized icon link (a PNG with no sizes counts), and 32×32 has a
type="image/x-icon"shortcut that 16×16 lacks — a combined .ico satisfies 32 but not 16, despite both being inside the file. - The Apple Touch Icon check passes on
relalone, ignoring the 180×180 its label promises. Verify the size yourself. - The checklist predates SVG favicons: SVG is parsed but unscored,
mask-iconis parsed but unscored, dark-modetheme-colorvariants aren't distinguished. - Generate the full set with the Favicon Generator, then check declarations here. Related checks: Meta Tag Extractor, SSL Checker, Speed Test.