ปรับ Core Web Vitals WordPress บน Shared Hosting ให้ผ่าน

LCP, INP และ CLS คือ 3 ตัวชี้วัด Google ใช้ Rating เว็บ แก้ไขถูกจุดช่วยอันดับ Search โดยตรง

Core Web Vitals WordPress Hosting

Core Web Vitals คืออะไร และทำไมถึงสำคัญ

Core Web Vitals (CWV) คือชุดตัวชี้วัดประสบการณ์ผู้ใช้ที่ Google กำหนดขึ้นเพื่อวัด "ความเร็วที่ผู้ใช้รู้สึก" จริงๆ ไม่ใช่แค่เวลาโหลดแบบเทคนิค ประกอบด้วย 3 ค่าหลักได้แก่ LCP, INP และ CLS โดย Google นำค่าเหล่านี้ไปใช้เป็นปัจจัยในการจัดอันดับ Search ตั้งแต่ปี 2021 เป็นต้นมา

สำหรับเว็บ WordPress บน Shared Hosting การปรับ CWV อาจดูซับซ้อน แต่จริงๆ แล้วมีขั้นตอนที่ชัดเจนและทำได้โดยไม่ต้องแตะ Server หรือใช้ CLI เลย เพียงแค่ตั้งค่า Plugin ให้ถูกต้องและปรับ Theme เล็กน้อยก็สามารถผ่านเกณฑ์ "Good" ของ Google ได้

LCP, INP และ CLS แตกต่างกันอย่างไร

LCP (Largest Contentful Paint) วัดเวลาที่ใช้ในการแสดงส่วนที่ใหญ่ที่สุดในหน้าจอ ซึ่งส่วนใหญ่คือรูป Hero Image หรือ Heading หลัก เกณฑ์ที่ดีคือ ≤ 2.5 วินาที ถ้า LCP สูงมักเกิดจากรูปภาพขนาดใหญ่ที่ยังไม่ Preload หรือ Server Response Time ที่ช้า

INP (Interaction to Next Paint) เข้ามาแทน FID ตั้งแต่มีนาคม 2024 วัดความเร็วในการตอบสนองเมื่อผู้ใช้คลิก แตะ หรือพิมพ์ เกณฑ์ที่ดีคือ ≤ 200ms ปัญหาหลักมักมาจาก JavaScript ขนาดใหญ่ที่ Block Main Thread ทำให้ Browser ไม่มีเวลาตอบสนองผู้ใช้

CLS (Cumulative Layout Shift) วัดความเสถียรของ Layout ขณะโหลด ถ้ารูปภาพไม่มีการกำหนดขนาด หรือ Font โหลดทีหลังแล้วดัน Content เลื่อน ค่า CLS จะสูง เกณฑ์ที่ดีคือ ≤ 0.1

Metric ย่อมาจาก เกณฑ์ "Good" ปัญหาหลักบน Shared Hosting
LCP Largest Contentful Paint ≤ 2.5 วินาที Hero Image ใหญ่, TTFB สูง
INP Interaction to Next Paint ≤ 200ms JavaScript หนัก, Third-party Scripts
CLS Cumulative Layout Shift ≤ 0.1 รูปไม่มี Size, Web Font ไม่มี Fallback

ตรวจสอบคะแนน CWV ด้วย PageSpeed Insights

ก่อนแก้ปัญหา ต้องรู้ก่อนว่าเว็บเราคะแนนเป็นอย่างไร เครื่องมือหลักที่ Google แนะนำคือ PageSpeed Insights (pagespeed.web.dev) ซึ่งแสดงทั้ง Lab Data (จำลองจาก Lighthouse) และ Field Data (ข้อมูลจริงจากผู้ใช้ Chrome) โดย Google ใช้ Field Data เป็นปัจจัยในการจัด Ranking

เครื่องมืออื่นที่ควรใช้ร่วมด้วยคือ Google Search Console หมวด "Core Web Vitals" จะบอกว่าหน้าไหนมีปัญหาบ้าง และ Chrome DevTools แท็บ Performance สามารถ Record การโหลดเพื่อดู LCP/CLS ได้ละเอียดมากขึ้น

แก้ LCP: Preload Hero Image และ fetchpriority

LCP ที่ช้าส่วนใหญ่เกิดจากรูป Hero Image ที่ Browser ค้นพบช้าเกินไป เพราะต้องรอ CSS หรือ JavaScript โหลดก่อน วิธีแก้ที่เร็วที่สุดคือการบอก Browser ล่วงหน้าว่ารูปนี้สำคัญมาก ต้องโหลดก่อนสิ่งอื่น

