가이드

React용 파비콘

React는 '<head>'를 렌더링하지 않습니다. 파비콘은 정적 index.html에 있습니다. favicon.ico를 /public 폴더에 넣고 index.html에 연결하면 기본 작업이 완료됩니다. 최신 설정에는 다크 모드를 지원하는 SVG 변형, 180×180 apple-touch-icon 및 PWA 설치 프롬프트용 웹 매니페스트도 포함됩니다. favicon generator는 단일 소스 이미지에서 필요한 모든 파일을 생성합니다. 전체 링크 태그 참조는 how-to-add-favicon-html guide도 참조하세요.

Vite 및 Create React App(CRA) 모두에서 /public 디렉터리에 있는 정적 파일은 번들러 처리 없이 루트 URL에서 직접 제공됩니다. 즉, /public/favicon.ico는 https://yourdomain.com/favicon.ico에서 액세스할 수 있으며, 이는 브라우저가 파비콘을 위해 먼저 시도하는 경로와 정확히 같습니다. 기본 .ico 설정에는 웹팩 로더, Vite 플러그인 또는 빌드 구성이 필요하지 않습니다.

`npm create vite@latest`를 사용하여 새 Vite React 프로젝트를 생성하면 스캐폴드는 이미 /public에 favicon.svg를 배치하고 이를 index.html에서 참조합니다. 이는 좋은 출발점이지만 기본 SVG는 일반적인 Vite 아이콘입니다. 이를 자신의 SVG로 교체하고 SVG 파비콘을 지원하지 않는 브라우저를 위한 다중 크기 .ico 폴백을 추가하세요.

React 앱 스캐폴드 만들기에는 기본적으로 /public에 favicon.ico가 포함됩니다. 이를 대체하려면 파일을 여러 크기의 .ico로 덮어쓰면 됩니다. CRA에는 /public에 Manifest.json도 포함되어 있습니다. 자신의 PNG 파일(192×192 및 512×512)을 가리키도록 `icons` 배열 항목을 업데이트하세요. /public의 index.html에는 이미 CRA가 삽입한 매니페스트 링크 태그가 있습니다.

여러 크기의 .ico는 여전히 가장 중요한 파일입니다. SVG 파비콘(이전 Safari 버전, 일부 삽입 도구 및 Windows 바로가기 생성)을 지원하지 않는 브라우저는 자동으로 /favicon.ico로 대체됩니다. 단일 .ico 파일은 16×16, 32×32, 48×48 및 64×64 프레임을 묶음으로 하여 브라우저가 추가 링크 태그 없이 올바른 해상도를 선택합니다.

높은 DPI(Retina) 디스플레이의 경우 .ico 외에 명시적인 PNG 링크 태그를 추가하세요. '<link rel='icon' type='image/png' sizes='32x32' href='/favicon-32x32.png'>'는 2x 아이콘이 동일한 해상도의 .ico 프레임보다 더 선명하게 렌더링되는 레티나 화면에서 PNG를 사용하도록 브라우저에 지시합니다. .ico와 PNG를 모두 /public에 배치합니다.

SVG 파비콘은 React 앱을 위한 최고의 미래 보장형 솔루션을 제공합니다. 단일 SVG 파일은 모든 탭 크기에서 선명하게 렌더링되며 해당 색상을 사용자의 색 구성표에 맞게 조정할 수 있습니다. index.html에 `<link rel='icon' type='image/svg+xml' href='/favicon.svg'>`를 추가하세요. SVG 파비콘을 지원하는 브라우저는 .ico보다 이를 선호합니다. 단순히 다음 링크 태그로 건너뛰지 않는 브라우저.

다크 모드 SVG 파비콘은 대상 고객이 개발자 도구와 다크 모드 데스크탑을 사용하는 경우가 많기 때문에 React 앱에서 강력합니다. `@media (prefers-color-scheme: dark) { :root { fill: white; } }`를 사용하여 SVG 내부에 `<style>` 블록을 삽입하세요(아이콘 구조에 맞게 조정됨). 이 단일 파일은 JavaScript 또는 추가 태그 없이 밝은 테마와 어두운 테마를 모두 제공합니다.

