Menu

Favicon trong HTML: cách thêm favicon bằng link rel=icon

Favicon là biểu tượng nhỏ trên tab trình duyệt. Tìm hiểu thẻ link dùng để thêm favicon, những tệp và kích thước cần có (ICO, SVG, PNG, apple-touch-icon), cách làm favicon bằng SVG hoặc emoji, cách đổi favicon bằng JavaScript và vì sao favicon cũ vẫn cứ hiện ra.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Cách thêm favicon

Lưu biểu tượng trên trang web và trỏ tới nó bằng thẻ <link rel="icon"> trong <head>:

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

Với một trang web cơ bản, chỉ cần vậy là đủ. href có thể trỏ tới tệp .ico, .png hoặc .svg. Ví dụ dưới đây dùng một SVG viết thẳng vào href dưới dạng data URI, nên không cần tệp riêng. Bản xem trước nằm trong một trang khác thì không đổi được tab trình duyệt của bạn, nên script vẽ cùng biểu tượng đó lên một tab giả và ở ba kích thước:

Ở 16 pixel chỉ đủ chỗ cho một chữ cái đậm hoặc một hình đơn giản, còn chi tiết nhỏ sẽ biến mất. Hãy thiết kế biểu tượng cho kích thước nhỏ nhất trước. Đổi fill='%232563eb' sang màu khác (%23 là dấu # đã mã hóa URL) và mọi bản sao đều cập nhật theo.

Cần có những tệp nào

Trình duyệt, điện thoại và trình khởi chạy ứng dụng tìm những biểu tượng khác nhau. Một bộ nhỏ là đủ cho tất cả:

<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.webmanifest">
TệpKích thướcDùng cho
favicon.ico32×32Tab trình duyệt, và những công cụ chỉ tìm /favicon.ico
icon.svgBất kỳ (vector)Tab sắc nét ở mọi mật độ màn hình, trên Chrome, Edge và Firefox
apple-touch-icon.png180×180Biểu tượng khi ai đó thêm trang của bạn vào màn hình chính iPhone hoặc iPad
Biểu tượng trong manifestPNG 192×192 và 512×512Màn hình chính Android và ứng dụng web đã cài

Hầu hết trình duyệt cũng tự yêu cầu /favicon.ico ở thư mục gốc của trang khi trang không có thẻ link biểu tượng, nên đặt một tệp favicon.ico ở đó là lựa chọn mặc định hữu ích. Thuộc tính sizes cho trình duyệt biết kích thước của từng tệp để chọn tệp phù hợp nhất. Hãy dùng rel="icon"; rel="shortcut icon" cũ hơn vẫn chạy chỉ vì trình duyệt bỏ qua từ thừa.

Favicon bằng emoji

Với bản thử nghiệm hay trang cá nhân, emoji là cách làm favicon nhanh. Đặt emoji bên trong phần tử <text> của SVG:

%F0%9F%8D%AA là emoji bánh quy đã mã hóa URL. Emoji được vẽ bằng font emoji của hệ điều hành, nên trông khác nhau trên Windows, macOS và Android; với một sản phẩm thật, biểu tượng được thiết kế riêng là lựa chọn tốt hơn.

Biểu tượng đổi theo chế độ tối

Favicon SVG có thể mang CSS riêng, kể cả media query prefers-color-scheme, nên một biểu tượng tối có thể chuyển sang sáng khi trình duyệt dùng giao diện tối:

<!-- icon.svg -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
  <style>
    circle { fill: #111827; }
    @media (prefers-color-scheme: dark) { circle { fill: #f9fafb; } }
  </style>
  <circle cx="16" cy="16" r="14"/>
</svg>

Đổi favicon bằng JavaScript

Các trang web dùng favicon thay đổi để hiện chấm thông báo hoặc màu trạng thái. Vẽ biểu tượng mới lên một <canvas> rồi gán href của thẻ link bằng ảnh của canvas:

Trên một trang thật trong Chrome hoặc Firefox, biểu tượng trên tab đổi mỗi lần href được gán, cùng lúc với ảnh xem trước thay đổi ở đây.

Lỗi thường gặp

  • Sai đường dẫn. href="favicon.ico" là đường dẫn tương đối so với trang hiện tại, nên sẽ hỏng ở /blog/post. Hãy dùng đường dẫn từ gốc: href="/favicon.ico".
  • Mong biểu tượng mới hiện ra ngay. Trình duyệt lưu favicon trong bộ nhớ đệm rất lâu. Tải lại sau khi xóa bộ nhớ đệm, hoặc đổi URL (/favicon.ico?v=2) khi bạn thay biểu tượng.
  • Thu nhỏ một logo nhiều chi tiết xuống 16 pixel. Hãy đơn giản hóa: một chữ cái hoặc một hình có độ tương phản cao.
  • Chỉ có SVG. Giữ thêm ICO hoặc PNG cho những trình duyệt không hỗ trợ favicon SVG, và thêm apple-touch-icon cho iOS.
  • Đặt thẻ link trong <body>. Hãy để nó trong <head> cùng thẻ title và các metadata khác.

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

Làm sao thêm favicon trong HTML?

Đặt tệp biểu tượng lên trang web và thêm <link rel="icon" href="/favicon.ico"> (hoặc đường dẫn tới tệp PNG hay SVG) bên trong <head>. Khi đó trình duyệt hiển thị biểu tượng trên tab, trong dấu trang và trong lịch sử duyệt web.

Favicon nên có kích thước bao nhiêu?

Hãy có một favicon.ico (hoặc PNG) 32×32 cho tab, một tệp SVG co giãn được mọi kích thước, và một apple-touch-icon PNG 180×180 cho màn hình chính của iPhone. Ứng dụng web có tệp manifest thì khai báo thêm PNG 192×192 và 512×512.

Vì sao favicon không hiển thị?

Nguyên nhân thường gặp là đường dẫn trong href sai, thẻ <link> nằm ngoài <head>, hoặc trình duyệt vẫn hiện biểu tượng cũ trong bộ nhớ đệm. Mở trực tiếp URL của biểu tượng để kiểm tra đường dẫn, rồi tải lại trang sau khi xóa bộ nhớ đệm hoặc thêm phiên bản như ?v=2 vào URL.

Có dùng SVG hoặc PNG làm favicon được không?

Được. Dùng <link rel="icon" href="/icon.svg" type="image/svg+xml"> hoặc <link rel="icon" href="/icon.png" type="image/png">. SVG chạy trên Chrome, Edge và Firefox; hãy giữ thêm một tệp ICO hoặc PNG cho những trình duyệt không hỗ trợ.

Có cần rel="shortcut icon" không?

Không. rel="icon" là giá trị chuẩn. Từ shortcut là phần sót lại từ Internet Explorer cũ và không có tác dụng gì trên các trình duyệt hiện nay.

Có dùng emoji làm favicon được không?

Được, bằng cách bọc emoji trong một SVG: một data URI SVG chứa phần tử <text> với emoji bên trong. Cách này tiện cho bản thử nghiệm, nhưng emoji trông khác nhau trên mỗi hệ điều hành.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu