์น์ฌ์ดํธ ๋ก๋ฉ ์๋ ๊ฐ์ ๋ฐ ํฐํธ ,์ด๋ฏธ์ง ์ ์ฉ ๋ฐฉ๋ฒ
์นํ์ด์ง ๋ก๋ฉ ์ง์ฐ์ ๊ฒ์์์ง ํ๊ฐ์ ๋ ธ์ถ ์์๋ฅผ ๋จ์ด๋จ๋ฆฌ๋ฉฐ, ๋ณธ ๊ธ์์๋ WebP ์ด๋ฏธ์ง, Lazy Loading, ์ธ๋ถ ์คํฌ๋ฆฝํธ ์ต์ ํ๋ก ํ์ด์ง ์๋๋ฅผ ๊ฐ์ ํ๊ณ SEO ์ ๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
1. ๋ก๋ฉ ์๋๊ฐ ๊ฒ์์์ง ์ต์ ํ(SEO)์ ๋ฏธ์น๋ ์ํฅ
๊ฒ์์์ง์ ์นํ์ด์ง์ ๋ก๋ฉ ์๋๋ฅผ ํต์ฌ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ํ๊ฐ ์์๋ก ์ผ์ต๋๋ค. ์ด๋ ๋จ์ํ ํ์ด์ง๊ฐ ๋นจ๋ฆฌ ์ด๋ฆฌ๋ ๊ฒ์ ๋์ด, ์ฝ์ด ์น ๋ฐ์ดํ(Core Web Vitals) ์งํ์ ์ง๊ฒฐ๋์ด ๊ฒ์ ์์์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ฐ์ :ํ์ด์ง ๋ก๋ฉ ์๊ฐ ๋จ์ถ์ ์ดํ๋ฅ ์ ํ๊ธฐ์ ์ผ๋ก ๋ฎ์ถ๊ณ ์ฒด๋ฅ ์๊ฐ์ ์ฆ๋์ํต๋๋ค.
- ๊ฒ์ ๊ฒฐ๊ณผ ์์ ๋ ธ์ถ: ๊ตฌ๊ธ๊ณผ ๋ค์ด๋ฒ๋ ๋ชจ๋ฐ์ผ ์ต์ ํ ์ ๊ฒ์ด ์๋ฃ๋ ๋น ๋ฅธ ์ฌ์ดํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ธ๋ฑ์ฑํฉ๋๋ค.
- ๊ด๊ณ ์์ต ๋ฐ ์ ํ์จ ์ต์ ํ:์น์ฌ์ดํธ ์๋ ์ธก์ ๊ฒฐ๊ณผ๊ฐ ์ข์์๋ก ๊ด๊ณ ๋ ธ์ถ ๋น๋์ ํด๋ฆญ๋ฅ ์ด ๋๋ฐ ์์นํฉ๋๋ค.
2. ์ฑ๋ฅ ๋ถ์ ๋ฐ ์ฃผ์ ์๋ ์ธก์ ์งํ ๋น๊ต
ํจ์จ์ ์ธ ์๋ ์ต์ ํ๋ฅผ ์ํด์๋ ํ์ฌ ์ํ๋ฅผ ์ ํํ ์ง๋จํด์ผ ํฉ๋๋ค. LCP(์ต๋ ์ฝํ ์ธ ํ์ธํธ)์ CLS(๋์ ๋ ์ด์์ ๋ณ๊ฒฝ) ๋ฑ์ ์งํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
| ํต์ฌ ์งํ | ์ค๋ช | ์ต์ ํ ๋ชฉํ |
|---|---|---|
| LCP (Largest Contentful Paint) | ๊ฐ์ฅ ํฐ ์ฝํ ์ธ ๊ฐ ํ๋ฉด์ ๋ํ๋๋ ์๊ฐ | 2.5์ด ๋ฏธ๋ง ๊ถ์ฅ |
| FID (First Input Delay) | ์ฌ์ฉ์๊ฐ ์ฒ์ ํด๋ฆญํ ๋ ๋ฐ์ํ๋ ์๋ | 100ms ๋ฏธ๋ง ๊ถ์ฅ |
| CLS (Cumulative Layout Shift) | ์๊ฐ์ ์์๊ฐ ๊ฐ์๊ธฐ ์์ง์ด๋ ์ ๋ | 0.1 ์ดํ ๊ถ์ฅ |
3. DevTools ๋ฐ ๊ธฐ์ ์ ์์ ์ ํตํ ์ฑ๋ฅ ๊ฐ์
Chrome DevTools๋ ์น์ฌ์ดํธ์ ๋ณ๋ชฉ ํ์์ ํ์
ํ๋ ๋ฐ ํ์์ ์ธ ๋ฌด๋ฃ SEO ๋๊ตฌ์
๋๋ค. F12๋ฅผ ๋๋ฌ Performance ํญ์์ ๋
นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ฉด ์ด๋ค ๋ฆฌ์์ค๊ฐ ๋ก๋ฉ์ ๋ฐฉํดํ๋์ง ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
3.1 ์ด๋ฏธ์ง ๋ฐ ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ(Lazy Loading)
์ด๋ฏธ์ง ๊ฒฝ๋ํ๋ฅผ ์ํด WebP ํฌ๋งท์ ์ฌ์ฉํ๊ณ , Intersection Observer API๋ฅผ ํ์ฉํ ์์ฐจ ๋ก๋ฉ์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ์ด๊ธฐ ๋ ๋๋ง ์ ๋ถํ์ํ ๋ฆฌ์์ค ์์ฒญ์ ์ฐจ๋จํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์๊ฐ ๋จ์ถ์ ๊ธฐ์ฌํฉ๋๋ค.
img data-src="example.jpg" alt="Lazy Load Example" class="lazy-load" /
script
const lazyImages = document.querySelectorAll('.lazy-load');
const lazyLoadObserver = new IntersectionObserver((entries, observer) = {
entries.forEach(entry = {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.classList.remove('lazy-load');
observer.unobserve(img);
}
});
});
lazyImages.forEach(img = lazyLoadObserver.observe(img));
/script

