คู่มือ

ไอคอน Fav สำหรับ React

React จะไม่เรนเดอร์ `<head>` ให้กับคุณ — ไอคอน favicon จะอยู่ใน 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 ซึ่งเป็นเส้นทางที่เบราว์เซอร์ลองใช้เป็น favicon ก่อน ไม่จำเป็นต้องมีตัวโหลด webpack, ปลั๊กอิน Vite หรือการกำหนดค่าบิวด์สำหรับการตั้งค่า .ico พื้นฐาน

เมื่อคุณสร้างโปรเจ็กต์ Vite React ใหม่ด้วย `npm create vite@latest` โครงจะวาง favicon.svg ใน /public และอ้างอิงใน index.html แล้ว นี่เป็นจุดเริ่มต้นที่ดี แต่ค่าเริ่มต้น SVG จะเป็นไอคอน Vite ทั่วไป แทนที่ด้วย SVG ของคุณเอง และเพิ่มทางเลือก .ico หลายขนาดสำหรับเบราว์เซอร์ที่ไม่รองรับ favicons SVG

สร้างโครงแอป React รวม favicon.ico ใน /public โดยค่าเริ่มต้น หากต้องการแทนที่ เพียงเขียนทับไฟล์ด้วย .ico หลายขนาดของคุณเอง CRA ยังรวม manifest.json ใน /public ด้วย — อัปเดตรายการอาร์เรย์ `icons` ให้ชี้ไปที่ไฟล์ PNG ของคุณเอง (192×192 และ 512×512) index.html ใน /public มีแท็กลิงก์รายการซึ่งแทรกโดย CRA แล้ว

.ico หลายขนาดยังคงเป็นไฟล์ที่สำคัญที่สุด เบราว์เซอร์ที่ไม่รองรับ favicons SVG — เวอร์ชัน Safari ที่เก่ากว่า เครื่องมือฝังบางตัว และการสร้างทางลัด Windows — จะถอยกลับไปที่ /favicon.ico โดยอัตโนมัติ ไฟล์ .ico ไฟล์เดียวจะรวมเฟรมขนาด 16×16, 32×32, 48×48 และ 64×64 เข้าด้วยกัน ดังนั้นเบราว์เซอร์จึงเลือกความละเอียดที่เหมาะสมโดยไม่มีแท็กลิงก์เพิ่มเติม

สำหรับจอแสดงผล DPI สูง (Retina) ให้เพิ่มแท็กลิงก์ PNG ที่ชัดเจนนอกเหนือจาก .ico `<link rel='icon' type='image/png' sizes='32x32' href='/favicon-32x32.png'>` บอกให้เบราว์เซอร์ใช้ PNG บนหน้าจอเรตินา โดยที่ไอคอน 2x แสดงผลได้คมชัดกว่าเฟรม .ico ที่มีความละเอียดเท่ากัน วางทั้ง .ico และ PNG ใน /public

ไอคอน Fav ของ SVG นำเสนอโซลูชันที่รองรับอนาคตที่ดีที่สุดสำหรับแอป React ไฟล์ SVG ไฟล์เดียวจะแสดงผลได้อย่างคมชัดในทุกขนาดแท็บ และสามารถปรับสีให้เข้ากับโทนสีของผู้ใช้ได้ เพิ่ม `<link rel='icon' type='image/svg+xml' href='/favicon.svg'>` ใน index.html เบราว์เซอร์ที่รองรับ favicons SVG ชอบมันมากกว่า .ico; เบราว์เซอร์ที่ไม่เพียงแค่ข้ามไปยังแท็กลิงก์ถัดไป

ไอคอน Favic ในโหมดมืด SVG นั้นทรงพลังในแอป React เนื่องจากกลุ่มเป้าหมายมักจะใช้เครื่องมือสำหรับนักพัฒนาและเดสก์ท็อปในโหมดมืด ฝังบล็อก `<style>` ไว้ใน SVG ของคุณด้วย `@media (prefers-color-scheme: dark) { :root { fill: white; } }` (ปรับตามโครงสร้างของไอคอนของคุณ) ไฟล์เดียวนี้ให้บริการทั้งธีมสว่างและธีมมืดโดยไม่มี JavaScript หรือแท็กเพิ่มเติม

ต้องใช้ apple-touch-icon หากผู้ใช้อุปกรณ์เคลื่อนที่จะบันทึกแอป React ของคุณไปที่หน้าจอหลัก วาง apple-touch-icon.png (180×180) ใน /public และเพิ่ม `<link rel='apple-touch-icon' size='180x180' href='/apple-touch-icon.png'>` ลงใน index.html หากไม่มีสิ่งนี้ iOS จะแสดงภาพหน้าจอที่มีความละเอียดต่ำของแอป แทนที่จะเป็นไอคอนแบรนด์ของคุณบนหน้าจอหลัก

