Hướng dẫn

Biểu tượng yêu thích cho React

React không hiển thị `<head>` cho bạn — favicon nằm trong index.html tĩnh của bạn. Thả favicon.ico của bạn vào thư mục /public, liên kết nó trong index.html và bạn đã hoàn tất những điều cơ bản. Các thiết lập hiện đại cũng bao gồm một biến thể SVG có hỗ trợ chế độ tối, apple-touch-icon 180×180 và bảng kê khai web cho lời nhắc cài đặt PWA. favicon generator tạo ra mọi tệp bạn cần từ một hình ảnh nguồn duy nhất. Xem thêm how-to-add-favicon-html guide để tham khảo thẻ liên kết đầy đủ.

Trong cả Vite và Tạo ứng dụng React (CRA), các tệp tĩnh được đặt trong thư mục /public được cung cấp trực tiếp từ URL gốc mà không cần xử lý gói nào. Điều này có nghĩa là /public/favicon.ico có thể truy cập được tại https://yourdomain.com/favicon.ico, đây chính xác là đường dẫn mà trình duyệt thử đầu tiên cho favicon. Không cần trình tải webpack, plugin Vite hoặc cấu hình bản dựng để thiết lập .ico cơ bản.

Khi bạn tạo dự án Vite React mới với `npm create vite@latest`, giàn giáo đã đặt favicon.svg vào /public và tham chiếu nó trong index.html. Đây là điểm khởi đầu tốt, nhưng SVG mặc định là biểu tượng Vite chung. Thay thế nó bằng SVG của riêng bạn và thêm dự phòng .ico nhiều kích thước cho các trình duyệt không hỗ trợ favicon SVG.

Tạo khung ứng dụng React bao gồm favicon.ico trong /public theo mặc định. Để thay thế nó, chỉ cần ghi đè lên tệp bằng .ico nhiều kích thước của riêng bạn. CRA cũng bao gồm tệp kê khai.json trong /public — cập nhật các mục nhập mảng `icons` để trỏ đến các tệp PNG của riêng bạn (192×192 và 512×512). index.html trong /public đã có thẻ liên kết tệp kê khai được CRA chèn vào.

Tệp .ico nhiều kích thước vẫn là tệp quan trọng nhất. Các trình duyệt không hỗ trợ favicon SVG — phiên bản Safari cũ hơn, một số công cụ nhúng và tạo lối tắt Windows — tự động quay lại /favicon.ico. Một tệp .ico duy nhất gói các khung 16×16, 32×32, 48×48 và 64×64 để trình duyệt chọn độ phân giải phù hợp mà không cần thêm bất kỳ thẻ liên kết nào.

Đối với màn hình có độ phân giải cao (Retina), hãy thêm thẻ liên kết PNG rõ ràng bên cạnh .ico. `<link rel='icon' type='image/png' sizes='32x32' href='/favicon-32x32.png'>` yêu cầu trình duyệt sử dụng PNG trên màn hình retina trong đó biểu tượng 2x hiển thị sắc nét hơn khung .ico có cùng độ phân giải. Đặt cả .ico và PNG vào /public.

Favicon SVG cung cấp giải pháp phù hợp nhất cho tương lai cho các ứng dụng React. Một tệp SVG duy nhất hiển thị sắc nét ở bất kỳ kích thước tab nào và có thể điều chỉnh màu sắc của nó cho phù hợp với bảng màu của người dùng. Thêm `<link rel='icon' type='image/svg+xml' href='/favicon.svg'>` vào index.html. Các trình duyệt hỗ trợ favicon SVG thích nó hơn .ico; các trình duyệt không chỉ đơn giản chuyển sang thẻ liên kết tiếp theo.

Các favicon SVG ở chế độ tối rất mạnh mẽ trong các ứng dụng React vì đối tượng mục tiêu thường sử dụng các công cụ dành cho nhà phát triển và máy tính để bàn ở chế độ tối. Nhúng khối `<style>` bên trong SVG của bạn với `@media (prefers-color-scheme: dark) { :root { fill: white; } }` (được điều chỉnh theo cấu trúc biểu tượng của bạn). Tệp duy nhất này phục vụ cả chủ đề sáng và tối mà không có JavaScript hoặc thẻ bổ sung.