3.2 ํฐํธ ๋ฐ ์ธ๋ถ ์คํฌ๋ฆฝํธ ์ต์ ํ
์น ํฐํธ ๋ก๋ฉ ์ font-display: swap ์์ฑ์ ์ฌ์ฉํ๋ฉด ํ ์คํธ๊ฐ ๋ณด์ด์ง ์๋ ํ์์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๋ํ ์ ๋์ผ์ค ๊ด๊ณ ์ง์ฐ ๋ก๋ฉ์ ํตํด ์ฝํ ์ธ ๋ ๋๋ง ์ฐจ๋จ ๋ฆฌ์์ค๋ฅผ ์ต์ํํด์ผ ํฉ๋๋ค.
Chrome DevTools ๊ณต์ ๊ฐ์ด๋ ๋ฐ ๋ ์ด์์ ์์ ํ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์น ํ์ค ์ต์ ํ๋ฅผ ์งํํ์ธ์.
์ง๋ฌธ 1: ํฐ์คํ ๋ฆฌ๋ ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ์์๋ ๋ก๋ฉ ์๋ ๊ฐ์ ์ด ๊ฐ๋ฅํ๊ฐ์?
๋ต๋ณ: ์๋ํ ์๋น์ค์ ๊ฒฝ์ฐ ์๋ฒ ์ค์ ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, ์ ๋ก๋ํ๋ ์ด๋ฏธ์ง ์ฉ๋์ ์ค์ด๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ๋ถ ํธ์ถ์ ์ต์ํํ๋ฉฐ ์ด๋ฏธ์ง ์ง์ฐ ๋ก๋ฉ ์ฝ๋๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ ์๋๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ง๋ฌธ 2: Lazy Loading์ ์ ์ฉํ๋ฉด SEO์ ๋ถ์ด์ต์ด ์๋์?
๋ต๋ณ: ์ต์ ๊ฒ์์์ง ์คํ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ ์ ์์ผ๋ฏ๋ก, ์ฌ๋ฐ๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ ์ง์ฐ ๋ก๋ฉ์ ์คํ๋ ค ํ์ด์ง ์ฑ๋ฅ ์ ์๋ฅผ ๋์ฌ SEO์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ง๋ฌธ 3: ์ด๋ค ์ด๋ฏธ์ง ํฌ๋งท์ด ๊ฐ์ฅ ์๋์ ์ ๋ฆฌํ๊ฐ์?
๋ต๋ณ: ์ผ๋ฐ์ ์ผ๋ก WebP ํฌ๋งท์ด JPEG๋ PNG๋ณด๋ค ํจ์ฌ ๊ฐ๋ณ์ต๋๋ค. ๋ฌด์์ค ์์ถ๊ณผ ์์ค ์์ถ์ ๋ชจ๋ ์ง์ํ๋ฏ๋ก ์น ํ๊ฒฝ์์ ๊ฐ์ฅ ๊ถ์ฅ๋๋ ํฌ๋งท์ ๋๋ค.
์ง์์ ์ธ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง์ ํ์์ฑ
์น์ฌ์ดํธ ์๋ ์ต์ ํ๋ ๋จ ํ ๋ฒ์ ์์ ์ผ๋ก ๋๋์ง ์์ต๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ํ์ด์ง ์คํผ๋ ์ธ์ฌ์ดํธ(PageSpeed Insights)๋ฅผ ํ์ฉํด ์ ์๋ฅผ ์ธก์ ํ๊ณ , ์๋กญ๊ฒ ์ถ๊ฐ๋ ์์๊ฐ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ์ ํดํ์ง ์๋์ง ์ ๊ฒํด์ผ ํฉ๋๋ค. ํต์ฌ ์ฝํ ์ธ ์ฐ์ ๋ก๋ฉ ์์น์ ์ค์ํ์ฌ SEO ๊ฒฝ์๋ ฅ์ ๊ฐํํ์๊ธฐ ๋ฐ๋๋๋ค.
ํ๋ซํผ ์ ์ฝ์ด ์๋ ํ๊ฒฝ์ผ์๋ก ์ฌ์ฉ์๊ฐ ํ ์ ์๋ ์ต์ ์ ์ต์ ํ๋ ๋ฆฌ์์ค์ ๋ก๋ฉ ์ฐ์ ์์๋ฅผ ์กฐ์ ํ์ฌ ์ฒด๊ฐ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ ๋๋ค.