๋ธ๋ก๊ทธ ์ฑ๋ฅ ์ต์ ํ ์ค์๊ฐ SEO ๋ชจ๋ํฐ๋ง ์์ ฏ ๋ฐฉ๋ฒ
๋ด ๋ธ๋ก๊ทธ์ ์ ์๋ ๋ช ์ ์ผ๊น์? SEO ์ธก์ ์์ ฏ ์ค์น๋ฅผ ํตํด ์ฝ์ด ์น ๋ฐ์ดํ ์งํ(LCP, TBT, CLS)๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ์ธ์. ๊ตฌ๊ธ ์๋จ ๋ ธ์ถ์ ๊ฒฐ์ ์ง๋ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ํฐ๋ง ์ฝ๋ ์ ์ฉ๋ฒ์ ๋๋ค.
์ค๋๋ ์ SEO(๊ฒ์ ์์ง ์ต์ ํ)๋ ๋จ์ํ ํค์๋๋ฅผ ๋์ดํ๋ ์์ค์ ๋์ด์ฐ์ต๋๋ค. ์ต์ ํ๊ฐ ์๋ ๋ธ๋ก๊ทธ๋ ๊ฒ์์์ฅ์์ ๋ค์ณ์ง์ ์์ ๋ฟ๋ง ์๋๋ผ, ๊ฒ์์์ง์ผ๋ก๋ถํฐ๋ ์ธ๋ฉด๋ฐ์ต๋๋ค. ์ ๋ธ๋ก๊ทธ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ ํ์์ ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ ๊ณต๋ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๋ด ๋ธ๋ก๊ทธ์ ์ฑ๋ฅ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ํ๊ณ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด ๋๋ค.
1. ๋ธ๋ก๊ทธ SEO ์ธก์ ์์ ฏ: ์ค์๊ฐ ์ต์ ํ ์ธก์ ๊ธฐ
๋๋ถ๋ถ์ ๋ธ๋ก๊ฑฐ๋ ํฌ์คํ ์ ๋ง์น ํ 'PageSpeed Insights'๋ 'Search Console'์ ๋ณ๋๋ก ์ ์ํด ์ฑ๋ฅ์ ํ์ธํฉ๋๋ค. ํ์ง๋ง ์ด๋ ์ฌํ ์ฒ๋ฐฉ์ผ ๋ฟ์ ๋๋ค.
- ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ: ๊ธ์ ์์ฑํ๊ณ ์ ๋ก๋ํ ์งํ, ์ฌ์ฉ์ ํ๊ฒฝ(Field Data)์์ ์งํ๊ฐ ์ด๋ป๊ฒ ๋ณํ๋์ง ์ค์๊ฐ์ผ๋ก ํ์ธํ์ฌ ์ฆ์ ์์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ์์ : "์ด๋ฏธ์ง๊ฐ ํฐ ๊ฒ ๊ฐ๋ค"๋ ๋ง์ฐํ ์ถ์ธก ๋์ , "LCP๊ฐ 3.2์ด์ด๋ฏ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ถํด์ผ ํ๋ค"๋ ๋ช ํํ ๊ทผ๊ฑฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
1.2 ์์ ฏ ๋ฐ์ดํฐ๋ฅผ ํตํ SEO ์ธก์
์ ๊ณต๋ ์์ ฏ ์ฝ๋๋ ๋จ์ํ ์ซ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๊ทธ์น์ง ์๊ณ , ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ๋ต์ ๋์ถํ๊ฒ ํด์ค๋๋ค.
| ์ธก์ ์งํ | ์์ ฏ ์ํ | ๋ธ๋ก๊ฑฐ์ ํ๋ ์ง์นจ (์ถ๋ก ) |
| LCP (๋ก๋ฉ) | ๋ถ๋ | ์๋จ ์ด๋ฏธ์ง๋ฅผ WebP๋ก ๋ณํํ๊ฑฐ๋, ํฐํธ ๋ก๋ฉ ๋ฐฉ์์ swap์ผ๋ก ๋ณ๊ฒฝ |
| TBT (๋ฐ์) | ์ํธ | ์ธ๋ถ ์ ๋์ผ์ค ๊ด๊ณ ์๋ ๋ถํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ ฏ ์ ๊ฑฐ ๊ฒํ |
| CLS (์์ ) | ์ต์ | ํ์ฌ ๋ ์ด์์ ์ ์ง. ๋จ, ๊ด๊ณ ์ฝ์ ์ ๋์ด(height) ๊ฐ ๊ณ ์ ํ์ |
2. ์ฝ์ด ์น ๋ฐ์ดํ(Core Web Vitals)์ 3๋ ํต์ฌ ์งํ ๋ถ์
๊ตฌ๊ธ์ด ์ ์ํ ์ฝ์ด ์น ๋ฐ์ดํ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ธ ๊ฐ์ง ์ ๋์ ์์น๋ก ํ์คํํ ๊ฒ์ ๋๋ค.
2.1 LCP (Largest Contentful Paint): ๋ก๋ฉ ์ฑ๋ฅ
- ์ ์: ํ์ด์ง์์ ๊ฐ์ฅ ํฐ ์ฝํ ์ธ (์ด๋ฏธ์ง, ํ ์คํธ ๋ธ๋ก ๋ฑ)๊ฐ ํ๋ฉด์ ๋ํ๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋๋ค.
- ๊ธฐ์ค: 2.5์ด ์ด๋ด(์ต์ ), 4์ด ์ด์(๋ถ๋).
- ์ต์ ํ ์ ๋ต: ์ด๋ฏธ์ง ์์ถ(WebP), ์๋ฒ ์๋ต ์๊ฐ ๋จ์ถ, ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค ์ ๊ฑฐ.
2.2 TBT (Total Blocking Time): ์ํธ์์ฉ์ฑ (FID์ ๋ณด์กฐ ์งํ)
- ์ ์: ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋์ด ์ฌ์ฉ์ ์ ๋ ฅ(ํด๋ฆญ, ํฐ์น ๋ฑ)์ ์๋ตํ ์ ์๋ ์ด ์๊ฐ์ ๋๋ค.
- ๊ธฐ์ค: 300ms ์ด๋ด(์ต์ ), 600ms ์ด์(๋ถ๋).
- ์ต์ ํ ์ ๋ต: ๋ฌด๊ฑฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์ง์ฐ, ์ฝ๋ ๋ถํ (Code Splitting).
2.3 CLS (Cumulative Layout Shift): ์๊ฐ์ ์์ ์ฑ
- ์ ์: ํ์ด์ง ๋ก๋ฉ ์ค ์์์น ๋ชปํ๊ฒ ๋ ์ด์์์ด ์ด๋ํ๋ ์ ๋๋ฅผ ์ธก์ ํฉ๋๋ค. ๊ธ์ ์ฝ๋ค๊ฐ ๊ฐ์๊ธฐ ๊ด๊ณ ๊ฐ ๋จ๋ฉด์ ํ๋ฉด์ด ๋ด๋ ค๊ฐ๋ ํ์์ด ๋ํ์ ์ ๋๋ค.
- ๊ธฐ์ค: 0.1 ์ดํ(์ต์ ), 0.25 ์ด์(๋ถ๋).
- ์ต์ ํ ์ ๋ต: ์ด๋ฏธ์ง ๋ฐ ๊ด๊ณ ์์ญ์ ๊ณ ์ ๋ ํฌ๊ธฐ(Width/Height) ํ ๋น.