วิธีที่ 1 คือใส่ fetchpriority="high" ลงในแท็ก <img> ของรูป Hero พร้อมกับลบ loading="lazy" ออก เพราะ lazy load จะทำให้รูปโหลดช้าลงโดยตั้งใจ ซึ่งขัดแย้งกับการ Optimize LCP

วิธีที่ 2 คือเพิ่ม <link rel="preload"> ใน <head> เพื่อให้ Browser เริ่ม Download รูปทันทีที่ HTML ถูก Parse โดยไม่ต้องรอ CSS/JS บน WordPress สามารถทำได้ผ่าน Plugin หรือเพิ่มโค้ดใน functions.php ของ Theme

แก้ INP: ลด JavaScript Execution Time

INP สูงมักเกิดจาก JavaScript ที่ใช้เวลานานเกินไปบน Main Thread ทำให้เมื่อผู้ใช้คลิกหรือแตะหน้าจอ Browser ต้องรอให้ JavaScript ทำงานเสร็จก่อนถึงจะ Paint ผลลัพธ์ได้ บน Shared Hosting ปัญหานี้รุนแรงขึ้นเพราะ CPU ที่ได้รับจัดสรรมีจำกัด

วิธีแก้หลักคือลด JavaScript ที่ไม่จำเป็นออกให้มากที่สุด ตรวจสอบ Plugin ทุกตัวว่า Load Script บนหน้าที่ไม่ได้ใช้งานหรือเปล่า เช่น Plugin Contact Form ที่โหลด Script ทุกหน้าทั้งที่มี Form แค่หน้าเดียว ใช้ Plugin อย่าง "Asset CleanUp" เพื่อปิด Script ที่ไม่จำเป็นในแต่ละหน้า

นอกจากนี้ Script ที่โหลดจากภายนอก (Third-party) อย่าง Chat Widget, Popup Builder หรือ Analytics ที่ไม่จำเป็น ควรเปลี่ยนเป็นแบบ Defer หรือ Lazy Load เพื่อไม่ให้ Block Main Thread ขณะที่ผู้ใช้กำลังโต้ตอบกับหน้าเว็บ

แก้ CLS: กำหนด Width/Height รูปภาพและ Ad Slots

CLS เกิดขึ้นเมื่อ Element บนหน้าเว็บเลื่อนตำแหน่งหลังจาก Content อื่นโหลดแล้ว สาเหตุที่พบบ่อยที่สุดบน WordPress คือรูปภาพที่ไม่มีการกำหนด Width/Height เพราะ Browser ไม่รู้ว่าต้องจองพื้นที่เท่าไหร่ให้รูป เมื่อรูปโหลดเสร็จจึงดัน Content อื่นเลื่อนลงไป

วิธีแก้คือกำหนด width และ height attribute บนแท็ก <img> ทุกรูป WordPress 5.5 ขึ้นไปใส่ค่านี้โดยอัตโนมัติเมื่ออัปโหลดรูปผ่าน Media Library แต่รูปเก่าที่อัปโหลดมาก่อนอาจไม่มี ให้ใช้ Plugin "Regenerate Thumbnails" เพื่อสร้าง Meta ใหม่

สำหรับ Ad Slots หรือ Embed เช่น YouTube ให้กำหนด Container ที่มีขนาดตายตัว (Aspect Ratio) ไว้ก่อนที่ Embed จะโหลด ใช้ CSS Padding Trick padding-bottom: 56.25% สำหรับ 16:9 หรือใช้ aspect-ratio: 16/9 ใน CSS สมัยใหม่

Plugin ที่ช่วย CWV บน WordPress

การปรับ Core Web Vitals บน WordPress ไม่จำเป็นต้องแก้โค้ดด้วยมือทั้งหมด มี Plugin หลายตัวที่ช่วยให้ทำงานได้โดยไม่ต้องมีความรู้ด้านเทคนิค แต่ต้องเลือกให้เหมาะสมกับ Theme และ Plugin ที่ใช้อยู่ เพราะการใส่ Plugin Cache หลายตัวพร้อมกันอาจทำให้เกิด Conflict