apple-touch-icon là bắt buộc nếu bất kỳ người dùng di động nào lưu ứng dụng React của bạn vào màn hình chính của họ. Đặt apple-touch-icon.png (180×180) vào /public và thêm `<link rel='apple-touch-icon' size='180x180' href='/apple-touch-icon.png'>` vào index.html. Nếu không có điều này, iOS sẽ hiển thị ảnh chụp màn hình có độ phân giải thấp của ứng dụng thay vì biểu tượng thương hiệu của bạn trên màn hình chính.

Đối với các ứng dụng React được triển khai dưới dạng PWA, /public/manifest.json (hoặc site.webmanifest) của bạn phải bao gồm các mục biểu tượng ở kích thước 192×192 và 512×512. Các kích thước này điều khiển lời nhắc cài đặt trên màn hình chính Android và hộp thoại cài đặt Chrome PWA. favicon generator xuất ra cả PNG và mẫu tệp kê khai được điền sẵn mà bạn có thể thả trực tiếp vào /public.

Vấn đề định tuyến cho favicon trong quá trình triển khai React SPA. Đường dẫn /favicon.ico phải được máy chủ của bạn cung cấp trực tiếp, không bị bộ định tuyến React chặn. Các trang Vercel, Netlify và GitHub đều phục vụ nội dung /public ở thư mục gốc trước khi chuyển tới SPA. Nếu bạn lưu trữ trên máy chủ tùy chỉnh, hãy xác nhận rằng phần mềm trung gian tệp tĩnh của bạn chạy trước tuyến tổng hợp phục vụ XXH4XX.

Trong quá trình phát triển với `npm run dev`, Vite tự động tải lại hầu hết các thay đổi nhưng những thay đổi của favicon đôi khi yêu cầu làm mới cứng trình duyệt thủ công. Bộ nhớ đệm của trình duyệt /favicon.ico trên mỗi nguồn gốc ngay cả khi tải lại máy chủ nhà phát triển. Để buộc làm mới trong quá trình phát triển, hãy làm mới cứng (Ctrl+Shift+R) hoặc nối thêm chuỗi truy vấn như `/favicon.svg?v=2` vào thẻ liên kết của bạn tạm thời.

Trong thiết lập hiển thị phía máy chủ (ví dụ: React với máy chủ Express tùy chỉnh), bạn phải xác nhận phần mềm trung gian express.static() phục vụ /public trước trình xử lý React SSR. Nếu trình xử lý SSR bắt được tất cả các yêu cầu trước tiên, /favicon.ico sẽ được React hiển thị và trả về HTML thay vì tệp ICO nhị phân, phá vỡ hoàn toàn favicon.

Thiết lập Monorepo với nhiều ứng dụng React cần quản lý favicon cẩn thận. Thư mục /public của mỗi ứng dụng đều có biểu tượng yêu thích riêng. Nếu bạn chia sẻ các biểu tượng giữa các ứng dụng, hãy cân nhắc việc giữ một thư mục biểu tượng nguồn tin cậy duy nhất ở thư mục gốc monorepo và sao chép các tệp vào từng /public trong bước xây dựng. Các công cụ như `cp` trong tập lệnh xây dựng hoặc plugin đồng bộ hóa nội dung chuyên dụng giúp chúng được đồng bộ hóa.

Sau khi triển khai, hãy sử dụng favicon tester để xác minh tất cả các biến thể favicon đều có thể truy cập công khai. Nhập URL sản phẩm của bạn và kiểm tra xem favicon.ico, favicon.svg, apple-touch-icon.png và PNG trong bảng kê khai của bạn đều phân giải chính xác. Điều này loại trừ việc phân phát tệp tĩnh bị định cấu hình sai hoặc các đường dẫn hoạt động trong nhà phát triển nhưng bị gián đoạn trong quá trình sản xuất.

