favicon not showing in google search:27 个首页的图标,下载下来解码了一遍

favicon not showing in google search 时,问题多半不在声明,而在文件本身:能读到的 27 个首页里,5 个指向 Google 文档没列的格式,2 个不是正方形,而每一条声明都返回 200。

抓取与收录7 分钟读完1853 次阅读
favicon not showing in google search:27 个首页的图标,下载下来解码了一遍

实测 · 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)
"
检查项规则出处结果
首页返回 20030 个里 27 个
声明了至少一个图标Google 图标文档27 个里 27 个
第一个图标返回 200Google 图标文档27 个里 27 个
格式在支持列表里BMP, GIF, ICO, PNG, JPEG, PPM, TIFF27 个里 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.comico48x48
arstechnica.compng60x60
github.comsvg
news.ycombinator.comsvg
nextjs.orgico48x48
railway.comico48x48
react.devpng32x32
slack.compng35x34
stripe.comsvg
substack.comico32x32
supabase.comico16x16
techcrunch.comwebp32x32
vercel.comico48x48
webflow.compng32x32
www.bbc.compng32x32
www.cloudflare.compng99x96
www.figma.compng128x128
www.framer.compng64x64
www.mozilla.orgpng196x196
www.netlify.comico48x48
www.notion.comico64x64
www.nytimes.compng48x48
www.reddit.compng64x64
www.shopify.comwebp32x32
www.theverge.comico48x48
www.wikipedia.orgico48x48
www.wired.comico16x16

有两列值得对着声明而不是文件看。27 个图标里有 16 个挂在和首页不同的主机名上,全是 CDN;27 个首页里有 16 个根本没写 sizes 属性。这两件事本身都不算错,因为 Google 读的是文件、不是属性。它只说明那行声明能告诉你的,比看上去少。

为什么 favicon not showing in google search 多半是文件的问题

Google 的支持格式列表一共七种,SVG 不在里面,WebP 也不在。27 个首页里有 5 个的主图标指向这两种格式之一,其中两个的实际字节和声明还对不上。

站点声明的类型实际文件
github.comimage/svg+xmlsvg
stripe.comimage/svg+xmlsvg
news.ycombinator.com(没写)svg
www.shopify.comimage/pngwebp
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-ImageDisallow 为空的规则,而具体分组会覆盖通配分组。对 Googlebot-Image 来说这个文件是开着的。陷阱在于去看首页自己的 robots.txt——这两个是不同的文件,而 27 个图标里有 16 个是跨主机的。

你自己那张图标该查哪几项

把下面几条对着自己的图标跑一遍,然后看文件,别看标签。顺序是有意义的,因为前两条决定了后三条还够不够得着。

  1. 抓一次页面声明的那个图标地址,确认返回 200。一个看着没问题的声明回 404,是这类问题里最常见的一种。
  2. 把字节解码,打印出格式和像素尺寸。别信扩展名:.ico 里可以装一张 PNG,.png 地址可以回 WebP。
  3. 确认格式在 Google 列的那七种里,并且宽等于高。
  4. 如果文件小于 48x48,按 128x128 或更大重新导出,地址保持不变——规范要求图标地址稳定。
  5. 确认 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。这次从那句话停下的地方接着走,走到声明背后的字节——也正是为什么这里会有两张非正方形的文件,而面板里每一条声明都解析成功。

favicon not showing in google search:27 个首页的图标,下载下来解码了一遍