favicon을 교체한 뒤에도 Docusaurus의 기본 아이콘이 계속 표시된다면, 파일이 잘못된 폴더에 있거나 설정이 해당 파일을 가리키지 않을 수 있습니다. favicon을 static/에 놓고 설정 값 하나만 지정한 다음 빌드 결과를 확인하면 됩니다.

사전 준비

다음이 필요합니다.

Docusaurus favicon 추가하기: 5단계

  1. 적합한 파일을 생성합니다. 정사각형 PNG 또는 SVG를 ICO로 변환하는 데 Mzu favicondl을 사용한 다음 SVG 또는 PNG를 다운로드하세요. 원본 artwork는 단순하게 유지하세요. 전체 wordmark는 탭에서 읽기 어려워집니다.
  2. static/ 디렉터리를 사용합니다. Docusaurus는 내부 경로를 변경하지 않고 static/ 디렉터리를 빌드 출력으로 복사합니다. 기본 아이콘을 교체하거나, 다음과 같이 파일을 배치하세요.
    static/
    └── img/
        ├── favicon.ico
        ├── favicon.svg
        └── favicon-32.png
  3. Docusaurus 내장 설정 옵션을 지정합니다. docusaurus.config.ts의 기존 객체에 다음 구문을 유지하거나 추가하세요.
    const config: Config = {
      // ...other options
      favicon: 'img/favicon.ico',
    };

    static/ 기준의 상대 경로를 사용하고, 맨 앞에 slash를 붙이지 마세요. 내장 옵션이 아이콘 링크를 추가하고 baseUrl을 적용하므로 도메인 루트나 하위 경로 모두에서 설정이 작동합니다.

  4. 크기에 따라 확대되는 아이콘이 필요하면 SVG를 추가합니다. ICO fallback을 그대로 유지하면서 동일한 config 객체에 다음 속성을 추가하세요.
    headTags: [
      {
        tagName: 'link',
        attributes: {
          rel: 'icon',
          type: 'image/svg+xml',
          href: '/img/favicon.svg',
        },
      },
    ],

    이 태그는 HTML의 rel='icon' link relationship를 따릅니다. headTags는 literal로 처리되므로 base path를 포함해야 합니다. baseUrl: '/docs/'인 경우 /docs/img/favicon.svg를 사용하세요.

  5. 빌드하고 실제 output을 확인합니다. 다음 명령을 실행하세요.
    npm run build
    npm run serve

    렌더링된 <head>를 확인하세요. 다음과 같은 icon link가 포함되어야 합니다.

    <link rel='icon' href='/img/favicon.ico'>

    build/img/favicon.ico가 존재하는지 확인하고, Network panel이 HTML이 아닌 image을 반환하는지 확인하세요. baseUrl을 사용하는 경우 prefix가 적용된 URL도 확인하세요. 전체 build/ 디렉터리를 배포하세요.

흔히 빠지기 쉬운 함정

결론

Docusaurus favicon에는 page-level component나 plugin이 필요하지 않습니다. 적절한 파일을 생성해 static/img/에 보관하고, favicon이 ICO 파일을 가리키도록 설정하세요. 배포할 때마다 또는 base-path를 변경할 때마다 빌드 결과의 head를 확인하세요.