ปัญหา Cumulative Layout Shift และวิธีการแก้ไข

ปัญหา Cumulative Layout Shift (CLS) และวิธีแก้ไข: ทำให้เว็บของคุณไม่ขยับไปมา น่ารำคาญ
คุณเคยเจอเว็บที่กำลังอ่านดีๆ อยู่ๆ รูปภาพก็โผล่มา ทำให้ข้อความที่เรากำลังอ่านอยู่เลื่อนหนีไปไกลลิบไหม? นั่นแหละครับ คือปัญหาที่เรียกว่า Cumulative Layout Shift (CLS) ซึ่งนอกจากจะน่ารำคาญแล้ว ยังส่งผลเสียต่อประสบการณ์ผู้ใช้ (UX) และคะแนน Core Web Vitals ของ Google ด้วย บทความนี้จะมาอธิบายกันว่า CLS คืออะไร ทำไมถึงเกิดขึ้น และที่สำคัญ จะมีวิธีแก้ไขอย่างไรบ้าง เพื่อให้เว็บของคุณใช้งานได้ราบรื่น ไม่ทำให้ผู้ใช้ปวดหัว
CLS เป็นเมตริกที่วัดความเสถียรของหน้าเว็บในขณะที่กำลังโหลด หากหน้าเว็บมีการเปลี่ยนแปลงเลย์เอาต์แบบไม่คาดคิดในขณะที่ผู้ใช้กำลังดูอยู่ นั่นหมายถึงมี CLS เกิดขึ้น ซึ่งอาจเกิดจากการที่องค์ประกอบต่างๆ บนหน้าเว็บถูกโหลดเข้ามาทีหลังและทำให้ส่วนอื่นๆ เลื่อนตาม
CLS มักเกิดขึ้นเมื่อองค์ประกอบต่างๆ บนหน้าเว็บถูกโหลดเข้ามาแบบ "lazy" หรือถูกแทรกเข้ามาในหน้าหลังจากที่เนื้อหาหลักแสดงไปแล้ว สิ่งนี้ทำให้พื้นที่บนหน้าเว็บมีการเปลี่ยนแปลงขนาดหรือตำแหน่งอย่างกะทันหัน
Cumulative Layout Shift (CLS) เป็นหนึ่งในตัวชี้วัดที่สำคัญในการประเมินประสบการณ์การใช้งานของผู้ใช้บนเว็บไซต์ โดยเฉพาะอย่างยิ่งเมื่อพูดถึงความเร็วในการโหลดหน้าเว็บ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการปรับปรุงเว็บไซต์ให้มีประสิทธิภาพและลดปัญหา CLS คุณสามารถอ่านบทความที่เกี่ยวข้องได้ที่นี่ ที่นี่
ปัญหา CLS ส่วนใหญ่มักเกิดจากวิธีการจัดการทรัพยากรที่แสดงผลบนหน้าเว็บ โดยเฉพาะอย่างยิ่งเมื่อองค์ประกอบเหล่านั้นไม่ได้ถูกกำหนดขนาดไว้ล่วงหน้า หรือถูกโหลดเข้ามาทีหลัง
การที่รูปภาพถูกโหลดเข้ามาโดยไม่มีการกำหนดขนาด (width และ height) ไว้ล่วงหน้า เป็นสาเหตุอันดับต้นๆ ของ CLS เมื่อเบราว์เซอร์แสดงผลเนื้อหาอื่นๆ ไปแล้ว และรูปภาพก็ค่อยๆ โหลดเข้ามา ทำให้เนื้อหานั้นถูกดันลงไป
Cumulative Layout Shift (CLS) เป็นหนึ่งในปัจจัยที่สำคัญในการประเมินประสบการณ์ผู้ใช้บนเว็บไซต์ ซึ่งมีผลต่อการจัดอันดับในผลการค้นหาของ Google หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการปรับปรุง SEO และวิธีการลด CLS สามารถอ่านบทความที่เกี่ยวข้องได้ที่ นี่ ซึ่งจะช่วยให้คุณเข้าใจถึงเทคนิคและกลยุทธ์ในการพัฒนาเว็บไซต์ให้มีประสิทธิภาพมากยิ่งขึ้น
โฆษณาเป็นอีกหนึ่งแหล่งที่มาสำคัญของ CLS โดยเฉพาะโฆษณาที่มักจะแทรกเข้ามาในหน้าเว็บ หลังจากที่เนื้อหาหลักเริ่มแสดงผลแล้ว
iframe, วิดีโอ, หรือคอนเทนต์อื่นๆ ที่ฝังเข้ามาจากภายนอก (เช่น YouTube, Google Maps) ก็สามารถเป็นต้นเหตุของ CLS ได้เช่นกัน หากไม่มีการกำหนดขนาดที่ชัดเจน
width และ height ให้กับ iframe หรืออิลิเมนต์ที่ใช้ฝังคอนเทนต์ปัญหาจากฟอนต์เว็บสามารถส่งผลต่อ CLS ได้ในสองลักษณะหลัก คือ Flash of Invisible Text (FOIT) และ Flash of Unstyled Text (FOUT)
เพื่อบอกเบราว์เซอร์ให้ดาวน์โหลดฟอนต์มาก่อนfont-display: กำหนดค่า font-display ใน CSS เพื่อควบคุมพฤติกรรมของเบราว์เซอร์ในการแสดงผลฟอนต์เนื้อหาที่ถูกสร้างขึ้นหรือแทรกเข้ามาด้วย JavaScript หลังจากที่หน้าเว็บแสดงผลไปแล้ว เช่น กล่องข้อความแจ้งเตือน (pop-ups), สไลด์โชว์, หรือส่วนอัปเดตข้อมูลต่างๆ
min-height เพื่อให้แน่ใจว่าพื้นที่ว่างจะไม่หายไปการแก้ไข CLS ไม่ได้เกี่ยวกับการทำให้เว็บสวยงามอย่างเดียว แต่เป็นการทำให้เว็บสามารถคาดเดาได้และโหลดได้อย่างราบรื่นสำหรับผู้ใช้
นี่คือพื้นฐานสำคัญที่สุดในการป้องกัน CLS ให้กับองค์ประกอบภาพและวิดีโอ
width และ heightwidth และ height ในแท็ก ![]()
หรือ โดยตรง```html
```
width และ height ใน HTML ได้```css
img {
max-width: 100%;
height: auto; / หรือกำหนด aspect ratio /
}
```
การกำหนด height: auto; จะช่วยให้สัดส่วนถูกต้องเมื่อปรับขนาด แต่การมี width และ height ใน HTML คือหัวใจสำคัญในการจองพื้นที่
สำหรับรูปภาพที่เป็น responsive การกำหนด aspect ratio จะช่วยให้เบราว์เซอร์จองพื้นที่อย่างถูกต้อง โดยไม่ต้องกำหนด height จริง แต่ใช้ aspect-ratio CSS property แทน
```css
img {
width: 100%;
aspect-ratio: 16 / 9; / หรืออัตราส่วนของรูปภาพ /
object-fit: cover; / ถ้าต้องการให้รูปภาพเต็มพื้นที่ /
}
```
เบราว์เซอร์จะสามารถคำนวณและจองพื้นที่ได้ แม้จะยังไม่ได้โหลดรูปภาพจริง
ลดผลกระทบจากฟอนต์เว็บด้วยการปรับแต่งการโหลดและการแสดงผล
font-displayswap: นี่เป็นค่าที่นิยมใช้มากที่สุด เพราะจะแสดงข้อความด้วยฟอนต์ของระบบทันที แล้วค่อยสลับไปใช้ฟอนต์เว็บเมื่อโหลดเสร็จ ข้อดีคือผู้ใช้เห็นข้อความเร็วขึ้น แต่ก็อาจมี FOUT ที่ทำให้เลย์เอาต์เปลี่ยนบ้าง```css
@font-face {
font-family: 'MyCustomFont';
src: url('myfont.woff2') format('woff2');
font-display: swap;
}
```
optional: เบราว์เซอร์จะแสดงผลฟอนต์แค่ครั้งแรกที่โหลด หากฟอนต์เว็บโหลดไม่เสร็จภายในกรอบเวลาที่กำหนด ก็จะใช้ฟอนต์สำรองไปเลย ซึ่งเหมาะสำหรับคอนเทนต์ที่ไม่สำคัญมาก ทำให้ลด CLS ได้ดีในบางกรณีblock: เหมือนกับ optional แต่ถ้าฟอนต์เว็บโหลดไม่เสร็จ จะไม่แสดงข้อความเลยในช่วงเวลาที่กำหนด (timeout) ซึ่งอาจทำให้เกิด FOIT ที่นานเกินไปการบอกให้เบราว์เซอร์ดาวน์โหลดฟอนต์มาก่อนจะช่วยลดเวลาในการแสดงผล
):```html
```
crossorigin จำเป็นต้องใส่เมื่อมีการโหลดฟอนต์ข้ามโดเมน หรือใช้ preload กับฟอนต์
หลีกเลี่ยงการที่องค์ประกอบเหล่านี้เกิดการเลื่อนได้อย่างไร? ง่ายๆ คือการจองพื้นที่ให้พวกมันไว้ก่อน
```html
```
เมื่อโฆษณาหรือ iframe โหลดเข้ามา มันจะเข้ามาแทนที่ div placeholder นี้แทนที่จะดันเนื้อหาอื่น
min-height: หากขนาดขององค์ประกอบที่กำลังจะโหลดไม่แน่นอน อาจใช้ min-height เพื่อให้แน่ใจว่าพื้นที่ว่างอย่างน้อยเท่านี้จะถูกสงวนไว้```css
.dynamic-content {
min-height: 100px;
}
```
เมื่อ JavaScript ต้องสร้างหรือปรับเปลี่ยนเลย์เอาต์ ควรทำอย่างระมัดระวัง
loading="lazy" ในแท็ก ![]()
loading="lazy" ในแท็ก การรู้วิธีแก้ไขเป็นสิ่งหนึ่ง แต่การรู้ว่าปัญหาอยู่ที่ไหนคืออีกสิ่งหนึ่ง เครื่องมือต่างๆ จะช่วยคุณได้มาก
หลังจากแก้ไขปัญหา CLS แล้ว ควรมีการวัดผลเพื่อยืนยันว่าปัญหาได้รับการแก้ไขจริง และประสบการณ์ผู้ใช้ดีขึ้น
การแก้ไขปัญหา CLS อาจดูเหมือนเป็นเรื่องเทคนิคที่ซับซ้อน แต่เมื่อเราเข้าใจสาเหตุหลักๆ และมีแนวทางแก้ไขที่ชัดเจน การทำให้เว็บไซต์ของคุณมีประสิทธิภาพและมอบประสบการณ์ที่ดีแก่ผู้ใช้ก็ไม่ใช่เรื่องยากเกินไป
| หัวข้อ | ค่า |
|---|---|
| หน้าจอทั้งหมด | 5000 |
| การเคลื่อนไหวที่ไม่คาดคิด | 300 |
| เปอร์เซ็นต์ของการเคลื่อนไหวที่ไม่คาดคิด | 6% |
ด้วยการใส่ใจในรายละเอียดเล็กๆ น้อยๆ เหล่านี้ คุณจะสามารถลดปัญหา CLS ลงได้อย่างมาก ทำให้เว็บไซต์ของคุณดูเป็นมืออาชีพ น่าเชื่อถือ และที่สำคัญที่สุด คือ ใช้งานได้อย่างราบรื่น ไม่ทำให้ผู้ใช้รู้สึกหงุดหงิดอีกต่อไปครับ
Cumulative Layout Shift (CLS) คือ การวัดค่าการเคลื่อนไหวขององค์ประกอบบนหน้าเว็บที่เปลี่ยนแปลงตำแหน่งของตัวองค์ประกอบโดยไม่ได้รับอนุญาต ซึ่งส่งผลให้ผู้ใช้ที่เข้าชมหน้าเว็บมีประสิทธิภาพการใช้งานที่ไม่ดี
Cumulative Layout Shift สำคัญเพราะมีผลต่อประสิทธิภาพการใช้งานของผู้ใช้ การมี CLS สูงอาจทำให้ผู้ใช้ไม่สามารถคลิกหรือโต้ตอบกับองค์ประกอบบนหน้าเว็บได้อย่างถูกต้อง
CLS สามารถวัดได้โดยใช้ Chrome User Experience Report หรือ Lighthouse โดยการใช้ Core Web Vitals report ที่มีให้ใน Google Search Console
เพื่อลด CLS ควรใช้ขนาดขององค์ประกอบที่แน่นอน และใช้ค่าความกว้างและความสูงที่ถูกต้อง รวมถึงการใช้ CSS เพื่อรักษาพื้นที่สำหรับองค์ประกอบ
ใช่ การปรับปรุง Cumulative Layout Shift สามารถมีผลต่อการทำ SEO โดย Google ได้ประกาศว่า CLS จะเป็นหนึ่งในตัวชี้วัดสำคัญของ Core Web Vitals ที่มีผลต่อการจัดอันดับในการค้นหา