ทำไมคุณต้องสนใจ LCP ในปี 2026
ลองนึกภาพว่าคุณกำลังจะซื้อตั๋วเครื่องบินไปภูเก็ต คุณเปิดเว็บไซต์สายการบินขึ้นมา แต่หน้าจอกลับว่างเปล่าอยู่เกือบ 5 วินาที กว่าภาพโปรโมชั่นและปุ่ม “จองตั๋ว” จะปรากฏ — ในขณะที่หน้าจอนั้นมืดมิด คุณอาจจะกดปิดไปแล้วหรือกลับไปดูแอปคู่แข่งแทน นี่คือสิ่งที่ LCP (Largest Contentful Paint) วัด: เวลาที่ผู้ใช้รอจน “เห็นเนื้อหาหลัก” ของหน้าเว็บ
ในปี 2026 Google ใช้ LCP เป็นหนึ่งในสามตัวชี้วัด Core Web Vitals (อีกสองตัวคือ INP และ CLS) ที่ส่งผลต่ออันดับ SEO โดยตรง ถ้า LCP ของคุณเกิน 2.5 วินาที — คุณกำลังเสียทั้งผู้ใช้และอันดับ Google ไปพร้อมกัน
บทความนี้คุณจะได้เรียนรู้ทุกอย่างเกี่ยวกับ LCP ตั้งแต่นิยาม วิธีวัด สูตรคำนวณ 4 องค์ประกอบ ไปจนถึง 10 เทคนิคที่ทีม Southern Whale ใช้ลด LCP เว็บลูกค้าจาก 5+ วินาที ให้เหลือต่ำกว่า 2 วินาที — พร้อมตัวอย่างจริงและโค้ดที่คุณนำไปใช้ได้ทันที
LCP คืออะไร? และอะไรคือ “Largest Element”
LCP (Largest Contentful Paint) คือเมตริกที่วัดระยะเวลาตั้งแต่ผู้ใช้เริ่มโหลดหน้าเว็บ จนถึงตอนที่ “Element ที่ใหญ่ที่สุดที่มองเห็นในหน้าจอแรก (viewport)” ถูก render เสร็จสมบูรณ์
LCP ถูกคิดค้นโดยทีม Chrome ในปี 2019 และกลายเป็น Core Web Vitals อย่างเป็นทางการในปี 2020 — เพื่อแก้ปัญหาที่ FCP (First Contentful Paint) วัดแค่ “พิกเซลแรก” ซึ่งบางครั้งเป็นแค่ background สีเทาเปล่า ๆ ไม่สื่อถึงประสบการณ์จริงของผู้ใช้
อะไรคือ “Largest Element” ที่ LCP สนใจ?
Chrome จะติดตามและจัดอันดับ element ในหน้าจอแรก แล้วเลือกตัวที่ใหญ่ที่สุด (วัดจากขนาดที่มองเห็น) ประเภท element ที่นับเป็น LCP candidate ได้แก่:
<img>element — รูปภาพปกติ<image>ภายใน<svg>— รูปใน SVG<video>element — โดยใช้ poster image<element>ที่มีbackground-imageผ่านurl()ใน CSS- Text block — block-level element ที่มีข้อความ (เช่น
<h1>,<p>ขนาดใหญ่)
ตัวอย่างจริง: เว็บโรงแรมในภูเก็ต
เว็บโรงแรมส่วนใหญ่ในภูเก็ตมี Hero banner เป็นรูปวิวทะเลขนาดใหญ่ — รูปนี้แหละที่มักเป็น LCP element เพราะมันใหญ่ที่สุดที่ผู้ใช้เห็นทันทีเมื่อเปิดเว็บ ถ้ารูปโหลด 5 วินาที = LCP 5 วินาที = SEO score แย่
เกณฑ์ LCP ตาม Google: Good, Needs Improvement, Poor
Google กำหนดเกณฑ์ LCP ที่ชัดเจน โดยวัดจาก 75th percentile ของผู้ใช้จริง (ไม่ใช่แค่ Lab Data) ดังนี้:
| ระดับ | LCP | ความหมาย | ผลกระทบ SEO |
|---|---|---|---|
| Good (สีเขียว) | ≤ 2.5 วินาที | ดีมาก ผู้ใช้รู้สึกเร็ว | บูสต์ ranking |
| Needs Improvement (สีเหลือง) | 2.5 - 4.0 วินาที | ปานกลาง ผู้ใช้เริ่มหงุดหงิด | ไม่ช่วย ไม่ทำร้าย |
| Poor (สีแดง) | > 4.0 วินาที | ช้า ผู้ใช้กดออก | ลด ranking |
เป้าหมายที่ควรตั้งไว้: LCP < 2.5 วินาที สำหรับทุก device โดยเฉพาะมือถือบน 4G
ข้อสำคัญที่ต้องเข้าใจ: Google ใช้ Field Data จาก Chrome User Experience Report (CrUX) ไม่ใช่ Lab Data จาก Lighthouse เพราะ Lab Data เป็นการจำลองในห้องทดลอง แต่ผู้ใช้จริงอยู่ใน network และ device ที่หลากหลาย — เว็บที่ Lighthouse ได้ 95 คะแนนอาจจะมี Field LCP แย่ก็ได้
4 องค์ประกอบของ LCP: สูตรคำนวณ + Breakdown
LCP ไม่ใช่เมตริกตัวเดียว แต่เป็นผลรวมของ 4 ช่วงเวลา (sub-parts) ที่ Google ระบุไว้ในเอกสารทางการ:
LCP = TTFB + Resource Load Delay + Resource Load Time + Element Render Delay
ลองมาเจาะแต่ละองค์ประกอบ:
1. TTFB (Time to First Byte)
TTFB = เวลาตั้งแต่ browser ส่ง request จน byte แรกของ HTML กลับมา
[ผู้ใช้คลิก] → DNS lookup → TCP/TLS → Server processing → Byte แรกของ HTML
← TTFB ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━→
- Target: < 800ms (Google แนะนำ < 600ms สำหรับเว็บที่อยากได้ Good LCP)
- ส่วนที่ส่งผลต่อ TTFB: DNS, CDN, server location, server response time, database query, cache hit/miss
ตัวอย่าง: ถ้าคุณ host เว็บที่ AWS Singapore แต่ผู้ใช้อยู่ภูเก็ต ใช้ ISP True — TTFB อาจสูงถึง 300-500ms เพียงเพราะระยะทางกับ network latency
2. Resource Load Delay
Resource Load Delay = เวลาตั้งแต่ TTFB เสร็จ จนถึงตอนที่ browser เริ่มดาวน์โหลด LCP resource (เช่น รูป hero)
HTML ถูกโหลด → Browser parse HTML → ค้นเจอ <img src="hero.jpg"> → เริ่ม download
← Resource Load Delay
- Target: สั้นที่สุดเท่าที่จะทำได้ (< 200ms)
- สิ่งที่ทำให้ Delay สูง: รูป hero อยู่ใน CSS background (browser ต้องโหลด CSS ก่อนถึงเจอ) หรือ JavaScript inject element เข้ามา
สำคัญ: Resource Load Delay เป็นจุดที่คนมองข้ามมากที่สุด — คุณสามารถลด Delay ได้ทันทีด้วย <link rel="preload"> หรือ fetchpriority="high"
3. Resource Load Time
Resource Load Time = เวลาที่ใช้ดาวน์โหลด LCP resource (รูป/วิดีโอ) เสร็จ
เริ่ม download → ┃━━━━━━━━━━━━━━━━━━━━━━━━━━━┃ → download เสร็จ
← Resource Load Time ━━━━━━━━━→
- Target: < 1,000ms
- สิ่งที่ส่งผลต่อ Load Time: ขนาดไฟล์ (KB), network speed, ใช้ CDN หรือไม่, image format (WebP/AVIF ลดได้ 30-50%)
4. Element Render Delay
Element Render Delay = เวลาตั้งแต่ resource โหลดเสร็จ จนถึงตอนที่ browser render element นั้นบนหน้าจอจริง
รูปโหลดเสร็จ → Browser ต้อง parse + paint + composite → ปรากฏบนหน้าจอ
← Element Render Delay ━━━━━━━━━━━━━━━→
- Target: < 100ms
- สิ่งที่ทำให้ Delay สูง: Long-running JavaScript บน main thread, large CSS file, font ที่ยังไม่โหลดเสร็จ (text แสดงไม่ได้)
ตัวอย่าง Breakdown LCP 4.5s
| Phase | เวลา | สัดส่วน |
|---|---|---|
| TTFB | 1,200ms | 27% |
| Resource Load Delay | 800ms | 18% |
| Resource Load Time | 2,100ms | 47% |
| Element Render Delay | 400ms | 8% |
| รวม LCP | 4,500ms | 100% |
จากตัวอย่างนี้ ปัญหาใหญ่สุดคือ Resource Load Time (47%) — แปลว่ารูป hero น่าจะใหญ่เกินไป ควร compress + ใช้ WebP
LCP Candidate Elements: ตัวไหนที่ Browser เลือก?
Chrome จะติดตาม element ที่ “วาดบนหน้าจอ” และ “อยู่ใน viewport” แล้วเลือกตัวที่ใหญ่ที่สุดเป็น LCP element หลังจาก:
- ผู้ใช้ scroll
- ผู้ใช้ interact (กดปุ่ม, พิมพ์)
- หรือเมื่อ page โหลดเสร็จ 100%
Element ที่นับเป็น LCP ได้:
1. <img> element
<img src="/hero.webp" alt="วิวหาดป่าตอง" width="1200" height="630">
นี่คือกรณีที่พบบ่อยที่สุด — Hero image เป็น LCP element
2. <video> ที่มี poster
<video poster="/video-poster.webp" controls>
<source src="/intro.mp4" type="video/mp4">
</video>
LCP จะนับเป็นเวลาที่ poster image แสดง ไม่ใช่ตัววิดีโอเริ่มเล่น
3. CSS Background Image
<div class="hero" style="background-image: url('/banner.jpg')"></div>
นี่เป็น anti-pattern ที่อันตราย เพราะ browser ต้องรอ:
- โหลด HTML เสร็จ
- โหลด CSS เสร็จ
- Parse CSS เจอ
url() - เริ่มโหลดรูป
แปลว่า Resource Load Delay จะสูงมาก แนะนำให้เปลี่ยนเป็น <img> ตามด้วย CSS positioning แทน
4. Text Block
<h1 style="font-size: 96px;">ยินดีต้อนรับสู่ Southern Whale</h1>
ถ้าหน้าเว็บไม่มีรูป — text ขนาดใหญ่อาจกลายเป็น LCP element แทน
Element ที่ ไม่ นับเป็น LCP:
- Element ที่ครอบคลุม viewport ทั้งหมด (เช่น full-page background gradient)
- Iframe content
<image>ที่มี opacity = 0- Element ที่อยู่นอก viewport
- SVG element (ส่วน path, rect — ยกเว้น
<image>ภายใน)
10 วิธีปรับ LCP ให้ < 2.5 วินาที (พร้อมโค้ด)
ทีม Southern Whale ใช้ 10 เทคนิคนี้กับเว็บลูกค้าทุกราย ลด LCP เฉลี่ย 50-70%
1. ใช้ CDN (Cloudflare/Fastly/Akamai)
CDN จะช่วยให้ resource ถูก cache ที่ edge server ใกล้ผู้ใช้ — ลด TTFB และ Resource Load Time ได้ทันที 30-60%
สำหรับเว็บลูกค้าในไทย:
- Cloudflare มี edge ที่ Bangkok และ Singapore → latency 10-30ms
- Fastly มี POP ที่ Singapore → latency 30-50ms
- AWS CloudFront มี edge ที่ Bangkok → latency 5-20ms
ดูคู่มือเต็มที่ Cloudflare Complete Guide 2026 ของเรา ครอบคลุมการตั้งค่า CDN + Cache Rules + Image Optimization
2. ใช้ <link rel="preload"> สำหรับ LCP image
วิธีนี้บอก browser ให้เริ่มดาวน์โหลด LCP resource ทันทีที่เจอใน HTML ไม่ต้องรอ parse จนถึงจุดที่ใช้
<head>
<!-- Preload LCP image ทันทีที่ browser parse <head> -->
<link rel="preload"
as="image"
href="/hero.webp"
fetchpriority="high"
type="image/webp">
</head>
<body>
<img src="/hero.webp" alt="Hero" width="1200" height="630">
</body>
ผลที่ได้: ลด Resource Load Delay ได้ 200-800ms
3. ใช้ fetchpriority="high"
Attribute ใหม่ใน Chrome (รองรับตั้งแต่ Chrome 101) บอก browser ว่ารูปนี้ “สำคัญที่สุด” ควรโหลดก่อนทุกอย่าง
<img src="/hero.webp"
alt="Hero"
width="1200"
height="630"
fetchpriority="high"
decoding="async">
ข้อดี: ไม่ต้องใช้ <link rel="preload"> ที่อาจ over-preload ทรัพยากรอื่น
4. Responsive Image (srcset + sizes)
อย่าโหลดรูป 2400px ให้ผู้ใช้มือถือที่จอกว้าง 375px — มันเปลือง bandwidth และทำให้ Resource Load Time สูง
<img src="/hero-800.webp"
srcset="/hero-400.webp 400w,
/hero-800.webp 800w,
/hero-1200.webp 1200w,
/hero-2400.webp 2400w"
sizes="(max-width: 600px) 400px,
(max-width: 1000px) 800px,
1200px"
alt="Hero"
width="1200"
height="630">
ผลที่ได้: มือถือโหลดแค่ไฟล์ 400px (ขนาด ~40KB) แทนที่จะโหลด 2400px (ขนาด ~400KB)
5. ใช้ WebP หรือ AVIF Format
WebP ลดขนาดไฟล์เฉลี่ย 30% เทียบกับ JPEG ที่คุณภาพเดียวกัน AVIF ลดขนาดเฉลี่ย 50% — แต่ browser support ยังไม่ครบ (Safari รองรับเต็มที่ปี 2023)
<picture>
<source srcset="/hero.avif" type="image/avif">
<source srcset="/hero.webp" type="image/webp">
<img src="/hero.jpg" alt="Hero" width="1200" height="630">
</picture>
Browser จะเลือกรูปที่ดีที่สุดที่มันรองรับ — AVIF ก่อน ถ้าไม่ได้ค่อยเป็น WebP ถ้าไม่ได้อีกค่อยเป็น JPEG
6. SSR / SSG แทน Client-Side Rendering
ถ้าใช้ React SPA (Single Page Application) — browser ต้องโหลด JS bundle → execute → render → ค่อยมี LCP element แสดง LCP จะแย่มาก
แนะนำ:
- Next.js: ใช้
getStaticProps(SSG) หรือgetServerSideProps(SSR) - Astro: ทุกหน้าเป็น SSG อยู่แล้ว → LCP เร็วโดย default
- Nuxt.js: ใช้
useFetchกับ SSR mode - WordPress: ใช้ static cache plugin (เช่น WP Rocket, W3 Total Cache)
// Next.js getStaticProps ตัวอย่าง
export async function getStaticProps() {
const data = await fetchHeroData();
return {
props: { hero: data },
revalidate: 3600 // ISR — regenerate ทุก 1 ชั่วโมง
};
}
7. Optimize TTFB (Database + Cache)
TTFB ส่วนใหญ่หายไปกับ database query และ application logic — ลดด้วย:
// Express.js + Redis cache ตัวอย่าง
import { createClient } from 'redis';
const redis = createClient();
app.get('/api/products', async (req, res) => {
const cacheKey = 'products:list';
const cached = await redis.get(cacheKey);
if (cached) {
return res.json(JSON.parse(cached)); // TTFB ~ 5ms
}
const products = await db.query('SELECT * FROM products LIMIT 20');
await redis.setex(cacheKey, 300, JSON.stringify(products)); // cache 5 นาที
res.json(products); // TTFB ~ 200ms (DB hit)
});
Tips อื่น ๆ:
- เพิ่ม database index ที่ column ที่ใช้ใน WHERE clause
- ใช้ connection pool (อย่าเปิด-ปิด connection ทุก request)
- ใช้ CDN เพื่อ cache HTML (สำหรับเว็บที่ไม่เป็น personalized)
8. กำจัด Render-Blocking Resources
CSS และ JavaScript ใน <head> จะ block render — browser ต้องโหลดและ execute เสร็จก่อนถึงจะ paint อะไรได้
<!-- BAD: Block render -->
<link rel="stylesheet" href="/styles.css">
<script src="/app.js"></script>
<!-- GOOD: Defer + Async + Critical CSS inline -->
<style>
/* Critical CSS — เฉพาะ above-the-fold */
.hero { width: 100%; height: 500px; }
h1 { font-size: 48px; color: #333; }
</style>
<link rel="preload" href="/styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/styles.css"></noscript>
<script src="/app.js" defer></script>
ผลที่ได้: ลด Element Render Delay ได้ 300-1000ms
9. Lazy Load Below-the-Fold
รูปและ iframe ที่อยู่นอก viewport แรก — โหลดทีหลังได้ ไม่ต้องแย่ง bandwidth กับ LCP element
<!-- รูปใน viewport แรก (LCP) -->
<img src="/hero.webp" fetchpriority="high" alt="Hero">
<!-- รูปต่อ ๆ ไป -->
<img src="/section2.webp" loading="lazy" alt="Section 2">
<img src="/section3.webp" loading="lazy" alt="Section 3">
<iframe src="/youtube" loading="lazy"></iframe>
สำคัญ: อย่าใส่ loading="lazy" ที่ LCP image! มันจะทำให้ LCP แย่ลงเพราะ browser ลด priority ของรูปนั้น
10. font-display: swap + Preload Font
ถ้า text เป็น LCP element และคุณใช้ custom font — browser จะรอจน font โหลดเสร็จก่อนถึงแสดงข้อความ (FOIT - Flash of Invisible Text)
<head>
<link rel="preload" href="/fonts/Prompt-Bold.woff2"
as="font" type="font/woff2" crossorigin>
</head>
<style>
@font-face {
font-family: 'Prompt';
src: url('/fonts/Prompt-Bold.woff2') format('woff2');
font-weight: 700;
font-display: swap; /* แสดง fallback font ก่อน แล้วค่อย swap */
}
</style>
ผลที่ได้: ลด Element Render Delay สำหรับ text-LCP page ได้ 200-500ms
LCP ใน WordPress, Astro, Next.js
WordPress
WordPress เป็น CMS ที่มี LCP แย่ที่สุดโดยธรรมชาติ เพราะ:
- Dynamic PHP rendering → TTFB สูง
- Plugin มาก → render-blocking JS/CSS เยอะ
- Theme builder (Elementor, Divi) → bloat
แก้ด้วย:
- ใช้ WP Rocket หรือ W3 Total Cache → cache HTML
- ใช้ ShortPixel หรือ Smush → convert รูปเป็น WebP
- ลบ plugin ที่ไม่จำเป็น (ดูคำแนะนำที่ /plugins/)
- ใช้ Cloudflare APO (Automatic Platform Optimization) สำหรับ WordPress
Astro (แนะนำสำหรับเว็บ marketing)
Astro คือ static-first framework — LCP ดีโดย default เพราะ:
- ทุกหน้าเป็น HTML static ที่ pre-render แล้ว
- Zero JavaScript by default → ไม่มี render-blocking JS
<Image>component บีบอัด + serve WebP/AVIF อัตโนมัติ
---
import { Image } from 'astro:assets';
import hero from '../assets/hero.jpg';
---
<Image src={hero} alt="Hero"
widths={[400, 800, 1200]}
sizes="(max-width: 800px) 100vw, 1200px"
loading="eager"
fetchpriority="high"
format="avif" />
Next.js
Next.js มี Image Component ที่ optimize ให้อัตโนมัติ:
import Image from 'next/image';
export default function Page() {
return (
<Image
src="/hero.webp"
alt="Hero"
width={1200}
height={630}
priority // เทียบเท่ากับ fetchpriority="high" + eager loading
sizes="(max-width: 768px) 100vw, 1200px"
/>
);
}
priority prop จะใส่ <link rel="preload"> ให้อัตโนมัติ + เพิ่ม fetchpriority="high" → LCP ดีขึ้นทันที 30-50%
Case Study: เว็บ E-Commerce ภูเก็ต LCP 5.2s → 1.8s
Background
ลูกค้าเป็นเว็บขายของฝากภูเก็ต (น้ำพริก, ผ้าบาติก, ของที่ระลึก) ใช้ WordPress + WooCommerce
- Traffic: 50,000 sessions/เดือน (60% มาจากมือถือ)
- ปัญหา: Bounce rate 68%, Google Search Console รายงาน “Poor LCP” สำหรับ 70% ของหน้า
ค่าก่อนเริ่มแก้ไข (Field Data จาก CrUX)
| Metric | Mobile | Desktop |
|---|---|---|
| LCP | 5.2s (Poor) | 3.4s (Needs Improvement) |
| INP | 380ms (Needs) | 180ms (Good) |
| CLS | 0.18 (Needs) | 0.08 (Good) |
| TTFB | 1,400ms | 950ms |
| Bounce Rate | 68% | 52% |
Breakdown ปัญหา LCP 5.2s (Mobile)
- TTFB 1,400ms — host ที่ Bangkok แต่ database query ช้า, ไม่มี cache
- Resource Load Delay 600ms — hero image อยู่ใน CSS
background-image - Resource Load Time 2,800ms — hero image เป็น JPEG ขนาด 1.2MB (ไม่ resize)
- Element Render Delay 400ms — render-blocking CSS 250KB
สิ่งที่ทีม Southern Whale ทำ
| ขั้นตอน | สิ่งที่ทำ | ลด LCP ได้ |
|---|---|---|
| 1 | ติดตั้ง Cloudflare + APO (cache HTML ที่ edge) | -800ms TTFB |
| 2 | ติดตั้ง WP Rocket + Redis object cache | -400ms TTFB |
| 3 | เปลี่ยน background-image → <img> element | -500ms Delay |
| 4 | เพิ่ม fetchpriority="high" ที่ hero image | -200ms Delay |
| 5 | Convert JPEG → WebP + responsive srcset (400/800/1200) | -1,800ms Load Time |
| 6 | ใส่ Critical CSS inline + defer non-critical CSS | -300ms Render Delay |
| 7 | Lazy load รูปอื่นที่อยู่ below-the-fold | -200ms (ช่วยให้ priority อยู่ที่ hero) |
| 8 | Preload font + font-display: swap | -100ms Render Delay |
| 9 | ลบ plugin ที่ไม่ใช้ 12 ตัว | -200ms TTFB |
| 10 | Database query optimization + index | -300ms TTFB |
ค่าหลังแก้ไข (1 เดือนหลังเริ่มเก็บ Field Data)
| Metric | Mobile (Before) | Mobile (After) | Improvement |
|---|---|---|---|
| LCP | 5.2s (Poor) | 1.8s (Good) | -65% |
| INP | 380ms (Needs) | 195ms (Good) | -49% |
| CLS | 0.18 (Needs) | 0.05 (Good) | -72% |
| TTFB | 1,400ms | 280ms | -80% |
| Bounce Rate | 68% | 41% | -27pp |
| Conversion Rate | 1.2% | 2.8% | +133% |
ผลข้างเคียงดี ๆ
- Google Search Console: “Good URLs” เพิ่มจาก 30% → 92% ภายใน 28 วัน
- Organic Traffic: เพิ่มขึ้น 47% ภายใน 3 เดือน
- Average Order Value: เพิ่มขึ้น 18% (ผู้ใช้รู้สึก trust เว็บมากขึ้น)
“เว็บโหลดเร็วขึ้นชัดเจน ลูกค้าสั่งของฝากมากขึ้น ทีม Southern Whale ทำงานดีมาก” — เจ้าของร้าน
Tools สำหรับวัด LCP
1. PageSpeed Insights (ฟรี — แนะนำเริ่มจากที่นี่)
URL: https://pagespeed.web.dev/
- แสดงทั้ง Field Data (จาก CrUX 28 วันย้อนหลัง) และ Lab Data (จาก Lighthouse)
- บอก LCP element ตัวจริงในหน้าเว็บคุณ
- แนะนำ optimization ที่ทำได้ทันที
2. Lighthouse (Chrome DevTools)
DevTools → Lighthouse tab → Generate report
- รัน Lab test ทันที (ไม่ต้องรอ field data)
- แสดง LCP candidate element พร้อม screenshot
- เหมาะกับการทดสอบ pre-production
3. Chrome DevTools Network Tab
DevTools → Network tab → ติ๊ก "Disable cache" → Reload
- ดู waterfall ของ resource ทั้งหมด
- หา resource ที่ใหญ่ที่สุดและช้าที่สุด
- ใช้
Throttling: Slow 4Gเพื่อจำลอง mobile network
4. WebPageTest (Pro tool)
URL: https://www.webpagetest.org/
- ทดสอบจาก location จริง (Bangkok, Singapore, US)
- Filmstrip + waterfall อย่างละเอียด
- Compare 2 URL side-by-side (เปรียบเทียบ before/after)
5. Chrome User Experience Report (CrUX)
URL: https://chromeuxreport.com/
- Field Data จากผู้ใช้ Chrome จริงทั่วโลก
- ใช้ค่านี้แหละที่ Google นำไปจัดอันดับ SEO
- API ฟรี ดึงไป monitor เองได้
5 ข้อผิดพลาดที่คนทำบ่อยที่สุดเรื่อง LCP
1. ใส่ loading="lazy" ที่ LCP image
นี่คือ อันดับ 1 ที่เห็นบ่อยที่สุด — developer คิดว่า lazy loading ดีกับทุกรูป แต่ความจริง:
loading="lazy"ทำให้ browser ลด priority ของรูปนั้น- LCP image ต้องโหลดเร็วที่สุด ห้าม lazy load!
<!-- ผิด -->
<img src="/hero.webp" loading="lazy" alt="Hero">
<!-- ถูก -->
<img src="/hero.webp" loading="eager" fetchpriority="high" alt="Hero">
2. ใช้ background-image สำหรับ Hero
/* ผิด: Browser ต้องโหลด CSS เสร็จก่อนถึงเห็นรูป */
.hero {
background-image: url('/hero.jpg');
}
แทนที่ด้วย <img> element + CSS positioning จะเร็วกว่า 500-1000ms
3. ไม่กำหนด width + height ในรูป
<!-- ผิด: ไม่มี dimension → CLS เพิ่ม + browser ไม่ reserve space -->
<img src="/hero.webp" alt="Hero">
<!-- ถูก -->
<img src="/hero.webp" width="1200" height="630" alt="Hero">
ไม่ใส่ width/height ทำให้ทั้ง LCP แย่ (browser ต้อง re-layout) และ CLS แย่
4. ใส่ render-blocking 3rd-party script ที่ <head>
<!-- ผิด: Block render นาน 2-3 วินาที -->
<head>
<script src="https://www.googletagmanager.com/gtag/js?id=GA_ID"></script>
<script src="https://connect.facebook.net/en_US/fbevents.js"></script>
</head>
<!-- ถูก: Defer หรือใช้ async + ย้ายไปท้าย <body> -->
<body>
<!-- เนื้อหา -->
<script async src="..."></script>
</body>
หรือใช้ Tag Manager + Server-Side Tracking เพื่อย้าย overhead ออกจาก client
5. Over-preload ทุกอย่าง
<!-- ผิด: Preload เยอะเกินไป browser ไม่รู้ว่าตัวไหนสำคัญที่สุด -->
<link rel="preload" href="/hero.webp" as="image">
<link rel="preload" href="/section2.webp" as="image">
<link rel="preload" href="/section3.webp" as="image">
<link rel="preload" href="/banner.webp" as="image">
Preload เฉพาะ LCP element เท่านั้น — รูปอื่น browser จะจัดการเอง
คำถามที่พบบ่อย
Q1: LCP เกี่ยวกับ INP และ CLS อย่างไร?
ทั้งสามเป็น Core Web Vitals ที่ Google ใช้จัดอันดับ:
- LCP = ความเร็วโหลด (เห็นเนื้อหาเร็วแค่ไหน)
- INP = ความเร็วตอบสนอง (กดปุ่มแล้ว response เร็วแค่ไหน)
- CLS = ความเสถียรของ layout (มี layout shift หรือเปล่า)
ทั้งสามต้องผ่านเกณฑ์ Good เพื่อได้ “Good URLs” status
Q2: LCP กับ FCP ต่างกันอย่างไร?
- FCP (First Contentful Paint) = เวลาที่ pixel แรกใด ๆ ปรากฏ (อาจเป็นแค่ background สีเทา)
- LCP = เวลาที่ element ใหญ่ที่สุด (เนื้อหาหลัก) ปรากฏ
LCP สื่อถึงประสบการณ์ผู้ใช้จริงมากกว่า FCP
Q3: ทำไม Lighthouse บอก LCP ดี แต่ PageSpeed Insights บอกแย่?
เพราะ Lighthouse ใช้ Lab Data (simulate ในห้องทดลอง) แต่ PageSpeed Insights แสดง Field Data จากผู้ใช้จริง ที่อาจอยู่บน network ช้ากว่า, device เก่ากว่า — ใช้ Field Data เป็นหลัก
Q4: LCP element ของหน้าเว็บคืออะไร ดูได้อย่างไร?
เปิด PageSpeed Insights → ใส่ URL → ดูส่วน “Largest Contentful Paint element” จะมี screenshot และ HTML ของ element ตัวนั้น
อีกวิธี: เปิด Chrome DevTools → Performance tab → Record reload → ดู “LCP” marker
Q5: ใช้ Cloudflare แล้ว LCP จะดีขึ้นทันทีไหม?
ดีขึ้นแน่นอน แต่ขึ้นกับ:
- ถ้า TTFB เป็นปัญหาหลัก → Cloudflare CDN + Cache ลด TTFB ได้ 50-80%
- ถ้าปัญหาคือ image ใหญ่ → ต้องใช้ Cloudflare Images หรือ Polish เพิ่ม
- ถ้า render-blocking JS เยอะ → Cloudflare ไม่ช่วย ต้อง optimize code เอง
ดูคู่มือเต็มที่ Cloudflare Complete Guide 2026
Q6: WordPress LCP แย่มาก ทำอย่างไรดี?
3 ขั้นตอนหลัก:
- ติดตั้ง cache plugin — WP Rocket (paid) หรือ W3 Total Cache (free)
- เปิด Cloudflare APO ($5/เดือน) — cache HTML ที่ edge
- Optimize images — ใช้ ShortPixel หรือ Smush convert WebP
ส่วนใหญ่ทำ 3 ขั้นนี้ LCP ลดได้ 50%+ ดูข้อมูลเพิ่มที่ /plugins/ ของเรา
Q7: LCP ต่างกันระหว่าง mobile vs desktop เยอะ — เป็นปกติไหม?
ปกติ — ถ้าเว็บคุณ responsive ดี LCP mobile ควรช้ากว่า desktop 30-80% เพราะ:
- Mobile network ช้ากว่า (4G vs WiFi)
- Mobile CPU ช้ากว่า → render delay สูง
- Mobile viewport เล็ก → LCP element อาจเป็นคนละตัว
Google ดูทั้งสอง — ต้อง pass ทั้ง mobile และ desktop
Q8: ใช้ AI image (Stable Diffusion, Midjourney) จะทำให้ LCP ช้าไหม?
ไม่ — AI image เป็นแค่ source ของรูป สิ่งที่กำหนด LCP คือ:
- ขนาดไฟล์สุดท้าย (ต้อง compress)
- Format (WebP/AVIF)
- Dimension (responsive srcset)
ไม่ว่ารูปมาจากที่ไหน ถ้า optimize ดี LCP ก็เร็ว
สรุป: Roadmap ลด LCP ของคุณวันนี้
LCP คือเมตริก Core Web Vitals ที่สำคัญที่สุดต่อ “First Impression” ของผู้ใช้ ถ้าผู้ใช้เห็นหน้าเว็บเปล่า ๆ 5 วินาที — พวกเขาจะคลิกออกก่อนคุณจะมีโอกาส convert พวกเขาเป็นลูกค้า
Action items ที่คุณทำได้วันนี้:
- ✅ วัด LCP ปัจจุบันที่ pagespeed.web.dev — รู้จุดเริ่มต้น
- ✅ ระบุ LCP element ในหน้า — รู้ว่าต้อง optimize อะไร
- ✅ เพิ่ม
fetchpriority="high"ที่ LCP image — quick win 200ms+ - ✅ Convert hero image เป็น WebP — quick win 30-50% file size
- ✅ Setup Cloudflare CDN — quick win TTFB
- ✅ ลบ render-blocking JS ที่ไม่จำเป็น
- ✅ Re-test หลัง deploy 1 สัปดาห์ — รอ Field Data update
Target ที่ควรตั้ง:
- LCP < 2.5 วินาที (ทั้ง mobile + desktop)
- TTFB < 800ms
- Resource Load Time < 1,500ms
- Element Render Delay < 200ms
ถ้าคุณทำตามคู่มือนี้แล้วยังลด LCP ไม่ได้ตามเป้า — ติดต่อทีม Southern Whale เราช่วย audit + optimize เว็บลูกค้ามากกว่า 200+ ราย LCP เฉลี่ยลดลง 60% ใน 30 วัน
ต้องการเรียนรู้เพิ่มเรื่อง Core Web Vitals ตัวอื่น? อ่านต่อ:
- INP (Interaction to Next Paint) Complete Guide 2026
- CLS (Cumulative Layout Shift) Complete Guide 2026
- Cloudflare Complete Guide for Performance 2026
หรือดูบริการของเรา:
- Web Development — สร้างเว็บใหม่ Performance-first ตั้งแต่วันแรก
- Plugin Recommendations — รายการ plugin ที่เราใช้กับเว็บลูกค้า
LCP ที่ดีไม่ใช่แค่ตัวเลข แต่เป็นจุดเริ่มต้นของประสบการณ์ที่ดีของผู้ใช้ — และเป็นรากฐานของ SEO ที่ยั่งยืนในยุคที่ Google วัดทุกอย่างจาก “ผู้ใช้จริงรู้สึกอย่างไร” มากกว่าจาก “เว็บถูกออกแบบมาอย่างไร”
เริ่มต้นวันนี้ ที่ผู้ใช้คนต่อไปของคุณจะรอน้อยลง 2 วินาที — และนั่นคือทั้งหมดที่ต้องใช้เพื่อเปลี่ยน bounce rate ให้เป็น conversion