·

favicon 不显示?八成是这几个原因——从路径到缓存逐个排查

换了新 favicon,刷新页面,标签页上还是那个旧图标——这事儿我维护图片转ICO工具这段时间见过太多次,包括我自己站刚上线那阵也踩过。先说清楚我的背景,免得你觉得是纸上谈兵:这个工具是我自己写的,纯浏览器本地转换,所以 favicon 从生成到部署这条链路上的坑,我基本都亲自趟过一遍。下面这些排查步骤都是实际用过的,按"从最可能到最不可能"的顺序排。

第一步:先分清是"没生效"还是"没更新"

很多时候图标其实已经部署好了,只是浏览器还抱着旧的不放。最省事的验证办法:开一个无痕/隐私窗口,或者换个浏览器打开你的网站。无痕窗口不读旧缓存——如果无痕里图标是新的,说明一切正常,只是缓存问题,直接跳去下面"浏览器缓存"那一节看。

原因一:路径写错了(最常见)

favicon 路径错误是出现频率最高的问题,常见三种:

最稳的检查办法:在浏览器地址栏直接输入你 HTML 里写的那个完整 URL,看能不能打开、打开的到底是不是图标。这一步能排除掉一半以上的问题。我自己就干过把 favicon.ico 放在项目根目录、但页面部署在子路径下导致 404 的事,浏览器地址栏一敲就露馅了。

原因二:浏览器缓存了旧图标

浏览器对 favicon 的缓存比普通图片激进得多,而且很多时候"强刷"都未必清得掉——它和页面资源走的不是同一套缓存逻辑。有效的办法按顺序试:

  1. Ctrl+F5 强刷一次。
  2. 开无痕窗口验证(第一步做过的话直接跳过)。
  3. 关掉标签页重新打开,而不是刷新。
  4. 清空浏览器缓存:设置 → 隐私 → 清除浏览数据。
  5. 换个浏览器确认。

如果你正在频繁调试图标,每改一次都要等缓存过期,效率很低。建议全程用无痕窗口调试,确认没问题再收工,比反复强刷省心。

原因三:CDN 或服务器缓存没更新

用了 Cloudflare、CDN,或者托管平台自带缓存(现在大部分托管都有),页面更新了不代表图标文件也立刻生效。favicon.ico 这种小文件经常被缓存得比较久。

处理办法:

顺带提一个真实的坑:这个工具站刚部署时,托管平台把不存在的路径都回退到了首页 HTML(SPA fallback),导致访问 /favicon.ico 返回的是一整个网页而不是图标。如果你也遇到"图标文件访问返回 HTML"的怪事,八成是平台的路由回退设置,去关掉 SPA fallback 或配好 404 处理就好。

原因四:ICO 文件本身有问题

文件没问题才谈得上显示。ICO 文件最常见的毛病:

生成时建议直接选多尺寸(16+32+48)。本站首页的工具就是这么做的:图片拖进去选"Favicon 套装",出来就是现代 PNG 内嵌的多尺寸 ICO,全程浏览器本地处理、图片不上传,不会引入额外的质量问题。

原因五:HTML 里没声明或声明不对

虽然很多浏览器会默认去根目录找 /favicon.ico,但别依赖这个默认行为,显式声明最稳:

<link rel="icon" href="/favicon.ico">

几个注意点:

一套完整的排查顺序

照这个顺序走,别跳步:

  1. 无痕窗口打开网站,确认图标文件本身能访问(地址栏直接输入完整 URL)。
  2. 检查 HTML 里 link rel="icon" 的路径和实际文件位置是否一致。
  3. 检查 ICO 文件:现代 PNG 内嵌、多尺寸、透明背景。
  4. 清浏览器缓存,或无痕窗口再验证一遍。
  5. 清 CDN/托管缓存,或临时加 ?v=2 参数验证。
  6. 换设备、换浏览器最后确认一次。

走到第 5 步还没解决,基本就是托管平台的路由或缓存配置问题,去面板里翻一翻设置。

常见问题

为什么强刷了还是不显示?

强刷(Ctrl+F5)能刷新页面资源,但对 favicon 这类独立请求不一定生效。先用无痕窗口确认文件部署没问题,再清浏览器缓存或加 ?v=2 参数试试。

favicon 多久才会更新?

取决于浏览器和 CDN 的缓存策略,从几分钟到几天都有可能。想尽快看到效果就用无痕窗口验证,正式上线后耐心等缓存过期即可。

换了域名或子域名,图标要重新弄吗?

每个域名/子域名是独立的,都要在对应根目录放 favicon.ico 或在该站点的 HTML 里声明。别指望主站图标自动带到子站。

图标能访问,但标签页还是默认图标?

那基本是缓存问题(浏览器或 CDN),按上面的排查顺序走,多数在第 4、5 步能解决。