Plugin ที่แนะนำสำหรับมือใหม่คือ LiteSpeed Cache หากใช้ Hosting ที่รัน LiteSpeed Web Server (ปรึกษา Hosting เพื่อตรวจสอบ) ถ้าใช้ Apache หรือ Nginx ทั่วไปให้ใช้ WP Rocket หรือ W3 Total Cache แทน ทั้งสองตัวมีฟีเจอร์ Defer JS, Critical CSS และ Image Lazy Load ในตัว

Plugin ราคา แก้ LCP แก้ INP แก้ CLS เหมาะกับ
LiteSpeed Cache ฟรี บางส่วน Hosting LiteSpeed เท่านั้น
WP Rocket ~$59/ปี ทุก Hosting, ใช้ง่ายที่สุด
W3 Total Cache ฟรี/Pro บางส่วน ไม่ครบ ผู้ที่รู้ด้านเทคนิค
Imagify / ShortPixel ฟรี/จ่าย บางส่วน Optimize รูปภาพโดยเฉพาะ
Perfmatters ~$24/ปี บางส่วน ปิด Script ต่อหน้า

ตรวจสอบ Core Web Vitals ด้วย PageSpeed Insights

ก่อนและหลังแก้ไข ให้ทดสอบด้วย PageSpeed Insights และเก็บผลเปรียบเทียบ ตัวอย่างด้านล่างแสดงโค้ดที่ใส่เพื่อปรับ LCP และป้องกัน CLS พร้อมวิธีตรวจสอบผ่าน Search Console API

<!-- 1. Preload Hero Image ใน <head> -->
<link rel="preload" as="image" href="/images/hero-banner.webp" fetchpriority="high">

<!-- 2. Hero Image Tag ที่ถูกต้อง (ไม่มี lazy, มี fetchpriority, มี size) -->
<img src="/images/hero-banner.webp"
     alt="Hero Banner"
     width="1200" height="630"
     fetchpriority="high">

<!-- 3. รูปที่อยู่ด้านล่าง (Below the fold) ใส่ lazy ได้ปกติ -->
<img src="/images/article-thumbnail.webp"
     alt="Article Thumbnail"
     width="600" height="400"
     loading="lazy">

<!-- 4. CSS สำหรับ YouTube Embed ป้องกัน CLS -->
<style>
.video-wrapper {
  position: relative;
  padding-bottom: 56.25%; /* 16:9 ratio */
  height: 0;
  overflow: hidden;
}
.video-wrapper iframe {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
}
</style>

<!-- 5. font-display: swap ป้องกัน CLS จาก Web Font -->
<style>
@font-face {
  font-family: 'Sarabun';
  src: url('/fonts/sarabun.woff2') format('woff2');
  font-display: swap; /* <-- สำคัญมาก ป้องกัน FOIT/CLS */
}
</style>
Tip: ใช้ PageSpeed Insights (pagespeed.web.dev) ทดสอบทั้งหน้าแรกและหน้าบทความ ดู Field Data (Real Users) ร่วมกับ Lab Data เพราะ Google ใช้ Field Data ตัดสิน Ranking

แก้ปัญหาที่พบบ่อย

LCP สูง แม้ Optimize รูปแล้ว — Server Response Time (TTFB) สูงเกินไป

ถ้า Optimize รูปแล้วแต่ LCP ยังไม่ลด ให้ดูที่ค่า TTFB (Time to First Byte) ใน PageSpeed Insights ซึ่งวัดเวลาที่ Server ใช้ในการส่ง Byte แรก ถ้า TTFB สูงกว่า 600ms แสดงว่า Server ตอบสนองช้า Browser จะยังไม่เริ่มโหลดอะไรเลย ทำให้ LCP สูงโดยปริยาย

แก้ TTFB บน Shared Hosting ได้ด้วยการเปิด Page Cache (ให้ Server ส่ง HTML สำเร็จรูปแทนการ Generate ใหม่ทุกครั้ง) ใช้ Object Cache ด้วย Redis หรือ Memcached (ถามกับ Hosting ว่ารองรับไหม) และเปิด Gzip/Brotli Compression ใน .htaccess หรือผ่าน Plugin

CLS เกิดแม้กำหนด Size รูปแล้ว — Font, Ads หรือ Embed เปลี่ยน Layout หลัง Load

CLS ที่ยังสูงแม้ใส่ Width/Height รูปครบแล้ว มักเกิดจาก 3 สาเหตุหลัก ได้แก่ Web Font ที่โหลดช้าแล้ว Swap ขนาด, Google AdSense หรือ Affiliate Banner ที่โหลดทีหลังแล้วดัน Content ลง, และ Embed เช่น Instagram/Twitter Widget ที่ Resize ตัวเองหลังโหลด

