Favicon not showing in google search: 27 homepages, 7 files that break a written rule

A favicon not showing in google search is usually a file problem, not a tag problem. Of 27 homepages we could read, all declare an icon and every declaration resolves, but 5 point at a format Google's documentation does not list and 2 more are not square.

Crawling & Indexing8 min read1888 views
Favicon not showing in google search: 27 homepages, 7 files that break a written rule

FIELD TEST · 2026-09-14 · 30 homepages · 27 icons downloaded and decoded · one pass

Sample and method: the 30-domain panel this series has used since 2026-08-15, one request per homepage on 2026-09-14 with a desktop Chrome user agent and no JavaScript. For each homepage we then requested the icon file it points at and decoded that file, so every size below is the real pixel size rather than the sizes attribute the page declares.

A favicon not showing in google search is usually a file problem, not a tag problem. On the 27 homepages we could read, all 27 declare an icon and every declaration returns 200 — but 5 point at a file in a format Google's documentation does not list, and 2 more are not square. That is 7 files failing a requirement Google publishes in writing, on sites with full-time platform teams.

How we measured

One homepage request per domain, then one request for the icon file. We parsed every <link> whose rel value names an icon, picked the first one Google's documentation lists as a favicon source, and downloaded it. Dimensions come from decoding those bytes, which is the step the earlier survey of this panel deliberately skipped.

curl -s -o home.html -w "%{http_code}\n" \
  -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/126.0 Safari/537.36" \
  https://example.com/

python3 -c "
from html.parser import HTMLParser
from urllib.parse import urljoin
from PIL import Image
import io, urllib.request

class Icons(HTMLParser):
    def __init__(self): super().__init__(); self.hrefs = []
    def handle_starttag(self, tag, attrs):
        a = dict(attrs)
        rel = (a.get('rel') or '').lower().split()
        if tag == 'link' and 'icon' in rel:
            self.hrefs.append(a.get('href', ''))

p = Icons(); p.feed(open('home.html').read())
url = urljoin('https://example.com/', p.hrefs[0])
raw = urllib.request.urlopen(url).read()
im = Image.open(io.BytesIO(raw))
print(url, im.format, im.size)
"
CheckSource of the ruleResult
Homepage returns 20027 of 30
Declares at least one iconGoogle favicon doc27 of 27
First icon returns 200Google favicon doc27 of 27
File format is listedBMP, GIF, ICO, PNG, JPEG, PPM, TIFF22 of 27
File is square1:1 aspect ratio22 of 24 decoded

What Google's favicon documentation actually requires

Google's favicon guidelines are short and specific, which is what makes them useful as a checklist. The favicon documentation was last updated 2026-08-28 UTC when we fetched it on 2026-09-14, and it states the file requirements in one paragraph.

"Your favicon must be a square (1:1 aspect ratio) that's at least 8x8px. While the minimum size requirement is 8x8px, we recommend using a favicon that's larger than 48x48px so that it looks good on various surfaces. Google Search supports the following favicon file formats: BMP, GIF, ICO, PNG, JPEG, PPM, and TIFF." — Google Search Central, favicon documentation, retrieved 2026-09-14

Three other lines on the same page matter for this measurement. The favicon URL "must be stable". Googlebot-Image "must be able to crawl the favicon file" and Googlebot must be able to crawl the home page. And the page is explicit that none of this is a ranking factor and no outcome is promised: a favicon "isn't guaranteed to appear in Google Search results, even if all guidelines are met".

The 27 icons, decoded

Every readable homepage declares an icon, so the interesting number is what the file turns out to be. The table is sorted by domain; means the file is a vector image our decoder cannot measure in pixels.

SiteFormatPixelsSquare
about.gitlab.comico48x48yes
arstechnica.compng60x60yes
github.comsvg
news.ycombinator.comsvg
nextjs.orgico48x48yes
railway.comico48x48yes
react.devpng32x32yes
slack.compng35x34no
stripe.comsvg
substack.comico32x32yes
supabase.comico16x16yes
techcrunch.comwebp32x32yes
vercel.comico48x48yes
webflow.compng32x32yes
www.bbc.compng32x32yes
www.cloudflare.compng99x96no
www.figma.compng128x128yes
www.framer.compng64x64yes
www.mozilla.orgpng196x196yes
www.netlify.comico48x48yes
www.notion.comico64x64yes
www.nytimes.compng48x48yes
www.reddit.compng64x64yes
www.shopify.comwebp32x32yes
www.theverge.comico48x48yes
www.wikipedia.orgico48x48yes
www.wired.comico16x16yes

Two columns are worth reading against the declared markup rather than the file. Sixteen of the 27 icons live on a different hostname from the homepage — a CDN, in every case — and 16 of the 27 pages declare no sizes attribute at all. Neither is a problem by itself, because Google reads the file, not the attribute. It just means the markup tells you less than it appears to.

Why a favicon not showing in google search is usually about the file

Google's supported-format list has seven entries and SVG is not one of them, nor is WebP. Five of the 27 homepages point their primary icon at a file in one of those two formats, and in two of the five the declared type disagrees with what the server actually sent.

