← Blog

The favicon check took three tries to be honest

Our SEO checks look at the page we already fetched, so most of them cost nothing extra. One of the newer legs is the favicon check — and it's a good example of how much work hides behind a single "✓" sign.

favicon in action
favicon in action

The naive version

First attempt: does the HTML declare <link rel="icon">? If yes, check passes. This is technically correct and nearly useless — it measures whether the tag exists, not whether a browser will actually show an icon. Sites that serve a perfectly good /favicon.ico without declaring it got flagged as missing, and sites whose declared link 404s passed.

The harder version

So we started probing /favicon.ico — the conventional path browsers hit on every site anyway, declared or not. One extra request inside the existing discovery batch.

Now the question flips: did the response contain an icon, or an error page dressed as a 200? Plenty of servers answer every unknown path with a friendly HTML page and a 200 status. So the first rule became: a < at the start means markup, markup means error page, no icon.

Two more rounds of "not quite"

Three states, not two

The leg doesn't pretend binary certainty. "Served" vs "absent" would be two states; we keep three:

That's the pattern across the whole scanner,throughout the whole Site is OK app, just in miniature: measure what's real, say when you couldn't, and never let a plausible-looking 200 talk you into a clean result that wasn't earned.

And at the end, give honest and precise recommendations to the viewer.

Some of the SEO checks and recommendations, in action
Some of the SEO checks and recommendations, in action
Is your site OK? Run a free health check — HTTP, HTTPS, TLS, DNS, mail security and more in seconds. Check a domain →