วิธีแก้คือกำหนด min-height ให้ Container ของ Ad/Widget ล่วงหน้าตามขนาดที่คาดว่า Ad จะแสดง สำหรับ Font ให้เปลี่ยน font-display: block เป็น font-display: swap หรือใช้ System Font Fallback ที่ใกล้เคียง

INP สูงบนมือถือ — Third-party Script ที่ไม่จำเป็น Blocking Main Thread

INP บนมือถือสูงกว่า Desktop เสมอเพราะ CPU มือถือมีประสิทธิภาพต่ำกว่ามาก Script ที่ Block Main Thread แค่ 100ms บน Desktop อาจกลายเป็น 500ms+ บนมือถือรุ่นกลาง สาเหตุที่พบบ่อยคือ Chat Widget (Tawk.to, Crisp), Popup Plugin (OptinMonster, Elementor Popup) และ Cookie Consent Banner

ให้ Delay Script เหล่านี้จนกว่าผู้ใช้จะ Interact ครั้งแรก (User Interaction Trigger) หรือหลัง Page Load 3–5 วินาที WP Rocket มีฟีเจอร์ "Delay JavaScript Execution" ที่ทำแบบนี้ได้โดยไม่ต้องแก้โค้ด

PageSpeed Score ต่ำแต่เว็บรู้สึกเร็ว — Lab Data กับ Real User Data ต่างกัน

PageSpeed Insights ใช้ Server จาก US (หรือ Region ใกล้เคียง) ในการทดสอบ Lab Data ดังนั้นถ้าเว็บของคุณอยู่ในไทยและมี CDN ที่ดี Real User ในไทยอาจได้ประสบการณ์ที่เร็วกว่ามาก ในขณะที่ Lab Score ดูต่ำ

ให้ดูที่ Field Data (Chrome User Experience Report) ซึ่งเก็บข้อมูลจาก Chrome ผู้ใช้จริง ถ้า Field Data "Good" แสดงว่า Google มองเว็บคุณในแง่ดีแล้ว การ Optimize ต่อเพื่อเพิ่ม Lab Score จาก 75 เป็น 85 อาจไม่มีผลต่อ Ranking มากนัก ควรโฟกัสที่ Field Data เป็นหลัก

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

Core Web Vitals ส่งผลต่อ Google Ranking มากแค่ไหน?
Google ยืนยันว่า CWV เป็น "Page Experience Signal" ที่ใช้ใน Ranking แต่มีน้ำหนักน้อยกว่า Content Quality และ Backlinks มาก คิดว่าเป็น Tiebreaker — ถ้าเนื้อหา 2 เว็บเทียบเท่ากัน เว็บที่ CWV "Good" จะได้อันดับที่ดีกว่า สำหรับ Niche ที่แข่งขันสูง CWV อาจเป็นความแตกต่างที่สำคัญได้ แต่ไม่ใช่ปัจจัยเดียว
Shared Hosting ปรับ TTFB ให้ต่ำกว่า 200ms ได้ไหม?
TTFB ต่ำกว่า 200ms บน Shared Hosting ทำได้แต่ยากกว่า VPS มาก เพราะ CPU และ RAM ถูก Share กับหลายเว็บ วิธีที่ใกล้เคียงที่สุดคือเปิด Full Page Cache (WP Rocket หรือ LiteSpeed Cache) ซึ่งทำให้ Server ส่ง HTML สำเร็จรูปแทนการ Generate ใหม่ทุกครั้ง ทำให้ TTFB ลดจาก 500–800ms เหลือ 100–250ms ได้บน Shared Hosting ที่มีคุณภาพ
CWV ต้องผ่านทุกหน้าหรือแค่หน้าแรกก็พอ?
Google ประเมิน CWV ในระดับ URL ไม่ใช่แค่หน้าแรก แต่ในความเป็นจริงหน้าที่มีผู้เข้าชมน้อยเกินไปจะไม่มีข้อมูล Field Data เพียงพอ และ Google จะไม่นับ ดังนั้นให้โฟกัสที่ "Popular Pages" ก่อน ได้แก่ Homepage, หน้าบทความ Top 10 และหน้า Landing Page หลัก ถ้าหน้าเหล่านี้ผ่านและหน้าอื่นใช้ Template เดียวกัน โอกาสที่ทุกหน้าจะผ่านก็สูงมาก