It reads the page's live HTML and collects every <link> whose rel is icon, shortcut icon, apple-touch-icon, apple-touch-icon-precomposed or mask-icon, resolving each href to an absolute URL. If the page links a web app manifest, it fetches that JSON too and adds its icons array. Finally it requests /favicon.ico at the site root — the way old browsers and most bots do — and checks that a real image comes back rather than an HTML error page dressed up as a 200.
The score starts at 100 and loses points for: no icon at all (−45), no <link rel="icon"> in the HTML (−15), no Apple touch icon (−20), nothing scalable or at least 32 px (−15), no /favicon.ico (−10), and no manifest (−10). A manifest that is linked but unreadable costs 5.
The set a modern site should ship
/favicon.icoat the root — 16, 32 and 48 px frames in one file, for legacy browsers, feed readers and bots that never read the HTML.<link rel="icon" type="image/svg+xml" href="/icon.svg">— scales to any pixel density, and can include aprefers-color-schememedia query inside the SVG so it adapts to dark tabs.<link rel="apple-touch-icon" href="/apple-touch-icon.png">— a 180×180 PNG with no transparency, for iOS home screens and share sheets.- A
site.webmanifestwith 192×192 and 512×512 PNGs (plus amaskablevariant) so Android and Chrome can show an install prompt and splash screen.