สำหรับแอป React ที่ใช้งานเป็น PWAs /public/manifest.json ของคุณ (หรือ site.webmanifest) ต้องมีรายการไอคอนขนาด 192×192 และ 512×512 ขนาดเหล่านี้กระตุ้นให้เกิดข้อความแจ้งให้ติดตั้งหน้าจอหลัก Android และกล่องโต้ตอบการติดตั้ง Chrome PWA favicon generator ส่งออกทั้ง PNG และเทมเพลตรายการข้อมูลที่กรอกไว้ล่วงหน้าซึ่งคุณสามารถวางลงใน /public ได้โดยตรง

การกำหนดเส้นทางมีความสำคัญสำหรับ favicons ในการปรับใช้ React SPA เส้นทาง /favicon.ico จะต้องให้บริการโดยโฮสต์ของคุณโดยตรง ไม่ถูกขัดขวางโดยเราเตอร์ React หน้า Vercel, Netlify และ GitHub ล้วนให้บริการเนื้อหา /public ที่รากก่อนที่จะส่งผ่านไปยัง SPA หากคุณโฮสต์บนเซิร์ฟเวอร์แบบกำหนดเอง ให้ยืนยันว่ามิดเดิลแวร์ไฟล์แบบคงที่ของคุณทำงานก่อนเส้นทางที่รับทั้งหมดซึ่งให้บริการ index.html

ในระหว่างการพัฒนาด้วย `npm run dev` นั้น Vite hot-reload การเปลี่ยนแปลงส่วนใหญ่โดยอัตโนมัติ แต่บางครั้งการเปลี่ยนแปลง favicon จำเป็นต้องมีการรีเฟรชเบราว์เซอร์ด้วยตนเอง เบราว์เซอร์แคช /favicon.ico ต่อต้นทางแม้จะโหลดเซิร์ฟเวอร์ dev ซ้ำก็ตาม หากต้องการบังคับให้รีเฟรชในระหว่างการพัฒนา ให้รีเฟรชอย่างหนัก (Ctrl+Shift+R) หรือเพิ่มสตริงการสืบค้นเช่น `/favicon.svg?v=2` ในแท็กลิงก์ของคุณชั่วคราว

ในการตั้งค่าการเรนเดอร์ฝั่งเซิร์ฟเวอร์ (เช่น React ด้วยเซิร์ฟเวอร์ Express แบบกำหนดเอง) คุณต้องยืนยันว่ามิดเดิลแวร์ express.static() ให้บริการ /public ก่อนตัวจัดการ React SSR หากตัวจัดการ SSR รับคำขอทั้งหมดก่อน /favicon.ico จะถูกเรนเดอร์โดย React และส่งคืน HTML แทนที่จะเป็นไฟล์ไบนารี ICO ซึ่งจะทำให้ favicon เสียหายโดยสิ้นเชิง

การตั้งค่า Monorepo ที่มีแอป React หลายแอปจำเป็นต้องมีการจัดการ favicon อย่างระมัดระวัง โฟลเดอร์ /public ของแต่ละแอปจะมี favicon ของตัวเอง หากคุณแชร์ไอคอนระหว่างแอปต่างๆ ให้พิจารณาเก็บไดเร็กทอรีไอคอนแหล่งที่มาของความจริงรายการเดียวไว้ที่รูท monorepo และคัดลอกไฟล์ลงในแต่ละ /public ในระหว่างขั้นตอนการสร้าง เครื่องมือต่างๆ เช่น `cp` ในสคริปต์บิลด์หรือปลั๊กอินการซิงค์เนื้อหาโดยเฉพาะจะคอยซิงค์เครื่องมือเหล่านั้น

หลังจากการปรับใช้ ให้ใช้ favicon tester เพื่อตรวจสอบว่าตัวแปร favicon ทั้งหมดสามารถเข้าถึงได้แบบสาธารณะ ป้อน URL ที่ใช้งานจริงของคุณและตรวจสอบว่า favicon.ico, favicon.svg, apple-touch-icon.png และไฟล์ Manifest PNG ทั้งหมดแก้ไขได้อย่างถูกต้อง ซึ่งจะตัดการให้บริการไฟล์คงที่หรือเส้นทางที่กำหนดค่าไม่ถูกต้องซึ่งทำงานใน dev แต่ใช้งานจริงไม่ได้

