Skip to main content
Back to BlogWebsite Guides

How to Check Favicons (the Declarations, Not the Files, and the 2015 Checklist That Misses SVG)

Check favicon declarations in your HTML head — and learn why the tool parses pasted HTML instead of fetching your site, why the .ico fallback passes on any unsized icon, why the Apple Touch Icon check ignores its own 180×180 label, and why SVG and mask-icon aren't scored.

The Toolbox TeamAugust 14, 20267 min read

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 rel match is a substring test. rel="icon", rel="shortcut icon", rel="apple-touch-icon" all match. A hypothetical rel="preiconnect" would also match — it contains "icon." Not a real risk, but the filter isn't exact.
  • Browsers' implicit /favicon.ico request is invisible. Browsers fetch /favicon.ico at the root even with no <link> tag. The tool can't see that fallback. A site with no link tags but a working root .ico scores 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:

  1. The .ico fallback passes on any unsized icon. Check 1 passes if an icon link has no sizes attribute — even <link rel="icon" href="/favicon.png"> with no sizes satisfies "favicon.ico fallback," despite being a PNG. The logic is rel includes 'icon' && (href ends .ico || !sizes). If you want the check to mean ".ico file present," use an explicit .ico href.

  2. 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 explicit 32x32 size. Check 3 (16×16) has no equivalent shortcut — it requires sizes="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-icon is parsed but never scored. The rel filter includes mask-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 any theme-color meta, including a media="(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 .ico scores 2/7. Treat the score as "did I declare the tags," not "do the favicons load."
  • msapplication-config isn't detected. The parser catches msapplication-TileImage and msapplication-TileColor, but not msapplication-config (the browserconfig.xml pointer). If you rely on browserconfig.xml, the tool won't reflect it.
  • The meta parser accepts property as an alias for name. <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 rel alone, ignoring the 180×180 its label promises. Verify the size yourself.
  • The checklist predates SVG favicons: SVG is parsed but unscored, mask-icon is parsed but unscored, dark-mode theme-color variants aren't distinguished.
  • Generate the full set with the Favicon Generator, then check declarations here. Related checks: Meta Tag Extractor, SSL Checker, Speed Test.