featured image ใน WordPress ควรมีขนาดเท่าไหร่?
ตัวเลขที่คนส่วนใหญ่อยากได้คือ 1200 x 630 พิกเซล — อัตราส่วน 1.91:1 ที่ Facebook, LinkedIn และ X ใช้แสดงตัวอย่างลิงก์ แต่นั่นไม่ใช่ขนาดที่ธีมของคุณ
เผยแพร่แล้ว
ตัวเลขที่คนส่วนใหญ่อยากได้คือ 1200 x 630 พิกเซล นั่นคืออัตราส่วนที่ Facebook, LinkedIn และ X ใช้แสดงตัวอย่างลิงก์ (1.91:1) และเป็นขนาดที่ภาพ Open Graph ควรจะเป็น ถ้าคุณตั้ง featured image เพื่อให้ลิงก์ที่แชร์ออกไปแสดงผลถูกต้องเป็นหลัก ก็ใช้ 1200 x 630 แล้วจบแค่นั้นได้เลย
แต่ตัวเลขนั้นไม่ใช่ขนาดที่ธีมของคุณแสดงจริงบนโพสต์ WordPress แทบไม่เคยแสดง featured image ที่ขนาดต้นฉบับ ธีมจะเรียกขนาดรูปที่ลงทะเบียนไว้ขนาดหนึ่ง แล้ว WordPress ก็ส่งภาพที่ครอปไว้ล่วงหน้าซึ่งตรงกับขนาดนั้นออกมา นี่คือเหตุผลว่าทำไมรูปที่ดูสมบูรณ์แบบบน Facebook ถึงดูไม่คม ยืด หรือครอปผิดตำแหน่งเมื่ออยู่ในเทมเพลตหน้าโพสต์เดี่ยว ขนาดที่ “ถูกต้อง” ขึ้นอยู่กับธีม ไม่ใช่กฎสากลตายตัว
ทำไมธีมถึงเขียนทับตัวเลขนั้น
เวลาคุณอัพโหลดรูป WordPress ไม่ได้เก็บไฟล์เดียว มันจะรัน wp_generate_attachment_metadata() และสร้างไฟล์แยกสำหรับทุกขนาดรูปที่ลงทะเบียนไว้ ได้แก่ ค่าเริ่มต้นสามขนาด (thumbnail, medium, large), ขนาด medium_large ของ block editor (กว้าง 768px) รวมถึงทุกขนาดที่ธีมหรือปลั๊กอิน wordpress ลงทะเบียนไว้ด้วย add_image_size()
ธีมที่ต้องการ hero แบบกว้างอัตราส่วน 16:9 มักจะเขียนแบบนี้ใน functions.php:
add_theme_support( 'post-thumbnails' );
add_image_size( 'hero-featured', 1200, 675, true );
อาร์กิวเมนต์ตัวที่สี่ true หมายถึง hard crop WordPress จะครอปรูปของคุณให้ได้ขนาด 1200 x 675 พอดี โดยตัดส่วนที่ไม่พอดีกับกรอบ 16:9 ทิ้งไป ถ้าตัวแบบอยู่ใกล้ขอบบนหรือขอบล่างของเฟรม มันจะถูกตัดออก ถ้าตั้งเป็น false (หรือละไว้) มันจะย่อตามสัดส่วน และขนาดสุดท้ายอาจต่างจากที่คุณกำหนดไว้
จากนั้นเทมเพลตจะเป็นตัวตัดสินว่าจะดึงขนาดไหนมาใช้:
the_post_thumbnail( 'hero-featured' );
ชื่อที่ส่งเข้าไปใน the_post_thumbnail() คือขนาดครอปที่จะแสดงผล ดังนั้นขนาด featured image จริงบนเว็บของคุณจึงถูกกำหนดไว้สองที่ที่คุณไม่ได้เขียนเอง คือการเรียก add_image_size() และการเรียก the_post_thumbnail() ในธีม การอัพโหลดไฟล์ที่ใหญ่ขึ้นไม่ได้ไปเปลี่ยนอะไรทั้งสองอย่างนี้
ยังมีอีกชั้นหนึ่ง WordPress ส่ง srcset ออกมา ดังนั้นบนหน้าจอที่เล็กกว่า เบราว์เซอร์อาจโหลดไฟล์ medium หรือ large แทนภาพครอปเต็ม ขนาดที่คุณเห็นใน DevTools จึงมักไม่ใช่ขนาดที่คุณอัพโหลดขึ้นไป
วิธีแก้ ทำตามลำดับ
1. หาให้เจอว่าธีมของคุณเรียกขนาดไหนจริง ๆ ก่อนจะเดา ให้ดูทุกขนาดที่ WordPress สร้างจากรูปของคุณ และดูว่าตัวไหนคือ hero ที่ถูกครอป ลองวางรูปของคุณลงใน เครื่องมือดูขนาดรูป WordPress — มันจะแสดงทุกไฟล์ที่ WP จะสร้างขึ้น พร้อมขนาดพิกเซลที่แน่นอน คุณจะได้จับคู่ต้นฉบับกับเป้าหมายจริง แทนที่จะยึดกับ 1200x630 ที่เป็นแค่ตำนาน
2. อัพโหลดให้ใหญ่พอที่จะครอบคลุมขนาดครอปที่ใหญ่ที่สุด ถ้า hero ของธีมคือ 1200 x 675 ให้อัพโหลดอย่างน้อยเท่านั้น และถ้าเป็นไปได้ให้ 2 เท่าเผื่อจอ retina (2400 x 1350) WordPress ย่อภาพได้เนียน แต่มันไม่เคยขยายภาพให้ใหญ่ขึ้น ต้นฉบับที่เล็กเกินไปคือสาเหตุที่พบบ่อยที่สุดของ featured image ที่เบลอ
3. จับอัตราส่วนภาพของคุณให้ตรงกับครอปของธีม ถ้าธีม hard-crop เป็น 16:9 ก็ป้อนภาพ 16:9 ให้มัน จัดองค์ประกอบให้ตัวแบบอยู่ตรงกลาง เพื่อไม่ให้ hard crop ตัดหัวใครขาด
4. ถ้าขนาดที่ลงทะเบียนไว้ผิด ให้แก้แล้ว regenerate แก้ค่าใน add_image_size() ที่ child theme แล้วสร้าง thumbnail เดิมขึ้นใหม่ — ขนาดใหม่จะมีผลกับรูปที่อัพโหลดในอนาคตเท่านั้น จนกว่าคุณจะรัน:
wp media regenerate --yes
ไม่มี WP-CLI? ปลั๊กอิน wordpress อย่าง Regenerate Thumbnails ทำหน้าที่เดียวกันได้จากหน้าแดชบอร์ด
สิ่งที่ไม่ควรทำ
อย่าเพียงแค่อัพโหลดรูป 1200x630 แล้วคิดว่าจัดการเรียบร้อยแล้ว ถ้าขนาดที่ธีมลงทะเบียนไว้คือ 16:9 WordPress จะ hard-crop ภาพ 1.91:1 ของคุณ แล้วคุณก็จะเสียส่วนบนและส่วนล่างไป ตัวเลขของ Open Graph กับตัวเลขที่แสดงผลเป็นคนละหน้าที่กัน
อย่าปิดการทำงานของขนาดรูป WordPress เพื่อ “เก็บต้นฉบับไว้” หลายคนไปเจอคำแนะนำให้ตั้งขนาดกลาง ๆ เป็น 0 หรือถอด the_post_thumbnail ออก แล้วธีมก็จะย้อนไปส่งไฟล์ขนาดเต็มมาย่อในเบราว์เซอร์แทน — JPEG 4000px ที่ถูกส่งไปยังมือถือ นั่นทำให้เวลาโหลดและ Core Web Vitals ของคุณพังยับ ไฟล์แยกพวกนั้นมีอยู่ด้วยเหตุผลของมัน
อย่าเชื่อ “ขนาดที่แนะนำ” ของปลั๊กอินมากกว่าขนาดที่ธีมลงทะเบียนไว้จริง ปลั๊กอิน SEO แนะนำ 1200x630 สำหรับ OG tag ซึ่งถูกต้องสำหรับ tag นั้น แต่มันไม่ได้บอกอะไรเลยเกี่ยวกับสิ่งที่เทมเพลตหน้าโพสต์เดี่ยวของคุณครอป
อย่าข้าม wp media regenerate หลังจากเปลี่ยนขนาด การแก้ add_image_size() ไม่มีผลอะไรกับรูปที่อัพโหลดไปแล้ว นี่คือขั้นตอนที่คนมักลืม แล้วก็สรุปเอาว่าโค้ดไม่ทำงาน
ยังติดอยู่?
ถ้ารูปยังผิดอยู่หลังจากจับขนาดให้ตรงและ regenerate แล้ว ปัญหามักอยู่ที่โหมดการครอป (true เทียบกับ false) หรือ srcset ที่ส่งไฟล์เล็กกว่าที่คุณคาดไว้ ลองวางไฟล์ลงใน เครื่องมือดูขนาดรูป เพื่อดูว่าการตั้งค่าของคุณสร้างครอปแบบไหนออกมาบ้าง แล้วเทียบกับสิ่งที่เบราว์เซอร์กำลังโหลดใน DevTools จับสองอย่างนี้ให้ตรงกัน แล้วการเดาสุ่มก็จะจบลง
FAQ
คำถาม
ทำไม featured image ใน WordPress ถึงเบลอ?
เกือบทุกครั้งเป็นเพราะไฟล์ต้นทางเล็กเกินไปสำหรับขนาดครอปที่ธีมเรียกใช้ ให้อัพโหลดอย่างน้อยเท่ากับขนาดที่ธีมต้องการ และถ้าเป็นไปได้ให้ใช้ 2 เท่าสำหรับจอ retina เช่น 2400 x 1350 สำหรับ hero ขนาด 1200 x 675 WordPress ย่อขนาดลงได้อย่างสะอาด แต่มันไม่เคยขยายรูปที่เล็กเกินไปให้
1200x630 คือขนาด featured image ที่ถูกต้องของ WordPress หรือเปล่า?
ถูกเฉพาะสำหรับตัวอย่างลิงก์บนโซเชียลเท่านั้น 1200 x 630 คืออัตราส่วน 1.91:1 ที่ Facebook, LinkedIn และ X ใช้กับภาพ Open Graph แต่ธีมของคุณจะแสดงขนาดที่ลงทะเบียนไว้ตามที่เทมเพลตเรียกใช้ ถ้าขนาดที่ลงทะเบียนนั้นเป็น hard crop แบบ 16:9 ไฟล์อัตราส่วน 1.91:1 ที่อัพโหลดไปจะโดนตัดขอบบนและขอบล่างทิ้ง
ทำไม WordPress ถึงครอป featured image ของผม?
เพราะธีมลงทะเบียนขนาดนั้นโดยเปิด hard crop ไว้ อาร์กิวเมนต์ตัวที่สี่ที่ส่งให้ add_image_size เป็น true ซึ่งบังคับขนาดให้ตรงเป๊ะและตัดส่วนที่เกินกรอบทิ้ง ถ้าตั้งเป็น false WordPress จะย่อตามสัดส่วนแทน แต่ขนาดสุดท้ายก็อาจต่างจากที่คุณกำหนดไว้
หลังเปลี่ยนขนาดรูปใน WordPress ต้อง regenerate thumbnail ไหม?
ต้อง การแก้ add_image_size มีผลกับไฟล์ที่อัพโหลดในอนาคตเท่านั้น รูปที่อยู่ในคลังสื่อแล้วจะยังคงครอปแบบเดิมจนกว่าคุณจะสร้างใหม่ ให้รัน wp media regenerate --yes ด้วย WP-CLI หรือใช้ปลั๊กอิน Regenerate Thumbnails จากหน้า dashboard ถ้าไม่มี WP-CLI
ควรปิดการสร้างขนาดรูปของ WordPress เพื่อเก็บแต่ไฟล์ต้นฉบับไหม?
ไม่ควร เมื่อไม่มีขนาดกลางเหลืออยู่ ธีมจะย้อนไปเสิร์ฟไฟล์ขนาดเต็มแล้วให้เบราว์เซอร์ย่อเอง ซึ่งอาจส่ง JPEG ขนาด 4000px ไปให้มือถือ นั่นทำให้เวลาโหลดและ Core Web Vitals พังยับ ไฟล์ย่อยเหล่านั้นมีอยู่ก็เพื่อป้องกันเรื่องนี้โดยเฉพาะ