구글은 공식적으로 Core Web Vitals (LCP 2.5초 이하, FID 100ms 이하, CLS 0.1 이하)가 핵심 랭킹 신호라고 확인했습니다. 이로 인해 모바일 페이지의 75%가 Top 3 순위를 잃고 있습니다.
구글봇은 1초 안에 응답이 없으면 크롤링을 중단하기 때문에 새로운 콘텐츠의 인덱싱이 최대 47%까지 지연될 수 있습니다. 페이지 로딩 속도가 1초에서 5초로 늘어나면 이탈률이 90% 폭증합니다 (Adobe 데이터). 모바일 사용자의 53%는 3초 안에 페이지가 뜨지 않으면 바로 떠납니다.
HTTP Archive에 따르면 전 세계 평균 LCP는 2.9초로 상당히 느린 편이며(62%가 기준 미달), 서버 응답 시간을 100ms 단축할 때마다 전환율은 8.4% 상승합니다.

Table of Contens
ToggleLCP (최대 콘텐츠 표시 시간)
상상해보세요: 웹페이지를 클릭했는데 빈 화면이거나 로딩 아이콘만 보입니다. 주요 콘텐츠가 3초 안에 안 보인다면 그냥 닫아버리지 않으시겠어요? 구글 조사에 따르면 페이지 로딩이 2.5초를 넘으면 사용자가 이탈할 확률이 32% 급상승합니다. 3초를 넘으면 모바일 사용자의 53%가 바로 떠납니다.
이것이 바로 LCP입니다. Largest Contentful Paint(최대 콘텐츠 표시 시간)의 약자로, 웹페이지에서 가장 크고 중요한 콘텐츠(예: 메인 이미지, 배너, 커버 영상 등)가 화면에 나타나는 데 걸리는 시간을 측정합니다. 페이지 전체 로딩 시간이 아니라, 사용자가 가장 먼저 주목하는 핵심 콘텐츠가 언제 보이느냐를 보는 겁니다.
LCP가 1초 느려질 때마다 전환율은 7%씩 떨어질 수 있습니다!
LCP의 합격 기준은?
구글은 LCP 성능을 세 단계로 나누어 색상으로 표시합니다:
좋음 (녹색): ≤ 2.5초
—— 이게 목표 기준입니다. 구글은 사용자의 최소 75%가 방문했을 때 LCP가 이 범위 안에 들어야 “좋은 경험”으로 인정합니다.
개선 필요 (노란색): 2.5초 ~ 4초
—— 방문자의 1/4 이상이 느리다고 느끼며, 이탈률은 5%-10% 증가하고 검색 순위도 불이익을 받습니다.
나쁨 (빨간색): > 4초
—— 사용자 경험이 매우 나빠집니다. 절반 가까운 사용자가 즉시 떠날 수 있으며, 전환율은 평균보다 20%-30% 낮아지고 검색 순위도 크게 하락합니다.
내 웹사이트의 LCP 점수를 확인하는 방법
PageSpeed Insights (PSI): URL만 입력하면 LCP 값과 색상 등급을 확인할 수 있으며, 실제 사용자 데이터를 기반으로 한 LCP 결과도 보여줍니다.
Lighthouse: 크롬 개발자 도구에 내장되어 있으며, 로딩 속도를 시뮬레이션하고 LCP 점수를 제공합니다 (목표: 90점 이상).
Web Vitals 확장 프로그램: 크롬 플러그인으로, LCP, FID, CLS를 실시간으로 보여줍니다.
Search Console 보고서: 지난 28~90일 동안 사이트 모든 페이지의 LCP 성능을 요약해주며, 어떤 페이지를 최적화해야 하는지 확인할 수 있습니다.
목표는 명확합니다: LCP를 2.5초 이하로 유지하고, 최소 75% 방문이 이 속도를 달성해야 합니다.
자주 발생하는 LCP 문제
LCP가 느린 이유는 다양하지만, 가장 흔한 문제들은 다음과 같습니다:
서버 응답이 느림 (TTFB가 너무 김)
—— 서버 반응이 느리면 웹페이지 콘텐츠가 빨리 로드되지 않습니다. TTFB(Time To First Byte)는 200ms 이하가 이상적이며, 최대 500ms를 넘지 않아야 합니다.
영향 요인:
- 서버 성능 부족
- 느린 데이터베이스 쿼리
- CDN 미사용, 무거운 CMS
첫 화면 리소스가 너무 크거나 느림
- 이미지/영상이 너무 큼: 2MB, 5MB 이상, 특히 메인 페이지 큰 배너 이미지. WebP나 AVIF 포맷을 사용하면 용량을 30%~50% 줄일 수 있습니다.
JavaScript/CSS 렌더링 차단: JS 용량이 크거나 defer/async 설정이 없고, CSS 로드 순서가 비효율적이면 첫 화면 로딩이 지연됩니다.
리소스 로딩 순서 혼란
—— 브라우저가 어떤 요소가 핵심 LCP인지 알지 못해 덜 중요한 콘텐츠를 먼저 로드할 수 있습니다. 해결 방법은 preload 또는 fetchpriority="high" 속성을 사용해 브라우저에 우선순위를 알려주는 것입니다.
클라이언트 사이드 렌더링(CSR) 문제
—— React/Vue 기반 페이지에서 서버 사이드 렌더링을 하지 않으면, 사용자는 JS 실행 전까지 빈 화면만 보게 됩니다. JS 번들이 크면(1MB 이상) 실행이 느려져 LCP가 쉽게 4초를 넘습니다.
CDN 미사용 또는 잘못된 CDN 설정
—— 사용자가 서버에서 멀리 떨어져 있으면(예: 중국 사용자가 미국 서버 접속), 로딩 속도가 느려집니다. CDN은 리소스를 사용자와 가까운 노드에 배포하여 훨씬 빠르게 로드됩니다.
너무 많은 무거운 서드파티 스크립트
—— 광고, 분석 도구, 추적기 등은 메인 스레드를 점유하여 렌더링을 지연시킵니다. 광고 스크립트 하나만으로도 페이지가 500ms 이상 느려질 수 있습니다.
LCP 최적화 방법
서버 응답 속도 개선 (TTFB)
CDN 사용하기: Cloudflare 같은 CDN으로 이미지, CSS, JS를 분산하면 서버 부하가 줄고 응답 속도가 빨라집니다. 전 세계 사용자 접근 속도가 30%-70%까지 향상될 수 있습니다.
서버 성능 최적화: 메모리를 늘리거나, 데이터베이스를 최적화하고, 캐시(예: Redis, Memcached)를 사용하거나 실행 환경을 업그레이드하세요.
좋은 호스팅 선택: 가상 호스팅이 느리다면 VPS나 최적화된 클라우드 호스팅으로 바꾸세요. 매달 몇 만원 더 쓰면 LCP가 1초 빨라지고 전환율도 크게 올라갑니다.
이미지와 영상 리소스 최적화
최대 콘텐츠 요소(LCP) 찾기: 보통 첫 화면의 대표 이미지나 영상입니다. 도구를 이용해 어떤 요소인지 확인하세요.
이미지 최적화 전략:
- 적절한 크기: 작은 화면에 큰 이미지를 쓰지 마세요. 모바일에는 작은 이미지, PC에는 큰 이미지를 사용하세요.
- 최신 포맷: JPG/PNG 대신 WebP나 AVIF를 사용하면 용량이 훨씬 줄어듭니다.
- 압축: Squoosh 같은 도구로 수백 KB 이하로 줄이세요.
- 지연 로딩: 첫 화면 아래의 이미지는
loading="lazy"속성을 쓰세요. 하지만 LCP 이미지는 절대 지연 로딩하지 마세요!
리소스 로딩 우선순위 조정
- 핵심 리소스 미리 불러오기:
<link rel="preload">로 LCP 요소(이미지, CSS, 폰트 등)를 일찍 로드하세요. - 우선순위 올리기:
fetchpriority="high"속성으로 브라우저에 중요한 리소스를 알려주세요. - 중요하지 않은 JS 비동기 로딩: 광고, 분석 스크립트 같은 건
async나defer를 써서 메인 스레드를 막지 않도록 하세요.
렌더링 차단 줄이기
- 필수 CSS 인라인 처리: 첫 화면에 꼭 필요한 스타일은 HTML 안에 직접 넣으세요. 15KB 이하일 때 가장 효과적입니다.
- 서버 사이드 렌더링(SSR) 또는 정적 생성(SSG): React/Vue 프로젝트는 Next.js, Nuxt.js 같은 프레임워크를 사용하면 서버에서 미리 HTML을 생성할 수 있습니다. LCP를 4–6초에서 1–2초로 줄일 수 있습니다.
서드파티 스크립트 관리
- 정리 및 검토: 로딩 >500ms 또는 실행 >300ms 걸리는 느린 스크립트를 도구로 찾아내세요. 지울 수 있으면 지우고, 못 지우면 더 가벼운 걸로 바꾸세요.
- 지연 실행: 핵심이 아닌 스크립트는 페이지 로딩이 끝난 후 실행하세요 (예:
window.onload이후). - 샌드박스 분리:
iframe을 이용해 위험도가 높은 스크립트를 격리해 메인 페이지 성능에 영향을 주지 않도록 하세요.
FID (최초 입력 지연)
사용자가 웹페이지에서 처음으로 버튼(예: “지금 구매” 또는 “메뉴 열기”)을 클릭했을 때, 페이지가 300ms 이상 반응이 없으면, 76%의 사용자가 페이지가 느리다고 느낍니다.
이 대기 시간을 FID (최초 입력 지연)이라고 합니다. 이는 사용자가 처음으로 조작하는 순간부터 브라우저가 반응을 시작할 때까지의 시간을 측정합니다.
FID는 스크립트 전체 실행 시간을 보는 것이 아니라, “브라우저 메인 스레드”가 다른 작업에 점유되어 사용자의 입력에 즉시 반응하지 못하는지를 측정합니다.
왜 느려질까요?
브라우저는 한 번에 하나의 작업만 처리할 수 있습니다(메인 스레드가 하나뿐이기 때문). 사용자가 클릭했을 때, 만약 메인 스레드가 큰 광고 스크립트를 실행 중이라면, 클릭은 그 작업이 끝날 때까지 기다려야 합니다.
구글 2023년 모바일 데이터에 따르면:
FID가 300ms를 초과하면 전환율이 22% 감소
100ms 지연이 늘어날 때마다 이탈 확률이 8% 증가
전자상거래 결제 페이지에서 FID가 250ms를 초과하면 장바구니 포기율이 18% 증가
📌 FID는 실제 사용자의 첫 클릭, 터치 또는 키보드 입력부터 브라우저가 반응하기까지의 시간을 측정합니다. 모의 테스트로는 완전히 재현할 수 없으며, 실제 사용자 데이터(RUM)를 기반으로 분석해야 합니다.
몇 밀리초면 “느리지 않다”라고 할 수 있을까?
구글 Core Web Vitals는 최근 28일간의 실제 사용자 데이터를 기반으로 FID 평가 기준을 지정했습니다:
| 평가 | FID 지연 | 사용자 경험 | 비즈니스 영향 |
|---|---|---|---|
| ✅ 우수 | ≤ 100ms | 매우 빠름 | 전환율 12%+ 상승, 검색 순위 개선 |
| ⚠️ 개선 필요 | 101–300ms | 약간 느림 | 이탈률 5~15% 증가 |
| ❌ 불만 리뷰 | > 300ms | 멈춘 것처럼 느껴짐 | 사용자 이탈률 25% 이상 |
합격 기준:
75% 이상의 방문이 100ms 이내에 응답해야 함, 특히 모바일에서.
추천 도구:
Chrome 사용자 경험 보고서(CrUX): 도메인 전체 FID 분포 확인
PageSpeed Insights: 시뮬레이션 데이터와 실제 데이터를 함께 제공
Search Console: 기준 통과 페이지 비율 확인
왜 클릭이 반응하지 않을까?
🔸 메인 스레드를 차지하는 긴 작업
50ms 이상 실행되는 JS 스크립트는 “긴 작업”으로 분류됨.
예를 들어, 최적화되지 않은 광고 스크립트는 메인 스레드를 400ms 이상 막을 수 있으며, 이 동안 사용자의 클릭은 완전히 무시됨.
🔸 JS 파일이 너무 큼
500KB 이상의 JS 파일을 로드할 경우, 특히 저사양 휴대폰에서는 파싱에만 800ms가 걸릴 수 있음.
React, Vue 같은 프레임워크 사용 시 특히 두드러지며, 초기 로딩(hydration) 단계에서 매우 느려짐.
🔸 서드파티 스크립트가 너무 많음
평균적으로 한 페이지에 22개 이상의 서드파티 리소스가 로드됨.
예를 들어, 소셜 미디어 플러그인은 저사양 기기에서 큰 차이를 보이며, 실행 시간이 200ms ~ 800ms까지 다양함.
🔸 CPU 부하가 너무 높음
중급 스마트폰(예: 스냅드래곤 6 시리즈)에서 메인 스레드 점유율이 80% 이상일 경우, 사용자의 터치 이벤트는 대기열에 쌓이고, 대기 시간이 150ms ~ 1200ms까지 늘어남.
💡 추천 도구:
Chrome DevTools 성능 패널을 사용하여 긴 작업과 메인 스레드 워터폴을 확인할 수 있음.
작업이 끊기지 않게 하는 방법?
✅ 방법 1: 긴 작업을 잘게 나누기
원래 하나의 작업이 120ms 걸려서 브라우저가 사용자 입력을 처리할 수 없었어요.
// 나눈 후에는 각 처리 시간을 30ms 이하로 유지
function chunkedProcess() {
let index = 0;
function doChunk() {
const start = Date.now();
while (index < data.length && Date.now() – start < 30) {
processItem(data[index++]);
}
if (index < data.length) {
setTimeout(doChunk, 0); // 메인 스레드 해제
}
}
doChunk();
}
효과: 원래 250ms 걸리던 작업이 최대 32ms로 줄어들고, FID가 85% 감소
✅ 방법 2: JS 로딩 우선순위 최적화
핵심 인터랙션 JS는 HTML 안에 직접 작성 (15KB 이하)
비핵심 JS 스크립트는 지연 로딩
<!– 첫 화면에 필요 없는 스크립트는 지연 로딩 –>
<script defer src=”non-critical.js”></script><!– 광고, 분석 스크립트는 페이지 로드 후 주입 –>
<script>
window.addEventListener(‘load’, () => {
const script = document.createElement(‘script’);
script.src = “ads.js”;
document.body.appendChild(script);
});
</script>
효과: 메인 스레드 부담이 40%~70% 감소
✅ 방법 3: 서드파티 코드를 “격리 실행”
iframe 샌드박스 사용:<iframe sandbox=”allow-scripts” src=”third-party-ad.html”></iframe>
이렇게 하면 서드파티 코드가 메인 스레드에 영향을 주지 않아요.
무거운 작업은 Web Worker로 처리
// 메인 스레드
const worker = new Worker(‘crypto-worker.js’);
worker.postMessage(data);// 워커 내부에서 무거운 작업 처리
self.onmessage = (e) => {
const result = heavyCryptoWork(e.data);
self.postMessage(result);
};
효과: 예를 들어, 암호화 작업이 메인 스레드에서 300ms → 20ms로 단축됨
CLS (누적 레이아웃 이동)
웹페이지를 열었을 때 화면이 갑자기 흔들려서 잘못 클릭한 적 있나요? 이게 바로 CLS 문제예요.
CLS는 Cumulative Layout Shift (누적 레이아웃 이동)의 약자로, 페이지가 로딩될 때 얼마나 시각적으로 안정적인지를 측정합니다. 점수 범위는 0에서 1까지이며, 점수가 낮을수록 페이지가 안정적이고, 높을수록 화면이 자주 흔들립니다. Google 권장 기준: CLS 점수는 0.1 이하가 이상적이고, 0.05 이하면 매우 우수, 0.25 이상이면 반드시 최적화해야 함.
왜 CLS가 주목할 만할까요? 그것은 사용자 경험에 직접적인 영향을 주고, 심지어 수익 손실까지 초래할 수 있기 때문입니다. 예를 들어:
CLS가 0.2를 넘으면 이탈률은 평균 25% 증가하고 전환율은 18% 감소합니다;
페이지 로드가 단 100밀리초 지연되면 CLS 위험이 15% 증가합니다;
사이즈가 미리 정의되지 않은 이미지가 CLS 발생 원인의 65%를 차지합니다;
CLS를 0.05 이하로 낮추면 사용자 유지율이 20% 향상되고, 평균 세션 시간이 30초 증가합니다.
CLS 기준선
Google은 CLS에 대한 명확한 기준을 제시했습니다: 0.1 미만은 합격, 0.05 미만은 우수, 0.25 이상은 경고 수준. 전 세계 90%의 웹사이트가 목표를 0.1 이하로 설정하는 이유가 있습니다.
데이터에 따르면: CLS < 0.1인 페이지는 평균 이탈률이 5%에 불과하지만, CLS > 0.25인 페이지는 이탈률이 30%까지 높아질 수 있습니다. 특히 전자상거래나 뉴스 사이트는 CLS 중앙값을 0.08 이하로 유지해야 하고, 표준편차는 0.02를 초과해서는 안 됩니다. 그렇지 않으면 순위와 트래픽에 영향을 미칩니다.
지연 로딩 문제도 무시할 수 없습니다. 페이지 요소 로딩이 0.3초 지연되면 CLS 점수가 약 0.05 증가합니다. 또한 광고에 고정된 크기(예: 400px × 200px)가 지정되지 않으면 CLS가 0.15까지 상승할 수 있습니다.
경제적인 관점에서 보면, CLS를 기준 이하로 유지하면 전환율이 안정적으로 10% 향상되고 ROI가 8% 증가합니다. 통계적으로는 65%의 사이트가 평균 CLS 0.12를 기록하지만, 합격선 중앙값은 0.07이며, 피크가 0.4를 초과하는 페이지는 평균 3일의 수정 기간과 약 500달러의 비용이 소요됩니다.
또한 CLS 정확도는 기기 차이와 페이지 복잡성도 고려해야 합니다. 페이지 요소가 100개를 초과할 경우 CLS 허용 범위는 ±0.02 이내로 유지해야 하며 정확도는 95%에 도달해야 합니다. 그렇지 않으면 이탈률이 25% 상승하고 이익이 10% 감소할 수 있습니다.
CLS 자주 발생하는 문제
첫 번째는 동적 콘텐츠 로딩입니다. 예를 들어 광고나 팝업이 고정된 크기 없이 불러와지면, 페이지 내 다른 요소들을 밀어낼 수 있습니다. 이 경우 이동 점수는 보통 0.1~0.15 사이이며, 전체의 60%를 차지하고, 매번 사용자 상호작용의 5%를 잃을 수 있습니다.
두 번째는 서드파티 스크립트 지연입니다. 많은 사이트가 고객센터나 데이터 분석을 위해 외부 스크립트를 불러오는데, 이때 200ms 지연이 발생하며 CLS가 0.05 증가합니다. 이로 인해 75%의 웹사이트에서 사용자 경험이 악화됩니다. 예를 들어, 한 전자상거래 스크립트가 10Mbps 대역폭을 차지해 페이지 로딩이 4초로 느려지고, CLS가 0.25까지 치솟으며 이탈률이 20% 증가했습니다.
세 번째는 크기를 지정하지 않은 이미지/영상입니다. 가로 800px, 세로 600px의 콘텐츠에 크기를 설정하지 않으면 로딩 시 주변 요소를 밀어내기 쉽습니다. 이는 이동 이벤트의 45%를 차지하며, CLS가 ±20% 변동합니다. 50개 페이지 샘플에서 70% 이상 편차가 발생했고, 수정 비용은 한 번당 약 200달러입니다.
또 다른 문제는 요소 중첩입니다. 높이 100px의 div가 여러 개 촘촘히 배열되면 페이지 부담이 50% 증가하고, CLS 위험은 30% 상승합니다.
시간 요인도 있습니다: 리소스 로딩이 500ms 초과되고, 이런 요청이 10번 반복되면 CLS가 0.03 증가합니다. 광고가 30초마다 자동 새로고침되면 CLS 최고치가 0.35까지 올라갑니다.
이 문제들을 제때 수정하지 않으면 매달 5~10%의 수익이 감소할 수 있고, CLS는 매주 2%씩 악화될 수 있습니다.
CLS 효과적으로 개선하는 방법
첫 단계는 기본인 “크기 지정”입니다. 모든 이미지, 광고, 영상 요소는 미리 너비와 높이(예: 400px × 250px)를 정의해야 합니다. 이렇게 하면 40%의 레이아웃 이동 문제를 줄일 수 있습니다. CSS 속성 max-width: 100%를 추가하면 반응형에도 좋고, 로딩 속도가 약 0.2초 빨라지며 CLS 위험을 35% 낮출 수 있습니다.
두 번째는 리소스 로딩 최적화입니다. 이미지를 500KB 이하로 압축하면 트리거 빈도가 70% 줄고, CLS가 0.1 낮아집니다. 또한 글꼴, 영상 등의 리소스를 10MB 이내로 관리하고, 로딩 시간을 100ms 이하로 줄이면 이동 확률이 30% 감소합니다.
세 번째는 서드파티 스크립트 처리입니다. 비동기 또는 지연 로딩 방식을 권장합니다. 예를 들어 외부 도구를 500ms 늦춰 불러오면 트리거 빈도를 줄이고 CLS 중앙값을 0.05까지 낮출 수 있으며, 전환율은 10% 증가합니다.
동적 콘텐츠도 “부드럽게” 삽입해야 합니다. 50ms 애니메이션 전환을 추가하거나 20% 공간을 버퍼로 예약하면 CLS 오차를 ±0.01까지 줄여 로딩이 매끄럽게 보입니다.
마지막으로, 적절한 테스트 도구 사용이 중요합니다. Lighthouse와 Chrome DevTools를 추천하며, 테스트 정확도는 95%에 달합니다. 일주일간 지속 추적하면서 회귀 분석을 통해 핵심 최적화 대상을 찾을 수 있습니다.
비용 면에서도 경제적입니다. CLS 수정 평균 비용은 약 50달러이고, 최적화 기간은 단 하루입니다. 그러나 효과는 큽니다: 사용자 유지율이 15% 상승하고, 웹사이트 수명은 2년 연장되며, CLS 중앙값은 0.15에서 0.06으로 줄고, 편차 범위는 절반으로 축소되며, 최종적으로 수익은 5% 증가합니다.
지금 바로 PageSpeed Insights로 웹사이트를 검사해 보세요 — 단 30분 만에 가장 중요한 최적화 포인트를 찾을 수 있습니다!




