favicon not showing in google search:27 个首页的图标,下载下来解码了一遍
favicon not showing in google search 时,问题多半不在声明,而在文件本身:能读到的 27 个首页里,5 个指向 Google 文档没列的格式,2 个不是正方形,而每一条声明都返回 200。
实测 · 2026-09-14 · 30 个首页 · 27 个图标下载并解码 · 一次抓取
样本 / 口径:2026-08-15 起这个系列一直在用的同一批 30 个域名,2026-09-14 每个首页请求一次,桌面 Chrome UA、不执行 JavaScript、跟随跳转;然后对每个首页声明的第一个图标文件再请求一次,把字节落盘后用图像库解码。下面每一个尺寸都是文件的真实像素,不是页面声明的 sizes 属性。
favicon not showing in google search,问题多半不在那行标签,而在文件本身。我们能读到的 27 个首页里,27 个都声明了图标、27 个声明都返回 200,但 5 个指向的文件用的是 Google 文档没列的格式,另有 2 个不是正方形。合计 7 个文件违反了一条白纸黑字写着的规则,而且它们全都来自有专职平台团队的大站。
怎么测的
每个域名先请求一次首页,再请求一次它声明的图标文件。我们把所有 rel 里带图标语义的 <link> 解析出来,取第一个「Google 文档明确列为图标来源」的那个,把文件下下来。尺寸来自解码这些字节——这一步正是这个面板上一次实测刻意跳过的。
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)
"
| 检查项 | 规则出处 | 结果 |
|---|---|---|
| 首页返回 200 | — | 30 个里 27 个 |
| 声明了至少一个图标 | Google 图标文档 | 27 个里 27 个 |
| 第一个图标返回 200 | Google 图标文档 | 27 个里 27 个 |
| 格式在支持列表里 | BMP, GIF, ICO, PNG, JPEG, PPM, TIFF | 27 个里 22 个 |
| 文件是正方形 | 1:1 长宽比 | 24 个可解码里 22 个 |
Google 对图标文件到底要求什么
Google 这份图标规范很短、很具体,所以它可以直接当清单用。favicon 文档的页脚标注 Last updated 2026-08-28 UTC(我们 2026-09-14 实取),文件层面的要求集中在一段里。
「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 文档,2026-09-14 实取
同一页还有三句话对这次测量有直接关系:图标地址「must be stable」,不要频繁改;Googlebot-Image「must be able to crawl the favicon file」、Googlebot 必须能抓首页,两者都不能被挡;以及这一页明说图标不是排名因素,也不做任何承诺——即使全部符合规范,图标也「isn't guaranteed to appear in Google Search results」。
27 个图标解码出来是什么样
每一个可读的首页都声明了图标,所以真正有信息量的是文件本身。下表按域名排序,— 表示文件是矢量图,我们的解码器给不出像素尺寸。
| 站点 | 格式 | 像素 | 正方形 |
|---|---|---|---|
| about.gitlab.com | ico | 48x48 | 是 |
| arstechnica.com | png | 60x60 | 是 |
| github.com | svg | — | — |
| news.ycombinator.com | svg | — | — |
| nextjs.org | ico | 48x48 | 是 |
| railway.com | ico | 48x48 | 是 |
| react.dev | png | 32x32 | 是 |
| slack.com | png | 35x34 | 否 |
| stripe.com | svg | — | — |
| substack.com | ico | 32x32 | 是 |
| supabase.com | ico | 16x16 | 是 |
| techcrunch.com | webp | 32x32 | 是 |
| vercel.com | ico | 48x48 | 是 |
| webflow.com | png | 32x32 | 是 |
| www.bbc.com | png | 32x32 | 是 |
| www.cloudflare.com | png | 99x96 | 否 |
| www.figma.com | png | 128x128 | 是 |
| www.framer.com | png | 64x64 | 是 |
| www.mozilla.org | png | 196x196 | 是 |
| www.netlify.com | ico | 48x48 | 是 |
| www.notion.com | ico | 64x64 | 是 |
| www.nytimes.com | png | 48x48 | 是 |
| www.reddit.com | png | 64x64 | 是 |
| www.shopify.com | webp | 32x32 | 是 |
| www.theverge.com | ico | 48x48 | 是 |
| www.wikipedia.org | ico | 48x48 | 是 |
| www.wired.com | ico | 16x16 | 是 |
有两列值得对着声明而不是文件看。27 个图标里有 16 个挂在和首页不同的主机名上,全是 CDN;27 个首页里有 16 个根本没写 sizes 属性。这两件事本身都不算错,因为 Google 读的是文件、不是属性。它只说明那行声明能告诉你的,比看上去少。
为什么 favicon not showing in google search 多半是文件的问题
Google 的支持格式列表一共七种,SVG 不在里面,WebP 也不在。27 个首页里有 5 个的主图标指向这两种格式之一,其中两个的实际字节和声明还对不上。
| 站点 | 声明的类型 | 实际文件 |
|---|---|---|
| github.com | image/svg+xml | svg |
| stripe.com | image/svg+xml | svg |
| news.ycombinator.com | (没写) | svg |
| www.shopify.com | image/png | webp |
| techcrunch.com | (没写) | webp |
GitHub 是这里最清楚的一例,也正好说明为什么只看声明不够。它的 rel="icon" 是一个 SVG,而 icon 恰恰是 Google 文档列出的那个 rel 值;它的 PNG 声明的 rel 是 alternate icon,这个 rel 不在 Google 的列表里。于是支持的 rel 指向了不支持的格式,支持的格式又挂在没列出的 rel 上。
两个 WebP 是相反的失败。Shopify 写着 type="image/png",TechCrunch 什么都没写,而两台服务器在一个以 .png 结尾的地址上返回的是 image/webp。声明看着合规,字节不合规。
两个图标不是正方形
正方形这条是写成 must 的,而两个大站破了它。Cloudflare 的 /favicon.ico 实际是一张 99x96 的 PNG;Slack 的 favicon-32.png 实际是 35x34,而它声明的 sizes 写的是「16x16 32x32 48x48」。两份文件都能正常解码,都不是正方形。
Google 拿它们怎么办,我们从外面看不出来。这两个站带着这些文件跑了很多年,也都大到出问题一定有人发现,所以更可能的情况是 Google 对近似正方形的图做了缩放或补白,而不是直接不用。这是猜测——我们从外面分不清 Google 到底怎么处理,这是本次测量的一处局限,也是它停下的地方。
尺寸建议是更软的一条,也是漏得最多的一条。24 个可解码的图标里,10 个小于建议的 48x48——8 个正好是 48,7 个大于 48。它们全都越过了 8x8 这条硬下限,所以没有一个是失败,只是放在把图标画得很大的界面上会更糊。
那个看着被挡、其实没被挡的图标
Google 要求 Googlebot-Image 能抓到图标,所以我们把每个图标路径都对着「真正提供这个文件的主机」的 robots.txt 查了一遍。27 个没有一个被挡——而那个看着被挡的站,正好是最值得说的一例。
Reddit 的图标是一张 64x64 的 PNG,放在 www.redditstatic.com 上,而这个主机的 robots.txt 开头就是 User-agent: * 加 Disallow: /,后面跟一小串 Allow,里面没有图标那条路径。读到这里,图标是被挡的。但同一份文件后面还有一组写着 Googlebot-Image、Disallow 为空的规则,而具体分组会覆盖通配分组。对 Googlebot-Image 来说这个文件是开着的。陷阱在于去看首页自己的 robots.txt——这两个是不同的文件,而 27 个图标里有 16 个是跨主机的。
你自己那张图标该查哪几项
把下面几条对着自己的图标跑一遍,然后看文件,别看标签。顺序是有意义的,因为前两条决定了后三条还够不够得着。
- 抓一次页面声明的那个图标地址,确认返回 200。一个看着没问题的声明回 404,是这类问题里最常见的一种。
- 把字节解码,打印出格式和像素尺寸。别信扩展名:
.ico里可以装一张 PNG,.png地址可以回 WebP。 - 确认格式在 Google 列的那七种里,并且宽等于高。
- 如果文件小于 48x48,按 128x128 或更大重新导出,地址保持不变——规范要求图标地址稳定。
- 确认
Googlebot-Image能在图标自己的主机上取到那条路径,然后用 URL Inspection 工具请求重新收录首页,因为图标是跟着首页一起被重新读的。
- 去查文件,因为声明可以完全正确,而字节是 SVG、WebP 或 99x96。
- 别再加一个指向别的尺寸的
rel="icon",指望 Google 挑更好的那个;文档说的是每个主机名只有一个图标,也没承诺哪个 link 会赢。
AI 爬虫可达性检查回答的是相邻的那个问题——一个 AI 爬虫从你的页面上实际拿到什么——习惯是一样的:量返回结果,不是量标签。这个面板声明侧的完整数字在网站图标实测:27 个首页全都声明了,而安装提示要用的那批图标标签在apple-touch-icon 与 manifest 那次实测。
常见问题
你们是怎么测的
2026-09-14 每个首页请求一次,桌面 Chrome UA、不执行 JavaScript;然后按页面声明的第一个「Google 列出的 rel」请求一次图标文件,把字节落盘后用图像库解码,所以尺寸是文件自己的尺寸。样本还是这个系列一直用的 30 个域名,其中 3 个对我们的客户端返回 403,排除后剩 27 个。
图标不对会影响排名吗
不会。Google 把图标归在搜索结果外观,不是排名因素,还补了一句:即使全部符合规范,图标也「isn't guaranteed to appear in Google Search results」。图标缺失丢的是一个视觉提示,不是一个位置。
我的图标是 SVG,要不要换掉
再加一张位图的。SVG 不在 Google 的支持格式列表里,而这批里发 SVG 的站,每一个都在别处留了位图兜底。稳妥的配法是:一张 128x128 或更大的正方形 PNG,用 rel="icon" 声明,SVG 想留给浏览器就再挂一条。
换了图标多久才会显示
Google 是在重新抓取首页时顺便重读图标的,所以时间取决于你首页的抓取节奏,而不是一个图标专属的流程。文档的建议是用 URL Inspection 工具请求重新收录首页,那也是你检查页面能不能被抓的工具。
上一次实测为什么不解码图片
因为那次量的是声明,两个问题是分开的。那次发现 27 个首页全都声明了图标、5 个缺根路径的 /favicon.ico。这次从那句话停下的地方接着走,走到声明背后的字节——也正是为什么这里会有两张非正方形的文件,而面板里每一条声明都解析成功。


