nextjs,tailwindcss,vercel

Address the Layout Shift Issues ํ•ด๊ฒฐ, ํŽ˜์ด์ง€ ์„ฑ๋Šฅ๊ณผ SEO ๊ฐœ์„ 

์ฃผ์˜ ๐Ÿฑ 2025. 2. 20. 16:28
728x90
๋ฐ˜์‘ํ˜•

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ SEO ๊ฐœ์„ 

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ SEO ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ๊ณผ ํšจ๊ณผ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ ์ดํ•ดํ•˜๊ธฐ

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ๋Š” ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๊ณผ์ •์—์„œ ์š”์†Œ๋“ค์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ด๋™ํ•˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„์  ๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ(CLS) ์ง€ํ‘œ๋Š” ์ด๋Ÿฌํ•œ ์‹œ๊ฐ์  ๋ถˆ์•ˆ์ •์„ฑ์„ ์ธก์ •ํ•˜๋ฉฐ, Google์€ ์ตœ์ ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด 0.1 ๋ฏธ๋งŒ์˜ ์ ์ˆ˜๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ:

  • ํฌ๊ธฐ๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ
  • ๋Šฆ๊ฒŒ ๋กœ๋“œ๋˜๋Š” ์›น ํฐํŠธ๋กœ ์ธํ•œ ํ…์ŠคํŠธ ์žฌ๋ฐฐ์น˜
  • ๋™์  ์ฝ˜ํ…์ธ  ์‚ฝ์ž… (๊ด‘๊ณ , ํŒ์—… ๋“ฑ)
  • ์„œ๋“œํŒŒํ‹ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ

์ฃผ์š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. ์ด๋ฏธ์ง€ ์ตœ์ ํ™”

 
<!-- ์ž˜๋ชป๋œ ์˜ˆ์‹œ -->
<img src="hero.jpg" alt="ํžˆ์–ด๋กœ ์ด๋ฏธ์ง€">

<!-- ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ -->
<img src="hero.jpg" width="800" height="400" alt="ํžˆ์–ด๋กœ ์ด๋ฏธ์ง€">
 
 

์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”. ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Š” ์ข…ํšก๋น„๋ฅผ ์กด์ค‘ํ•˜๋ฏ€๋กœ, CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฐ„์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

 
img { max-width: 100%; height: auto; aspect-ratio: attr(width) / attr(height); }

2. ํฐํŠธ ๋กœ๋”ฉ ์ „๋žต

 
<link rel="preload" href="fonts/custom-font.woff2" as="font" type="font/woff2" crossorigin>

ํฐํŠธ ๋กœ๋”ฉ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•:

  • ๋ถ€๋“œ๋Ÿฌ์šด ํ…์ŠคํŠธ ๋ Œ๋”๋ง์„ ์œ„ํ•ด font-display: swap ์‚ฌ์šฉ
  • ์ค‘์š” ํฐํŠธ ๋ฏธ๋ฆฌ ๋กœ๋“œ
  • ์ดˆ๊ธฐ ๋ Œ๋”๋ง์— ์‹œ์Šคํ…œ ํฐํŠธ ์‚ฌ์šฉ ๊ณ ๋ ค
  • ์„œ๋น„์Šค ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•œ ํšจ๊ณผ์ ์ธ ํฐํŠธ ์บ์‹ฑ

3. ์ฝ˜ํ…์ธ  ๊ณต๊ฐ„ ๊ด€๋ฆฌ

 
 
.ad-container {
  min-height: 250px;
  width: 100%;
}

๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ์œ„ํ•œ ํŒ:

  • ์ตœ์†Œ ํฌ๊ธฐ๋กœ ๊ณต๊ฐ„ ํ™•๋ณด
  • ์Šค์ผˆ๋ ˆํ†ค ๋กœ๋”ฉ ์ƒํƒœ ๊ตฌํ˜„
  • ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์†์„ฑ ๋Œ€์‹  CSS ๋ณ€ํ™˜ ์‚ฌ์šฉ

4. placeholder(ํ”Œ๋ ˆ์ด์Šคํ™€๋”) ๊ตฌํ˜„

 
 
function ArticleCard({ loading }) {
  if (loading) {
    return (
      <div className="article-skeleton">
        <div className="title-placeholder"></div>
        <div className="content-placeholder"></div>
      </div>
    );
  }
  
  return <Article />;
}

์„ฑ๋Šฅ ์ธก์ •

CLS ์ ์ˆ˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ:

  • Chrome DevTools ์„ฑ๋Šฅ ํŒจ๋„
  • Lighthouse ๊ฐ์‚ฌ
  • Chrome ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ณด๊ณ ์„œ์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ
  • Web Vitals JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์˜ˆ์‹œ

  1. ์˜ˆ์ธก ๋กœ๋”ฉ
 
// ์ค‘์š” ๋ฆฌ์†Œ์Šค ๋ฏธ๋ฆฌ ๋กœ๋“œ
document.head.innerHTML += `
  <link rel="preload" href="critical-image.jpg" as="image">
  <link rel="preload" href="main-font.woff2" as="font" type="font/woff2" crossorigin>
`;
  1. ์ฝ˜ํ…์ธ  ์šฐ์„ ์ˆœ์œ„ํ™”
 
 
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
  /* ์ค‘์š” CSS ์ธ๋ผ์ธ */
  .hero { min-height: 500px; }
</style>
 
  1. ๋ฐ˜์‘ํ˜• ๊ณต๊ฐ„ ๊ด€๋ฆฌ
.dynamic-content {
  contain: layout size;
  content-visibility: auto;
}

SEO์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

๋ ˆ์ด์•„์›ƒ ์•ˆ์ •์„ฑ ๊ฐœ์„ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • Core Web Vitals ์ ์ˆ˜ ํ–ฅ์ƒ
  • ํŽ˜์ด์ง€ ๋žญํ‚น ์ƒ์Šน
  • ์‚ฌ์šฉ์ž ์ฐธ์—ฌ๋„ ์ฆ๊ฐ€
  • ์ดํƒˆ๋ฅ  ๊ฐ์†Œ
  • ์ „ํ™˜์œจ ๊ฐœ์„ 

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ๋Š” ๋‹จ์ˆœํ•œ ์ง€ํ‘œ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜ํ…์ธ ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ๋ ˆ์ด์•„์›ƒ์€ ์‹ ๋ขฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜ํ…์ธ ์— ๋ถˆํŽธํ•จ ์—†์ด ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ๊ตฌํ˜„ํ•œ ํ›„์—๋„ CLS ์ ์ˆ˜๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์„ธ์š”. ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋‚˜ ๊ธฐ๋Šฅ์ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‹œํ”„ํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์™€ ์—ฐ๊ฒฐ ์†๋„์—์„œ์˜ ์ •๊ธฐ์ ์ธ ๊ฐ์‚ฌ์™€ ํ…Œ์ŠคํŠธ๋Š” ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์‹œํ”„ํŠธ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•จ์œผ๋กœ์จ ๊ธฐ์ˆ ์  ์ง€ํ‘œ๋ฅผ ๊ฐœ์„ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋” ์ „๋ฌธ์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์›น ๊ฒฝํ—˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ด€ํ–‰์€ ์ผํšŒ์„ฑ ์ˆ˜์ •์ด ์•„๋‹Œ ์ •๊ธฐ์ ์ธ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ผ๋ถ€๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›น ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ๋ ˆ์ด์•„์›ƒ ์•ˆ์ •์„ฑ์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ๊ณ ํ’ˆ์งˆ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 
 
๋ฐ˜์‘ํ˜•