First CH Apps / Favicon Checker
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)Favicon size: for browser tabs an icon of 32×32 or larger is expected (smaller ones look blurry on high-DPI screens). A favicon.ico can pack several sizes, and we read every size inside it. An SVG icon stays sharp at any size.
Apple touch icon format: the apple-touch-icon should be a 180×180 PNG. iOS does not render an SVG here, and a missing one makes iOS use a screenshot of the page when the site is added to the Home Screen.
Web App Manifest icons: 192×192 and 512×512 are the sizes we look for.
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.
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.