Favicon Tools检测创建
React · Not showing

React favicon 不显示?这样修复

React 渲染到一个 DOM 节点,从不碰 head,所以 favicon 存在于一个静态 HTML 文件里。标签页空白,说明那个文件里的 link 标签写错了,或者图标是从 src 导入的、不再位于固定路径上。

head 是一个静态文件,不是组件

浏览器在解析 head 时就会请求 favicon,远早于 React 挂载。所以图标 link 必须放在 HTML 外壳里:Vite 下是项目根目录的 index.html,Create React App 下是 public/index.html。

有两件事会导致它出问题。在 Create React App 中,一个跳过了 %PUBLIC_URL% 占位符的 href 在本地能用,一旦离开域名根路径就会 404。而在任何 React 项目里,从 src 导入图标就是把它交给了打包器,打包器会用内容哈希给它重命名,于是 /favicon.ico 处再也没有东西响应。

追查问题

  1. 1

    直接打开 /favicon.ico

    出现 404 说明文件没有在该路径上提供:这是构建或路径问题。如果能加载,说明文件没问题,问题出在 link 标签或缓存。

  2. 2

    读取构建后的 index.html

    看构建输出,而不是你的源文件。确认图标 href 解析到了一个真实路径,并且对 CRA 而言,%PUBLIC_URL% 被替换掉了、而不是原样保留。

  3. 3

    别再从 src 导入图标

    public/ 里的文件会保留名字并在固定路径上响应;从 src/ 导入的文件会被加哈希。favicon 必须放在 public/ 里。

React favicon 不显示:常见问题

为什么我的 React favicon 不显示?

几乎总是 index.html 里的 link 标签指向了文件不存在的地方,或者图标是从 src 导入的、拿到了一个带哈希的文件名。直接打开 /favicon.ico,看看该路径上到底有没有提供这个文件。

为什么部署到子路径后 favicon 就 404 了?

href 相对域名根路径解析,而不是相对你的子目录。在 Vite 中设置 vite.config.js 里的 base;在 Create React App 中设置 homepage 字段并在模板里使用 %PUBLIC_URL%,然后检查构建后的 index.html。

我需要在 React 代码里导入 favicon 吗?

不需要。public/ 里的文件会原样复制到构建输出,并不属于模块图。导入它会生成第二份带哈希的副本,并破坏固定的 /favicon.ico 路径。

Keep going