First CHAppsWeb apps

First CH Apps / Favicon Checker

Favicon Checker

Check a site's favicon from its URL: we fetch every favicon.ico, link rel=icon, apple-touch-icon and manifest icon and report its real format and size (e.g.

How it works and details

Enter a URL and we collect every icon the page declares (favicon.ico, link rel=icon, apple-touch-icon and the Web App Manifest icons), then fetch each one to confirm its real format, dimensions and weight. For ICO files we read every size packed inside.

Generating icons is the job of the favicon generator on First CH Tools (fully in-browser). Browsers cannot fetch another site's URL directly (CORS), so this server-side app takes over the checking half.

Need to generate icons? Favicon generator (tools.first-ch.com, in-browser)

Website favicon size: which icon sizes and formats a site needs

A website does not need one favicon but a small set, one for each place the icon appears. The table lists the favicon size and format this checker expects for each, which are the same rules behind the OK / Review / Missing findings in each report.

A favicon.ico can pack several sizes, and we read every size inside it. Keep a /favicon.ico at the site root even when you declare other icons: feed readers and some crawlers only look there.

Where it appearsDeclared withSize and format we check for
Browser tab/favicon.ico or <link rel="icon">32×32 or larger (smaller icons look blurry on high-DPI screens). An SVG icon (type="image/svg+xml") stays sharp at any size
iOS Home Screen<link rel="apple-touch-icon">180×180 PNG. iOS does not render an SVG here, and without one it uses a screenshot of the page
Android Home Screen / PWA installWeb App Manifest icons[]192×192 and 512×512, plus one icon with purpose="maskable" so adaptive icons do not crop the edges
Every icon—Real pixels match the sizes attribute, under 100KB each, served over https://

How to test a favicon

  1. Paste the URL of the page (usually the home page) into the form above and press Check. We read the icons declared in that page's HTML and also request /favicon.ico at the site root.
  2. Read the Findings first: Missing marks an icon or declaration that is absent or broken, Review marks something that works but could be improved (for example an icon below the sizes in the table above).
  3. In Icons found, compare Declared with Measured. A favicon declared as 32×32 that is really 16×16, an icon that fails to load, or a file that is not an image at all (often an HTML 404 page) shows up here.
  4. Look at the light and dark previews to see whether the icon still reads on a dark tab bar.
  5. After you replace an icon, run the check again to confirm the new files are live. Your own browser may still show the old favicon from its cache for a while.

SERVER PROCESSING — what we send and what we keep

Sent: only the URL you type. Our server (Cloudflare Workers) fetches that URL as a public page, then fetches the icons it declares (up to 12) and the manifest.

Stored: nothing. The check lives entirely inside one request and writes neither the URL nor the result to any database (no KV, no D1). It leaves memory when the request ends.

Returned: the declarations we found (rel, sizes, type) plus whether each icon loaded, its format, real dimensions and weight. We never re-serve the fetched HTML, manifest or images (preview images are loaded by your browser directly from the source site).

Note: public GET only. URLs pointing at internal networks, localhost or private IPs are rejected, and pages behind a login cannot be checked.

Use it as an API

POST /favicon-check/api/inspect with JSON ({"url": "https://example.com/"}) or a form body and you get the same report back as JSON.

Browsers cache favicons aggressively. Right after replacing one, verify with a changed filename or a hard reload.