3. ๋ธ๋ก๊ทธ ์ค์๊ฐ SEO ๋ชจ๋ํฐ๋ง ์ฝ๋ ์ ์ฉ๋ฐฉ๋ฒ
๋ธ๋ก๊ทธ ์ต์ ํ๋ฅผ ์ํด์๋ ๋จ์ํ ํด(PageSpeed Insights)์ ๋๋ ค๋ณด๋ ๊ฒ๋ณด๋ค, ์ค์ ์ฌ์ฉ์๊ฐ ์ ์ํ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋๋ ์ฝ๋๋ฅผ ๋ธ๋ก๊ทธ์ ์ ์ฉํ๋ ๋จ๊ณ๋ณ ๋ฐฉ๋ฒ์ ๋๋ค.
3.1 CSS ์ค์ (๋์์ธ ์ต์ ํ)
์ด CSS๋ ๋ด ๋ธ๋ก๊ทธ์ ์ค๋ฅธ์ชฝ ํ๋จ ํน์ ํน์ ์์ญ์ ์๊ณ ์ธ๋ จ๋ ๋ชจ๋ํฐ๋ง ์ฐฝ์ ๋์์ค๋๋ค. ํฌ๋ช ๋๊ฐ ์ ์ฉ๋ ๋คํฌ ๋ชจ๋ ์คํ์ผ๋ก ๋์์ธ๋์์ต๋๋ค. ์์ ํด์ ์ฌ์ฉํ์ธ์!
.vitals-monitor {
display: inline-block;
color: #fff;
padding: 12px 18px;
border-radius: 8px;
font-size: 14px;
max-width: 320px;
background: rgba(0, 0, 0, 0.7);
}
.vitals-legend {
display: flex;
align-items: center;
gap: 10px;
margin: 6px 0 10px 0;
}
.vitals-dot {
width: 12px;
height: 12px;
border-radius: 50%;
}
.vitals-dot.bad {
background: #f44336;
}
.vitals-dot.warn {
background: #ffc107;
}
.vitals-dot.good {
background: #4caf50;
}
3.2 HTML ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ ์ฉ
๋ธ๋ก๊ทธ์ body ํ๋จ์ด๋ ์ฌ์ด๋๋ฐ์ ์๋ ์ฝ๋๋ฅผ ์ฝ์ ํ์ธ์.
script
(() = {
"use strict";
const targetEl = document.getElementById('seo');
if (!targetEl) return;
const LCP_GOOD = 2500;
const LCP_WARN = 4000;
const TBT_GOOD = 300;
const TBT_WARN = 600;
const CLS_GOOD = 0.1;
const CLS_WARN = 0.25;
const vitalsDiv = document.createElement('div');
vitalsDiv.className = 'vitals-monitor';
vitalsDiv.innerHTML = `
Core Web Vitals Monitorbr
div class="vitals-legend"
div class="vitals-dot bad"/divspan๋ถ๋/span
div class="vitals-dot warn"/divspan์ํธ/span
div class="vitals-dot good"/divspan์ต์ /span
/div
LCP: span id="lcp"-/span msbr
TBT: span id="tbt"-/span msbr
CLS: span id="cls"-/span
`;
targetEl.appendChild(vitalsDiv);
function updateValue(id, value, good, warn) {
const el = document.getElementById(id);
if (!el) return;
if (typeof value === 'number') {
let displayValue = id === 'cls' ? value.toFixed(3) : value.toFixed(1);
el.textContent = displayValue;
let color = value = good ? '#4CAF50' : value = warn ? '#FFC107' : '#F44336';
el.style.color = color;
} else {
el.textContent = value;
el.style.color = '#fff';
}
}
if ('PerformanceObserver' in window) {
new PerformanceObserver(list = {
const entries = list.getEntries();
if (entries.length) {
const last = entries[entries.length - 1];
updateValue('lcp', last.startTime, LCP_GOOD, LCP_WARN);
}
}).observe({ entryTypes: ['largest-contentful-paint'] });
let clsScore = 0;
new PerformanceObserver(list = {
list.getEntries().forEach(entry = {
if (!entry.hadRecentInput) {
clsScore += entry.value;
updateValue('cls', clsScore, CLS_GOOD, CLS_WARN);
}
});
}).observe({ type: 'layout-shift', buffered: true });
let tbtScore = 0;
new PerformanceObserver(list = {
list.getEntries().forEach(entry = {
const blocking = entry.duration - 50;
if (blocking 0) {
tbtScore += blocking;
updateValue('tbt', tbtScore, TBT_GOOD, TBT_WARN);
}
});
}).observe({ type: 'longtask', buffered: true });
}
})();
/script
3.3 ์ฝ๋ ํ์ฉ์ ํตํ ์ฑ๋ฅ ๊ฐ์ ๋ฐฉ๋ฒ
์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฉํ ํ ๋ชจ๋ํฐ๋ง์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๋ก ์ ๋์ถํ ์ ์์ต๋๋ค.
- LCP ์์น๊ฐ ๋นจ๊ฐ์(Bad)์ธ ๊ฒฝ์ฐ: ๋ฉ์ธ ์ด๋ฏธ์ง๊ฐ ๋๋ฌด ๋ฌด๊ฒ๊ฑฐ๋, ์๋ฒ ์๋ต(TTFB)์ด ๋๋ฆฝ๋๋ค.
- ํด๊ฒฐ: ์ด๋ฏธ์ง๋ฅผ WebP ํ์์ผ๋ก ๋ณ๊ฒฝํ๊ณ , CDN(Cloudflare ๋ฑ) ๋์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- TBT ์์น๊ฐ ์ฌ๋ผ๊ฐ๋ ๊ฒฝ์ฐ: ๋ถํ์ํ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ(SNS ๊ณต์ ๋ฒํผ, ๋ฌด๊ฑฐ์ด ์์ ฏ)๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ ํ๊ณ ์์ต๋๋ค.
- ํด๊ฒฐ: ์ค์ํ์ง ์์ ์คํฌ๋ฆฝํธ๋ defer๋ async ์์ฑ์ ๋ถ์ฌํ์ฌ ๋ค๋ฆ๊ฒ ๋ก๋ํ์ธ์.
- CLS ์์น๊ฐ 0.1์ ๋๋ ๊ฒฝ์ฐ: ํฐํธ๊ฐ ๋ก๋ฉ๋๋ฉด์ ๊ธ์๊ฐ ํ๊ฑฐ๋, ๊ด๊ณ ๊ฐ ๋ํ๋๋ฉด์ ๋ณธ๋ฌธ ๋ด์ฉ์ ์๋๋ก ๋ฐ์ด๋ด๊ณ ์์ต๋๋ค.
- ํด๊ฒฐ: CSS์์ aspect-ratio๋ฅผ ์ฌ์ฉํด ์ด๋ฏธ์ง์ ๊ด๊ณ ๊ฐ ๋ค์ด๊ฐ ์๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ๋ณดํ์ธ์.
์ฝ์ด ์น ๋ฐ์ดํ์ ๋จ์ํ ์์น๊ฐ ์๋๋ผ "์ฌ์ฉ์๊ฐ ๋๋ผ๋ ์พ์ ํจ์ ์ฒ๋"์ ๋๋ค. ์ ๊ณตํด๋๋ฆฐ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ์ฝ๋๋ฅผ ํตํด ๋ธ๋ก๊ทธ๋ฅผ ์ด์ํ๋ฉด์ ์ฑ๋ฅ ์ ํ ์์ธ์ ์ฆ๊ฐ์ ์ผ๋ก ํ์ ํ๊ณ ์์ ํด ๋๊ฐ๋ค๋ฉด, ๊ฒ์ ์์ ๊ฒฝ์์์ ์ข๋ ์ฐ์๋ฅผ ์ ํ ์ ์์ต๋๋ค.
์ง๊ธ ๋ฐ๋ก ์์ ์ ๋ธ๋ก๊ทธ์ ์ฝ๋๋ฅผ ์ ์ฉํด ๋ณด์ธ์.