Skip to main content

Hướng dẫn favicon cho SaaS: Trọn bộ cấu hình React & Next.js 2025

Từ thiết kế đến triển khai favicon cho ứng dụng SaaS. Bao gồm ví dụ code cho React và Next.js, phù hợp với sản phẩm tập trung vào hình ảnh.

2025-04-12
Hướng dẫn favicon cho SaaS: Trọn bộ cấu hình React & Next.js 2025

Hướng dẫn favicon cho SaaS: Trọn bộ cấu hình React & Next.js

Favicon là biểu tượng nhỏ xuất hiện ở tab trình duyệt, bookmark, shortcut hoặc màn hình chính mobile. Với sản phẩm SaaS, một favicon chỉn chu giúp tăng nhận diện và sự chuyên nghiệp. Bài viết này sẽ hướng dẫn từ khâu tạo favicon đến triển khai thực tế.

Favicon là gì và tại sao quan trọng?

Khái niệm và tác dụng

Favicon (viết tắt của “favorite icon”) đại diện trực quan cho website và sẽ hiển thị ở:

  • Tab trình duyệt
  • Danh sách bookmark
  • Lịch sử truy cập
  • Shortcut desktop/mobile

Tác động với SaaS

Branding

  • Người dùng dễ nhận ra app giữa nhiều tab
  • Giữ tính thống nhất xuyên suốt điểm chạm
  • Hình ảnh chuyên nghiệp tạo niềm tin

Trải nghiệm

  • Điều hướng dễ hơn khi mở nhiều tab
  • Bookmark rõ ràng, dễ nhớ
  • Thêm vào home screen trông như native app

Kỹ thuật

  • Tránh lỗi 404 khi trình duyệt tìm favicon.ico
  • Cải thiện cảm nhận tốc độ tải
  • Tăng hỗ trợ cho PWA

Thông số & yêu cầu

Kích thước chuẩn

ICO (tương thích cũ)

  • 16×16: tab tối thiểu
  • 32×32: desktop browser
  • 48×48: taskbar/shortcut Windows
  • File: favicon.ico (chứa nhiều kích thước)

PNG (chuẩn hiện đại)

  • 16×16, 32×32, 96×96, 180×180, 192×192, 512×512
  • Dùng cho tab, shortcut, Apple/Android icon

SVG

  • Vector, sắc nét ở mọi size
  • Nhẹ hơn PNG, nhưng IE không hỗ trợ

Yêu cầu nền tảng

iOS (Apple Touch Icon)

<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">

Android (Web App Manifest)