SiteDeclared typeFile served
github.comimage/svg+xmlsvg
stripe.comimage/svg+xmlsvg
news.ycombinator.com(none)svg
www.shopify.comimage/pngwebp
techcrunch.com(none)webp

GitHub is the clearest case, and it is a good illustration of why the declaration alone is not enough. Its rel="icon" is an SVG, which is the rel value Google documents; its PNG is declared as alternate icon, which is not a rel value on Google's list. So the supported rel points at an unsupported format and the supported format sits under an unlisted rel.

The two WebP files are the opposite failure. Shopify declares type="image/png" and TechCrunch declares nothing, and both servers return image/webp at a URL ending in .png. The markup looks compliant and the bytes are not.

Two icons are not square

The square rule is written as a must, and two large sites break it. Cloudflare's /favicon.ico is a 99x96 PNG, and Slack's favicon-32.png is 35x34 despite a declared sizes of "16x16 32x32 48x48". Both files decode cleanly; neither is square.

We cannot tell from the outside what Google does with them. Both sites have shipped those files for years and both are large enough that someone would have noticed a blank icon, so the likely explanation is that Google pads or scales a near-square image rather than dropping it. That is a guess, and it is the one place where this measurement stops.

The size recommendation is the softer rule, and it is the one most sites miss. Ten of the 24 decodable icons are smaller than the recommended 48x48 — eight are exactly 48, and seven are larger. Every one of them still clears the hard 8x8 minimum, so none of this is a failure; it is just a file that will look worse on the surfaces that draw it large.

The icon that looked blocked and was not

Google requires Googlebot-Image to be able to crawl the icon, so we checked every icon path against the robots.txt of the host that actually serves it. Not one of the 27 is blocked — and the site that looked blocked is the instructive one.

Reddit's icon is a 64x64 PNG on www.redditstatic.com, and that host's robots.txt opens with User-agent: * and Disallow: /, with a short list of allowed paths that does not include the icon. Read that far and the icon is blocked. But the same file has a later group that names Googlebot-Image with an empty Disallow, and a specific group overrides the wildcard one. For Googlebot-Image the file is open. The trap is checking the homepage's robots.txt instead of the icon host's; the two are different files, and 16 of these 27 icons are cross-host.

What this means for your own favicon

Run these checks against your own icon and read the file, not the markup. The order matters, because the first two decide whether the last three are even reachable.

  1. Fetch the icon URL your page declares and confirm it returns 200. A 404 on a declaration that looks fine is the single most common cause.
  2. Decode the bytes and print the format and the pixel size. Do not trust the file extension: an .ico can hold a PNG, and a .png URL can serve WebP.
  3. Check that the format is one of the seven Google lists, and that width equals height.
  4. If the file is smaller than 48x48, re-export it at 128x128 or larger and keep the same URL, since the URL is required to be stable.
  5. Confirm Googlebot-Image can fetch the path on the icon's own host, then request indexing of the home page from the URL Inspection tool, because the favicon is re-read with the home page.
  • Check the file, because the declaration can be perfect while the bytes are SVG, WebP, or 99x96.
  • Do not add a second rel="icon" pointing at a different size and assume Google will pick the better one; the documentation says one favicon per hostname and does not promise which link wins.

A crawler accessibility check answers the neighbouring question — what an AI crawler actually receives from your page — and the same habit applies: measure the response, not the markup. The declaration-side numbers for this panel are in favicon seo across 27 homepages, and the icon tags a site needs for install prompts are in the web app manifest survey.

Common questions

How did you measure this?

One request per homepage on 2026-09-14 with a desktop Chrome user agent and no JavaScript, then one request for the first icon the page declares under a rel value Google lists. We saved the icon bytes and decoded them with an image library, so the sizes are the files' own dimensions. The panel is the same 30 domains this series uses; 3 returned 403 to our client and are excluded, which leaves 27.

Does a wrong favicon hurt rankings?

No. Google files favicons under search appearance, not ranking, and says a favicon "isn't guaranteed to appear in Google Search results, even if all guidelines are met". A missing icon costs you a visual cue, not a position.

My favicon is SVG. Should I replace it?

Add a raster one. SVG is not in Google's supported-format list, and every site in this panel that ships SVG also ships a raster fallback somewhere. The safe setup is a square PNG of 128x128 or larger declared with rel="icon", and the SVG kept as an additional link if you want it for browsers.

How long before a new favicon shows up?

Google re-reads the favicon when it recrawls the home page, so the timing is your home page's crawl timing rather than a favicon-specific process. The page advises requesting indexing of the home page through the URL Inspection tool, which is the same tool you would use to check the page is crawlable at all.

Why did the earlier survey not decode the files?

Because it was measuring declarations, and the two questions are separate. That survey found all 27 homepages declare an icon and five lack a root /favicon.ico. This one starts where that stopped, at the bytes behind the declaration — and it is why two of the files here are non-square even though every declaration in the panel resolved.

Favicon not showing in google search: 27 homepages, 7 files that break a written rule