Cách hoạt động

  1. 1

    Tạo gói favicon của bạn

    Tải 512×512 PNG hoặc SVG lên [favicon generator](tool:favicon-generator). Tải xuống gói chứa favicon.ico, favicon.svg, apple-touch-icon.png, android-chrome-192x192.png, android-chrome-512x512.png và site.webmanifest.

  2. 2

    Sao chép tất cả các tập tin vào XXH1XX

    Đặt mọi tệp trong gói vào thư mục /public của dự án của bạn. Điều này đảm bảo Vite và CRA phân phối chúng tại URL gốc (ví dụ: https://yourdomain.com/favicon.ico).

  3. 3

    Cập nhật thẻ liên kết trong index.html

    Mở /public/index.html (hoặc index.html ở thư mục gốc của dự án cho Vite). Thay thế hoặc thêm phần sau vào bên trong `<head>`: liên kết .ico, liên kết SVG, liên kết apple-touch-icon và liên kết tệp kê khai. Sao chép đoạn mã HTML được tạo từ gói favicon README.

  4. 4

    Cập nhật các mục biểu tượng của tệp kê khai.json

    Đối với CRA, hãy mở /public/manifest.json và cập nhật mảng `icons` để tham chiếu các PNG 192×192 và 512×512 mới của bạn. Đối với Vite, đổi tên site.webmanifest được tạo thành tệp kê khai.json hoặc giữ tên tệp gốc và đảm bảo thẻ liên kết trỏ đến tên đó.

  5. 5

    Thử nghiệm trong phát triển và sản xuất

    Làm mới cứng trình duyệt trong quá trình phát triển để bỏ qua bộ đệm favicon. Sau khi triển khai, hãy sử dụng [favicon tester](utility:favicon-tester) để xác nhận tất cả các đường dẫn biểu tượng đều được giải quyết chính xác. Trên iOS, sử dụng 'Thêm vào màn hình chính' để xác minh apple-touch-icon.

Thử ngay

Xây dựng một favicon sẵn sàng cho React

Tạo Favicon

Câu hỏi thường gặp

Favicon nằm ở đâu trong ứng dụng Vite React?+

Trong thư mục /public: /public/favicon.ico, /public/favicon.svg, /public/apple-touch-icon.png. Mọi thứ trong /public được phân phối tại URL gốc mà không cần xử lý bản dựng.

Làm cách nào để thay thế favicon Vite mặc định?+

Thay thế /public/favicon.svg và /public/favicon.ico bằng các tệp của riêng bạn. Đồng thời cập nhật các thẻ `<link>` trong index.html nếu các href khác nhau. Khởi động lại máy chủ nhà phát triển và làm mới cứng tab trình duyệt để xem thay đổi.

Làm cách nào để thêm biểu tượng yêu thích chế độ tối trong React?+

Sử dụng biểu tượng yêu thích SVG với khối kiểu `@media (prefers-color-scheme: dark)` được nhúng để thay đổi màu tô hoặc màu nét của đường dẫn biểu tượng của bạn. Liên kết nó với `<link rel='icon' type='image/svg+xml' href='/favicon.svg'>` trong index.html. Không cần JavaScript.

Tại sao favicon React của tôi không cập nhật trong trình duyệt?+

Bộ nhớ đệm của trình duyệt /favicon.ico trên mỗi nguồn gốc, thậm chí khi tải lại mô-đun nóng. Làm mới cứng tab (Ctrl+Shift+R / Cmd+Shift+R) hoặc tạm thời nối chuỗi truy vấn phiên bản vào href trong thẻ liên kết của bạn để buộc tìm nạp mới.

Tôi có cần định cấu hình Vite hoặc webpack để phân phối favicon không?+

Không. Cả Vite và CRA đều tự động phục vụ thư mục /public tại URL gốc. Không cần cấu hình bộ đóng gói cho các tệp favicon miễn là chúng được đặt trong /public.

Tệp kê khai.json trong dự án CRA là gì và nó có ảnh hưởng đến favicon không?+

Đây là bảng kê khai ứng dụng web cho phép lời nhắc cài đặt PWA. Nó bao gồm các mục biểu tượng trỏ đến PNG trong /public. Cập nhật các mục nhập 192×192 và 512×512 để sử dụng biểu tượng của riêng bạn nhằm hiển thị chính xác trong quá trình cài đặt màn hình chính Android.

Tôi có thể sử dụng favicon trong thành phần React thay vì index.html không?+

Có, sử dụng các thư viện như Reac-helmet hoặc thành phần Head tích hợp của Next.js. Đối với Vite React, hãy đưa trực tiếp các thẻ liên kết vào index.html — đây là cách tiếp cận đơn giản và đáng tin cậy nhất vì tệp được xử lý tại thời điểm xây dựng.

Công cụ liên quan

Thêm hướng dẫn

Hướng dẫn

Khám phá FetchFavicon

Thể loại

Bộ chuyển đổi

Tiện ích

Hướng dẫn

Hướng dẫn