{
  "icons": [
    { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

Windows (browserconfig.xml)

<browserconfig>
  <msapplication>
    <tile>
      <square150x150logo src="/mstile-150x150.png"/>
      <TileColor>#da532c</TileColor>
    </tile>
  </msapplication>
</browserconfig>

Tạo favicon như thế nào?

Nguyên tắc thiết kế

Đơn giản

  • Nhận diện được ở kích thước 16px
  • Hình khối rõ, không chi tiết thừa
  • Tránh chữ nhỏ

Màu sắc

  • Dùng màu chủ đạo của brand
  • Đảm bảo tương phản trên nền sáng/tối
  • Test ở nhiều theme trình duyệt

Hình dạng

  • Canvas vuông, mobile sẽ auto bo góc
  • Tránh đường quá mảnh
  • Ưu tiên màu flat

Công cụ thiết kế

Chuyên nghiệp

  • Adobe Illustrator, Sketch, Figma, Photoshop

Miễn phí

  • GIMP, Canva, Inkscape, Figma free

Generator online

  • RealFaviconGenerator, Favicon.io, Canva Favicon Maker, Logomaker

Quy trình

  1. Thiết kế icon gốc
Canvas: 512×512 px
Định dạng: PNG hoặc SVG
Màu: RGB, nền trong suốt
  1. Test đa kích cỡ (16px, 32px…)

  2. Xuất nhiều định dạng

  • PNG cho từng size
  • ICO cho browser cũ
  • SVG cho browser mới
  1. Tối ưu dung lượng
  • Dùng tool nén, xoá metadata
  • Mục tiêu: dưới 5KB/file nếu có thể

Triển khai trong React

Cấu trúc file

/public/
├── favicon.ico
├── favicon-16x16.png
├── favicon-32x32.png
├── apple-touch-icon.png
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── mstile-150x150.png
├── favicon.svg
├── site.webmanifest
└── browserconfig.xml

Thêm vào public/index.html

<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="icon" type="image/png" sizes="32x32" href="%PUBLIC_URL%/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="%PUBLIC_URL%/favicon-16x16.png" />
<link rel="apple-touch-icon" sizes="180x180" href="%PUBLIC_URL%/apple-touch-icon.png" />
<link rel="manifest" href="%PUBLIC_URL%/site.webmanifest" />
<meta name="msapplication-TileColor" content="#da532c" />
<meta name="msapplication-config" content="%PUBLIC_URL%/browserconfig.xml" />
<meta name="theme-color" content="#ffffff" />

React Helmet

import { Helmet } from 'react-helmet';

function App() {
  return (
    <>
      <Helmet>
        <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
        <link rel="alternate icon" href="/favicon.ico" />
        <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
        <meta name="theme-color" content="#0A0A0A" />
      </Helmet>
      {/* ... */}
    </>
  );
}

Triển khai trong Next.js

App Router (Next 13+)

export const metadata = {
  icons: {
    icon: [
      { url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" },
      { url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" },
      { url: "/favicon.ico" },
    ],
    shortcut: ["/favicon.ico"],
    apple: [{ url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png" }],
    other: [{ rel: "mask-icon", url: "/safari-pinned-tab.svg", color: "#0A0A0A" }],
  },
  themeColor: "#ffffff",
  manifest: "/site.webmanifest",
};

Pages Router

import Document, { Html, Head, Main, NextScript } from "next/document";

export default class MyDocument extends Document {
  render() {
    return (
      <Html lang="vi">
        <Head>
          <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
          <link rel="alternate icon" href="/favicon.ico" />
          <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
          <link rel="manifest" href="/site.webmanifest" />
          <meta name="msapplication-TileColor" content="#0A0A0A" />
          <meta name="theme-color" content="#ffffff" />
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

Manifest & browserconfig

site.webmanifest

{
  "name": "Your SaaS App",
  "short_name": "SaaS",
  "icons": [
    { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }
  ],
  "theme_color": "#ffffff",
  "background_color": "#ffffff",
  "display": "standalone"
}

browserconfig.xml

<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
  <msapplication>
    <tile>
      <square70x70logo src="/mstile-70x70.png"/>
      <square150x150logo src="/mstile-150x150.png"/>
      <TileColor>#0A0A0A</TileColor>
    </tile>
  </msapplication>
</browserconfig>

FAQ & troubleshooting

| Vấn đề | Nguyên nhân | Cách xử lý | | --- | --- | --- | | Trình duyệt không thấy favicon | Sai đường dẫn hoặc thiếu favicon.ico | Đảm bảo file nằm trong /public và clear cache | | Icon iOS bị mờ | Thiếu Apple Touch Icon 180×180 | Xuất PNG chất lượng cao, không nén quá mạnh | | Dark mode khó nhìn | Màu icon trùng nền | Tăng tương phản hoặc thêm outline | | PWA không có icon | Manifest thiếu 192/512 px | Bổ sung vào manifest và deploy lại |

Tự động hoá

  1. Dùng AImageTools Favicon Generator upload logo
  2. Tải về bộ file PNG/SVG/ICO + manifest
  3. Thả file vào /public/
  4. Thêm script kiểm tra file trong CI/CD
  5. Sau deploy nhớ xoá cache, test trên nhiều thiết bị

Kết luận

Favicon tuy nhỏ nhưng là điểm chạm đầu tiên của thương hiệu. Thiết kế đúng chuẩn, cung cấp đầy đủ kích thước và triển khai bài bản trong React/Next.js sẽ đảm bảo app của bạn trông chuyên nghiệp ở mọi nơi – từ tab trình duyệt, bookmark, mobile cho tới PWA. Hãy cấu hình bộ favicon hoàn chỉnh ngay hôm nay để nâng cấp diện mạo SaaS của bạn!

Bài viết liên quan

Ready to Try?

Experience it yourself with our tool below

Sinh favicon miễn phí