모바일 사용자가 React 앱을 홈 화면에 저장하려면 apple-touch-icon가 필요합니다. /public에 apple-touch-icon.png(180×180)를 배치하고 index.html에 `<link rel='apple-touch-icon' size='180x180' href='/apple-touch-icon.png'>`를 추가합니다. 이것이 없으면 iOS는 홈 화면에 브랜드 아이콘 대신 앱의 저해상도 스크린샷을 표시합니다.

PWA로 배포된 React 앱의 경우 /public/manifest.json(또는 site.webmanifest)에 192×192 및 512×512의 아이콘 항목이 포함되어야 합니다. 이러한 크기는 Android 홈 화면 설치 프롬프트와 Chrome PWA 설치 대화 상자를 구동합니다. favicon generator는 PNG와 /public에 직접 넣을 수 있는 미리 채워진 매니페스트 템플릿을 모두 출력합니다.

React SPA 배포에서 파비콘의 라우팅은 중요합니다. /favicon.ico 경로는 React 라우터가 가로채지 않고 호스트에서 직접 제공해야 합니다. Vercel, Netlify 및 GitHub 페이지는 모두 SPA를 통과하기 전에 루트에서 /public 콘텐츠를 제공합니다. 사용자 정의 서버에서 호스팅하는 경우 index.html를 제공하는 포괄 경로 이전에 정적 파일 미들웨어가 실행되는지 확인하세요.

`npm run dev`로 개발하는 동안 Vite는 대부분의 변경 사항을 자동으로 핫 리로드하지만 파비콘 변경에는 때때로 수동 브라우저 강제 새로 고침이 필요합니다. 브라우저는 개발 서버를 다시 로드하는 동안에도 원본별로 /favicon.ico를 캐시합니다. 개발 중에 강제로 새로 고치려면 강제로 새로 고치거나(Ctrl+Shift+R) 임시로 링크 태그에 `/favicon.svg?v=2`와 같은 쿼리 문자열을 추가하세요.

서버 측 렌더링 설정(예: 사용자 정의 Express 서버가 있는 React)에서는 React SSR 핸들러보다 먼저 express.static() 미들웨어가 /public를 제공하는지 확인해야 합니다. SSR 핸들러가 모든 요청을 먼저 포착하면 /favicon.ico는 React에 의해 렌더링되고 바이너리 ICO 파일 대신 HTML를 반환하여 파비콘을 완전히 중단합니다.

여러 React 앱이 포함된 Monorepo 설정에는 신중한 파비콘 관리가 필요합니다. 각 앱의 /public 폴더에는 자체 파비콘이 있습니다. 앱 간에 아이콘을 공유하는 경우 모노레포 루트에 단일 진실 아이콘 디렉터리를 유지하고 빌드 단계에서 각 /public에 파일을 복사하는 것을 고려하세요. 빌드 스크립트의 `cp`와 같은 도구 또는 전용 자산 동기화 플러그인을 사용하여 동기화를 유지합니다.

배포 후 favicon tester를 사용하여 모든 파비콘 변형이 공개적으로 액세스 가능한지 확인하세요. 프로덕션 URL을 입력하고 favicon.ico, favicon.svg, apple-touch-icon.png 및 매니페스트 PNG가 모두 올바르게 확인되는지 확인하세요. 이는 잘못 구성된 정적 파일 제공 또는 개발에서는 작동하지만 프로덕션에서는 중단되는 경로를 배제합니다.