วิธีการทำงาน

  1. 1

    สร้างแพ็คเกจ favicon ของคุณ

    อัปโหลด 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 (หรือ index.html ที่รูทโปรเจ็กต์สำหรับ Vite) แทนที่หรือเพิ่มสิ่งต่อไปนี้ภายใน `<head>`: ลิงก์ .ico, ลิงก์ SVG, ลิงก์ apple-touch-icon และลิงก์รายการ คัดลอกส่วนย่อย HTML ที่สร้างขึ้นจากแพ็คเกจ favicon README

  4. 4

    อัปเดตรายการไอคอน manifest.json

    สำหรับ CRA ให้เปิด /public/manifest.json และอัปเดตอาร์เรย์ `icons` เพื่ออ้างอิง 192×192 และ 512×512 PNG ใหม่ของคุณ สำหรับ Vite ให้เปลี่ยนชื่อ site.webmanifest ที่สร้างขึ้นเป็น manifest.json หรือคงชื่อไฟล์เดิมไว้และตรวจดูให้แน่ใจว่าแท็กลิงก์ชี้ไปที่ไฟล์นั้น

  5. 5

    ทดสอบในการพัฒนาและการผลิต

    รีเฟรชเบราว์เซอร์อย่างหนักในระหว่างการพัฒนาเพื่อหลีกเลี่ยงแคช favicon หลังจากปรับใช้แล้ว ให้ใช้ [favicon tester](utility:favicon-tester) เพื่อยืนยันว่าเส้นทางไอคอนทั้งหมดได้รับการแก้ไขอย่างถูกต้อง บน iOS ให้ใช้ "เพิ่มไปยังหน้าจอหลัก" เพื่อตรวจสอบ apple-touch-icon

ลองเลย

สร้าง favicon ที่พร้อมใช้งาน React

เครื่องมือสร้าง Favicon

คำถามที่พบบ่อย

favicon ไปอยู่ที่ไหนในแอป Vite React+

ในไดเรกทอรี /public: /public/favicon.ico, /public/favicon.svg, /public/apple-touch-icon.png ทุกอย่างใน /public ให้บริการที่ URL รูทโดยไม่มีการประมวลผลบิลด์ใดๆ

ฉันจะแทนที่ Vite favicon เริ่มต้นได้อย่างไร+

แทนที่ /public/favicon.svg และ /public/favicon.ico ด้วยไฟล์ของคุณเอง อัปเดตแท็ก `<link>` ใน index.html ด้วย หาก hrefs แตกต่างกัน รีสตาร์ทเซิร์ฟเวอร์ dev และรีเฟรชแท็บเบราว์เซอร์เพื่อดูการเปลี่ยนแปลง

ฉันจะเพิ่ม favicon ในโหมดมืดใน React ได้อย่างไร+

ใช้ไอคอนประจำเว็บไซต์ SVG พร้อมด้วยบล็อกสไตล์ `@media (prefers-color-scheme: dark)` ที่ฝังไว้ ซึ่งจะเปลี่ยนสีเติมหรือสีขีดของเส้นทางไอคอนของคุณ เชื่อมโยงกับ `<link rel='icon' type='image/svg+xml' href='/favicon.svg'>` ใน index.html ไม่จำเป็นต้องมี JavaScript

เหตุใด React favicon ของฉันจึงไม่อัปเดตในเบราว์เซอร์+

เบราว์เซอร์แคช /favicon.ico ต่อต้นทาง แม้ว่าจะโหลดซ้ำแบบ hot-module ก็ตาม ฮาร์ดรีเฟรชแท็บ (Ctrl+Shift+R / Cmd+Shift+R) หรือเพิ่มสตริงการสืบค้นเวอร์ชันต่อท้าย href ในแท็กลิงก์ของคุณชั่วคราวเพื่อบังคับให้ดึงข้อมูลใหม่

ฉันจำเป็นต้องกำหนดค่า Vite หรือ webpack เพื่อให้บริการ favicon หรือไม่?+

ไม่ ทั้ง Vite และ CRA จะให้บริการโฟลเดอร์ /public ที่ URL รากโดยอัตโนมัติ ไม่จำเป็นต้องมีการกำหนดค่าบันเดิลสำหรับไฟล์ favicon ตราบใดที่ไฟล์เหล่านั้นอยู่ใน /public

manifest.json ในโครงการ CRA คืออะไรและส่งผลต่อ favicon หรือไม่+

เป็นรายการแอปพลิเคชันเว็บที่เปิดใช้งานพร้อมท์การติดตั้ง PWA รวมถึงรายการไอคอนที่ชี้ไปที่ PNG ใน /public อัปเดตรายการ 192×192 และ 512×512 เพื่อใช้ไอคอนของคุณเองเพื่อการแสดงผลที่ถูกต้องระหว่างการติดตั้งหน้าจอหลัก Android

ฉันสามารถใช้ favicon ในองค์ประกอบ React แทนที่จะเป็น index.html ได้หรือไม่+

ใช่ การใช้ไลบรารีเช่น react-helmet หรือส่วนประกอบ Head ในตัวของ Next.js สำหรับ Vite React ให้แทรกแท็กลิงก์ลงใน index.html โดยตรง ซึ่งเป็นวิธีที่ง่ายและน่าเชื่อถือที่สุดเนื่องจากไฟล์ได้รับการประมวลผลในขณะสร้าง

เครื่องมือที่เกี่ยวข้อง

คู่มือเพิ่มเติม

คู่มือ

สำรวจ FetchFavicon

หมวดหมู่

ตัวแปลง

สาธารณูปโภค

คำแนะนำ

บทช่วยสอน