# [[Cumulative Layout Shift (CLS)]] ## πŸ“Œ Brief Summary Cumulative Layout Shift(CLS)λŠ” μ›ΉνŽ˜μ΄μ§€κ°€ λ‘œλ“œλ˜λŠ” λ™μ•ˆ λ°œμƒν•˜λŠ” 예기치 μ•Šμ€ λ ˆμ΄μ•„μ›ƒμ˜ 이동(Layout Shift)을 μΆ”μ ν•˜μ—¬ μ‹œκ°μ  μ•ˆμ •μ„±(Visual Stability)을 μΈ‘μ •ν•˜λŠ” 핡심 μ›Ή λ°”μ΄νƒˆ(Core Web Vitals) μ§€ν‘œμž…λ‹ˆλ‹€ [1-3]. 이 μ§€ν‘œλŠ” ν…μŠ€νŠΈλ‚˜ λ²„νŠΌ 등이 κ°‘μžκΈ° 움직여 μ‚¬μš©μžκ°€ μ›μΉ˜ μ•ŠλŠ” μƒν˜Έμž‘μš©μ„ ν•˜κ²Œ λ˜λŠ” 정도λ₯Ό μˆ˜μΉ˜ν™”ν•˜λ©°, μš°μˆ˜ν•œ μ‚¬μš©μž κ²½ν—˜κ³Ό SEO μˆœμœ„ 확보λ₯Ό μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [4, 5]. 2025λ…„ ꡬ글 μ—…λ°μ΄νŠΈ κΈ°μ€€μœΌλ‘œ μš°μˆ˜ν•œ(Good) CLS μ μˆ˜λŠ” 0.1 μ΄ν•˜μ—μ„œ 0.08 미만으둜 λ”μš± μ—„κ²©ν•΄μ§€λŠ” μΆ”μ„Έμž…λ‹ˆλ‹€ [6-8]. ## πŸ“– Core Content **CLS의 μ€‘μš”μ„± 및 λΉ„μ¦ˆλ‹ˆμŠ€ 영ν–₯** * CLSλŠ” νŽ˜μ΄μ§€μ˜ μ‹œκ°μ  λΆˆμ•ˆμ •μ„±μ„ μˆ˜μΉ˜ν™”ν•œ κ²ƒμœΌλ‘œ, λΆˆμ•ˆμ •ν•œ λ ˆμ΄μ•„μ›ƒμ€ μ‚¬μš©μžμ˜ 신뒰도λ₯Ό μžƒκ²Œ ν•˜κ³  μ΄νƒˆλ₯ μ„ λ†’μ΄λŠ” μ£Όμš” μ›μΈμœΌλ‘œ μž‘μš©ν•©λ‹ˆλ‹€ [3, 5, 9]. * μ‹€μ œ μ„±λŠ₯ 데이터에 λ”°λ₯΄λ©΄, CLS 점수λ₯Ό 0.25μ—μ„œ 0.05둜 κ°œμ„ ν–ˆμ„ λ•Œ ν‰κ· μ μœΌλ‘œ μ „ν™˜μœ¨μ΄ 8% μ¦κ°€ν•˜κ³ , μ΄νƒˆλ₯ μ€ 10% κ°μ†Œν•˜λ©°, 수읡이 6% μ¦κ°€ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ μ„±κ³Όλ₯Ό λ³΄μ˜€μŠ΅λ‹ˆλ‹€ [10]. * 특히 λͺ¨λ°”일 ν™˜κ²½μ΄λ‚˜ 이컀머슀의 결제 흐름(checkout flow)μ—μ„œ λ ˆμ΄μ•„μ›ƒμ˜ 이동은 치λͺ…적인 μ‚¬μš©μž λΆˆλ§Œμ„ μ΄ˆλž˜ν•˜μ—¬ μ „ν™˜ 포기λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11]. **CLS 점수λ₯Ό μ €ν•˜μ‹œν‚€λŠ” μ£Όμš” 원인** * κ°€λ‘œ(width)와 μ„Έλ‘œ(height) 크기가 μ§€μ •λ˜μ§€ μ•Šμ€ 채 λ‘œλ“œλ˜λŠ” 이미지 및 λΉ„λ””μ˜€ [3, 12]. * κΈ°μ‘΄ μ½˜ν…μΈ μ˜ 상단에 λ™μ μœΌλ‘œ μ£Όμž…λ˜κ±°λ‚˜ λ’€λŠ¦κ²Œ λ‘œλ“œλ˜λŠ” κ΄‘κ³ , λ°°λ„ˆ 및 μ•Œλ¦Ό [3, 5]. * λ‘œλ“œ 속도가 느렀 FOIT(Flash of Invisible Text)λ‚˜ FOUT(Flash of Unstyled Text)λ₯Ό μœ λ°œν•˜λŠ” μ›Ή 폰트 [3, 5]. * λ ˆμ΄μ•„μ›ƒ λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” 잘λͺ»λœ CSS 속성(`top`, `left`, `width`, `height`)을 μ‚¬μš©ν•œ μ• λ‹ˆλ©”μ΄μ…˜ [3, 13]. **CLS μ΅œμ ν™” 및 ν•΄κ²° μ „λž΅** * **λͺ…μ‹œμ  크기 μ§€μ •:** λͺ¨λ“  이미지와 λΉ„λ””μ˜€ νƒœκ·Έμ— `width` 및 `height` 속성을 λͺ…μ‹œν•˜μ—¬ λΈŒλΌμš°μ €κ°€ λ Œλ”λ§ μ „ ν•„μš”ν•œ 곡간을 미리 ν™•λ³΄ν•˜κ²Œ ν•΄μ•Ό ν•©λ‹ˆλ‹€ [7, 12, 14]. * **동적 μ½˜ν…μΈ  곡간 μ˜ˆμ•½:** κ΄‘κ³  μŠ¬λ‘―μ΄λ‚˜ μž„λ² λ“œ μš”μ†Œκ°€ λ“€μ–΄κ°ˆ μžλ¦¬μ— `min-height`λ‚˜ μ’…νš‘λΉ„ λΉ„μœ¨(aspect-ratio)을 ν™œμš©ν•œ λ°•μŠ€λ₯Ό λ§Œλ“€μ–΄ 곡간을 미리 μ˜ˆμ•½ν•©λ‹ˆλ‹€ [7, 12, 14, 15]. * **μ›Ή 폰트 μ΅œμ ν™”:** CSS에 `font-display: swap` λ˜λŠ” `font-display: optional` 속성을 μ μš©ν•˜μ—¬ 폰트 λ‘œλ“œ μ‹œ λ°œμƒν•˜λŠ” μ‹œκ°μ  이동 및 ν…μŠ€νŠΈ μˆ¨κΉ€ ν˜„μƒμ„ λ°©μ§€ν•©λ‹ˆλ‹€ [7, 11-13]. * **μ•ˆμ „ν•œ μ• λ‹ˆλ©”μ΄μ…˜ μ‚¬μš©:** μš”μ†Œμ˜ μœ„μΉ˜λ‚˜ 크기λ₯Ό λ³€κ²½ν•  λ•Œ λ ˆμ΄μ•„μ›ƒ 계산을 νŠΈλ¦¬κ±°ν•˜λŠ” 속성 λŒ€μ‹ , `transform` (예: `transform: translateX()`) 속성을 μ‚¬μš©ν•˜μ—¬ GPU 가속을 ν™œμš©ν•˜κ³  λ ˆμ΄μ•„μ›ƒ λ³€ν™”λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [7, 13]. * **μ˜λ„μΉ˜ μ•Šμ€ μ½˜ν…μΈ  μ‚½μž… κΈˆμ§€:** μ‚¬μš©μž μƒν˜Έμž‘μš© 없이 기쑴에 λ Œλ”λ§ 된 μ½˜ν…μΈ μ˜ 상단(above existing content)에 μƒˆλ‘œμš΄ μ½˜ν…μΈ λ₯Ό λΌμ›Œ λ„£μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [7, 16]. * **λ Œλ”λ§ 격리:** CSS의 `contain` 속성(`contain: layout style paint`)을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • μœ„μ ―μ΄λ‚˜ μΉ΄λ“œμ˜ μŠ€νƒ€μΌ μž¬κ³„μ‚°μ΄ νŽ˜μ΄μ§€ μ „μ²΄μ˜ λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šλ„λ‘ κ²©λ¦¬ν•©λ‹ˆλ‹€ [17]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Core Web Vitals]], [[Largest Contentful Paint (LCP)]], [[Interaction to Next Paint (INP)]], [[Search Engine Optimization (SEO)]], [[User Experience (UX)]] - **Projects/Contexts:** [[Google Page Experience 2025 Update]], [[eCommerce Web Performance Optimization]] - **Contradictions/Notes:** 2025λ…„ κΈ°μ€€ CLS의 이상적인 λͺ©ν‘œμΉ˜(Threshold)에 λŒ€ν•΄ μ†ŒμŠ€ κ°„ μ•½κ°„μ˜ 차이가 μ‘΄μž¬ν•©λ‹ˆλ‹€. λ‹€μˆ˜μ˜ μ†ŒμŠ€λŠ” κΈ°μ‘΄ 기쀀인 "0.1 μ΄ν•˜"λ₯Ό μ—¬μ „νžˆ ꢌμž₯ κΈ°μ€€(Good)으둜 μ–ΈκΈ‰ν•˜κ³  μžˆμœΌλ‚˜ [2, 8, 18], λ‹€λ₯Έ μžλ£Œμ—μ„œλŠ” 2025λ…„ μ—…λ°μ΄νŠΈλ₯Ό 톡해 μž„κ³„κ°’μ΄ κΈ°μ‘΄ 0.1μ—μ„œ "0.08 미만"으둜 λ”μš± μ—„κ²©ν•˜κ²Œ λ³€κ²½λ˜μ—ˆλ‹€κ³  λͺ…μ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [6, 7]. --- *Last updated: 2026-04-26*