작동 방식

  1. 1

    파비콘 패키지 생성

    512×512 PNG 또는 SVG를 [favicon generator](tool:favicon-generator)에 업로드합니다. favicon.ico, favicon.svg, apple-touch-icon.png, android-chrome-192x192.png, android-chrome-512x512.png 및 site.webmanifest가 포함된 패키지를 다운로드합니다.

  2. 2

    모든 파일을 /public에 복사합니다.

    패키지의 모든 파일을 프로젝트의 /public 디렉터리에 넣습니다. 이렇게 하면 Vite와 CRA가 루트 URL(예: https://yourdomain.com/favicon.ico)에서 서비스를 제공할 수 있습니다.

  3. 3

    index.html의 링크 태그 업데이트

    /public/index.html(또는 Vite의 경우 프로젝트 루트에서 index.html)를 엽니다. `<head>` 내에서 .ico 링크, SVG 링크, apple-touch-icon 링크 및 매니페스트 링크를 바꾸거나 추가합니다. 파비콘 패키지 README에서 생성된 HTML 스니펫을 복사합니다.

  4. 4

    Manifest.json 아이콘 항목 업데이트

    CRA의 경우 /public/manifest.json을 열고 새로운 192×192 및 512×512 PNG를 참조하도록 `icons` 배열을 업데이트합니다. Vite의 경우 생성된 site.webmanifest의 이름을 매니페스트.json으로 바꾸거나 원래 파일 이름을 유지하고 링크 태그가 이를 가리키는지 확인하세요.

  5. 5

    개발 및 생산 테스트

    파비콘 캐시를 우회하려면 개발 중에 브라우저를 새로 고치세요. 배포 후 [favicon tester](utility:favicon-tester)를 사용하여 모든 아이콘 경로가 올바르게 확인되었는지 확인합니다. iOS에서는 '홈 화면에 추가'를 사용하여 apple-touch-icon를 확인하세요.

지금 사용해 보기

React 지원 파비콘 구축

파비콘 생성기

자주 묻는 질문

Vite React 앱에서 파비콘은 어디에 있나요?+

/public 디렉토리: /public/favicon.ico, /public/favicon.svg, /public/apple-touch-icon.png. /public의 모든 것은 빌드 처리 없이 루트 URL에서 제공됩니다.

기본 Vite 파비콘을 어떻게 바꾸나요?+

/public/favicon.svg 및 /public/favicon.ico를 자신의 파일로 바꾸십시오. 또한 href가 다른 경우 index.html의 `<link>` 태그를 업데이트하세요. 개발 서버를 다시 시작하고 브라우저 탭을 새로 고쳐 변경 사항을 확인하세요.

React에 다크 모드 파비콘을 어떻게 추가하나요?+

아이콘 경로의 채우기 또는 획 색상을 변경하는 `@media (prefers-color-scheme: dark)` 스타일 블록이 내장된 SVG 파비콘을 사용하세요. index.html의 `<link rel='icon' type='image/svg+xml' href='/favicon.svg'>`와 연결하세요. JavaScript는 필요하지 않습니다.

내 React 파비콘이 브라우저에서 업데이트되지 않는 이유는 무엇입니까?+

브라우저는 핫 모듈을 다시 로드하는 경우에도 원본별로 /favicon.ico를 캐시합니다. 탭을 강제로 새로 고치거나(Ctrl+Shift+R / Cmd+Shift+R) 링크 태그의 href에 임시로 버전 쿼리 문자열을 추가하여 새로 가져옵니다.

파비콘을 제공하려면 Vite 또는 웹팩을 구성해야 합니까?+

아니요. Vite와 CRA는 모두 루트 URL의 /public 폴더를 자동으로 제공합니다. /public에 있는 한 파비콘 파일에는 번들러 구성이 필요하지 않습니다.

CRA 프로젝트의 Manifest.json은 무엇이며 파비콘에 영향을 줍니까?+

PWA 설치 프롬프트를 활성화하는 웹 앱 매니페스트입니다. 여기에는 /public의 PNG를 가리키는 아이콘 항목이 포함됩니다. Android 홈 화면 설치 중에 올바른 표시를 위해 자신의 아이콘을 사용하려면 192×192 및 512×512 항목을 업데이트하십시오.

index.html 대신 React 구성 요소에서 파비콘을 사용할 수 있나요?+

예, 반응 헬멧 또는 Next.js의 내장 헤드 구성 요소와 같은 라이브러리를 사용합니다. Vite React의 경우 링크 태그를 index.html에 직접 삽입하세요. 이는 파일이 빌드 시 처리되기 때문에 가장 간단하고 안정적인 접근 방식입니다.

관련 도구

더 많은 가이드

가이드

FetchFavicon 탐색

카테고리

변환기

유용

가이드

튜토리얼