favicon.ico 应放在网站根目录,HTML 中可省略 link 标签;若自定义路径,须用绝对路径如 /assets/favicon.ico 并显式声明 ,同时提供 PNG 备选和清除强缓存验证。
浏览器默认只在根目录找 favicon.ico,所以最省事的方式就是把图标文件直接丢到网站根目录(比如 Nginx 的 /usr/share/nginx/html/,或 Python Flask 的 static/ 目录下一级)。如果放别处,必须显式声明路径,否则会静默失败——连控制台都不报错,只是图标不显示。
favicon.ico 放在 / 下,HTML 中可完全不写 标签(部分旧浏览器仍要求写),注意路径以 / 开头表示绝对路径,否则相对路径容易因页面 URL 深度出错file:// 协议打开 HTML,href 中的相对路径会失效;务必起一个本地服务器(如 py
thon3 -m http.server)测试现代写法要兼顾兼容性和语义清晰,不能只靠老式 rel="shortcut icon"。Chrome、Firefox、Safari 对 rel="icon" 已全面支持,type 属性虽非必需,但显式声明能避免 MIME 类型误判。
rel="shortcut icon":这是 IE6 时代遗留,现代浏览器不依赖它,“shortcut” 已被忽略,纯属冗余 指向不同格式:浏览器按顺序取第一个有效项,后面不会 fallback;如需支持 PNG,应另起一行并加 sizes
.ico 格式仍是唯一能在所有桌面浏览器地址栏、标签页、书签栏稳定显示的格式;PNG 和 SVG 虽支持透明和高倍屏,但存在明确限制场景。
.ico 必须有:Windows + Chrome/Firefox 地址栏、IE/Edge 旧版本、部分企业内网环境,对 macOS Safari 标签页、PWA 安装提示更友好rel="icon" type="image/svg+xml",且不支持地址栏显示,仅限 PWA manifest 中的 icons 字段.ico(可用在线工具合并成多尺寸 ICO 文件),单尺寸易在缩放时模糊favicon 缓存极强,改了文件或 HTML 经常看不到效果,不是代码错,是浏览器在“假装没看见”。必须主动打破缓存链路。
chrome://settings/clearBrowserData → 勾选“Cookie 及其他网站数据”+“缓存的图片和文件”,注意别误删登录态href 加时间戳参数,如 href="/favicon.ico?v=2",确保服务端不拦截带 query 的静态文件请求favicon.ico → 查看状态码是否为 200,响应头 Content-Type 是否为 image/x-icon
很多团队卡在“改了图标但死活不显示”,问题往往不在代码本身,而在路径部署位置、缓存策略、或验证方式不对。尤其是本地双击打开 HTML 文件时,file:// 协议下几乎所有 href 都会失效——这点最容易被忽略。