Skip to content
SEO/seo-tips

๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ์ตœ์ ํ™”:๋ธ”๋กœ๊ทธ์—์„œ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ๊ด‘๊ณ  ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

๊ด‘๊ณ ์ง€์—ฐ ๋กœ๋”ฉ ์ตœ์ ํ™” Intersection Observer ๊ธฐ๋ฐ˜ ๊ด‘๊ณ 

๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜์‹œ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์„ Intersection Observer๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์›น ์„ฑ๋Šฅ๊ณผ Core Web Vitals๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ์‹ค์ „ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.


์ด๋ฒˆ๊ธ€์€ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์„ ํ†ตํ•ด ๊ฒ€์ƒ‰์ตœ์ ํ™”(LCP, CLS, FID)์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ด๊ณ , ๊ด‘๊ณ  ์ˆ˜์ต์„ ์ง€ํ‚ค๋ฉด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

1. Intersection Observer๋กœ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

๊ด‘๊ณ ๋ฅผ ์„ค์ •ํ• ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ๋ฐฉ๋ฒ•(์Šคํฌ๋กค ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜)์€ ๋นˆ๋ฒˆํ•œ ์ด๋ฒคํŠธ ํ˜ธ์ถœ๋กœ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ž‘์—…์„ ๋Š˜๋ฆฌ๊ณ , ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์„ Intersection Observer๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์š”์†Œ์˜ ๋ทฐํฌํŠธ ์ง„์ž… ์—ฌ๋ถ€๋ฅผ ๊ด€์ฐฐํ•˜๋ฏ€๋กœ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ถ€๋‹ด์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ์˜ ์Šคํฌ๋กค ์„ฑ๋Šฅ๊ณผ ์ „๋ฐ˜์ ์ธ ํŽ˜์ด์ง€ ๋ฐ˜์‘์„ฑ๋„ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

Intersection Observer๋Š” ์š”์†Œ๊ฐ€ ๋ทฐํฌํŠธ์˜ ์–ด๋А ์ง€์ ์— ๋“ค์–ด์˜ฌ ๋•Œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ , ๋ฏธ๋ฆฌ ์ •์˜๋œ ๋งˆ์ง„(์˜ˆ: rootMargin: '200px 0px')์— ๋„๋‹ฌํ•˜๋ฉด ๊ด‘๊ณ ๋ฅผ ๋กœ๋“œํ•˜๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ๊ด‘๊ณ ๋ฅผ ๋ณด๊ธฐ ์ง์ „์—๋งŒ ๊ด‘๊ณ ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์˜ ์ด์ ์˜ ํšจ๊ณผ๋ฅผ ๋…ธ๋ฆด์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1-1. ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ํ•ต์‹ฌ ๊ตฌํ˜„ ํŒจํ„ด

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ด‘๊ณ ๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ์ง€์ ์— ๊ด‘๊ณ  ์Šฌ๋กฏ์€ ํ”Œ๋ ˆ์ด์Šคํ™€๋”(๊ด‘๊ณ ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋นˆ์œ„์น˜)๋กœ ๋‚จ๊ฒจ๋‘๊ณ , ๊ด‘๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋กœ๋“œ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

div id="ad-slot-1" class="ad-lazy-load" data-ad-ready="false"/div

๊ด‘๊ณ ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ชฝ์—์„œ๋Š” Observer ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ณ , ์ฝœ๋ฐฑ์—์„œ ์š”์†Œ๊ฐ€ ๊ต์ฐจํ•˜๋ฉด ์‹ค์ œ ๊ด‘๊ณ  ๋กœ๋”ฉ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:.

๊ด‘๊ณ  ๋กœ๋“œ ์‹œ์  ์ œ์–ด, ์ค‘๋ณต ๋กœ๋“œ ๋ฐฉ์ง€, ํด๋ฐฑ ์ฒ˜๋ฆฌ ์šฉ์ด์„ฑ. ์š”์•ฝํ•˜๋ฉด, ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์€ ๊ด‘๊ณ  ํ˜ธ์ถœ ๋น„์šฉ์„ ์‹ค์‚ฌ์šฉ์ž ์‹œ์ ์— ๋งž์ถฐ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ์„ธ๋ถ€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• (ํ•ต์‹ฌ ์ฝ”๋“œ ๊ฐœ์š”)

๋ธ”๋กœ๊ทธ๋‚˜ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ์€ observerCallback์—์„œ entry.isIntersecting๊ฐ€ true์ผ ๋•Œ loadAd๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์„ฑ๊ณต ์‹œ observer.unobserve๋ฅผ ํ˜ธ์ถœํ•ด ์ถ”๊ฐ€ ๊ด‘๊ณ  ๋กœ๋“œ ์‹œ์ ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ๋ฒˆ ๋กœ๋“œ๋œ ์Šฌ๋กฏ์ด ๋ฐ˜๋ณต ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์ „์ฒด ํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Intersection Observer ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ํ•ต์‹ฌ ๋น„๊ต
ํ•ญ๋ชฉ ์Šคํฌ๋กค ์ด๋ฒคํŠธ ๋ฐฉ์‹ Intersection Observer ๋ฐฉ์‹
๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ถ€ํ•˜ ๋†’์Œ ๋‚ฎ์Œ
์ •ํ™•์„ฑ ์Šคํฌ๋กค ๋นˆ๋„์— ์˜์กด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ ๊ด€์ฐฐ
ํด๋ฐฑ ์ฒ˜๋ฆฌ ์ง์ ‘ ๊ตฌํ˜„ ํ•„์š” ๋น„์ง€์› ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ํด๋ฐฑ ํ•„์š”

์•„๋ž˜๋Š” ํ•ต์‹ฌ ์˜ต์…˜ ๊ถŒ์žฅ๊ฐ’์ž…๋‹ˆ๋‹ค:

root์€ null๋กœ(๋ทฐํฌํŠธ), rootMargin์€ '200px 0px' ๊ถŒ์žฅ, threshold๋Š” 0.01. ์ด ์„ค์ •์€ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์†Œ๋ฅผ ๋ณด๊ธฐ ์ „ ์•ฝ๊ฐ„์˜ ์—ฌ์œ ๋ฅผ ๋‘๊ณ  ๊ด‘๊ณ ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ดˆ๊ธฐ LCP ์˜ํ–ฅ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์„ ํ†ตํ•ด ์ฒซ ํ™”๋ฉด ๋ Œ๋”๋ง ๋ถ€๋‹ด์„ ์ค„์ด๋ฉด์„œ ๊ด‘๊ณ  ์ „ํ™˜ ๊ฐ€๋Šฅ์„ฑ์€ ์šฉ์˜ํ•˜๊ฒŒ ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ด‘๊ณ  ๋กœ๋“œ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ ํ”Œ๋ž˜๊ทธ(์˜ˆ: data-ad-ready)๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ฅผ ์ ์ ˆํžˆ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๊ต์ฒดํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ›„์† ์ฒ˜๋ฆฌ๋Š” UI ์ „ํ™˜ ์‹œ ํด๋ฆฌํ‚น ๊ฒฝํ—˜(UX)์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ๊ด‘๊ณ ๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „ํ›„์˜ ๋†’์ด ๋ณ€ํ™”๋Š” CLS(๋ˆ„์  ๋ ˆ์ด์•„์›ƒ ์ด๋™)๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋Š” ๊ณ ์ •๋œ ๋†’์ด๋ฅผ ๊ฐ–๋„๋ก ์Šคํƒ€์ผ๋ง(CSS ์ ์šฉ)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ด‘๊ณ  ์ตœ์ ํ™”-๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ

3. ๊ด‘๊ณ  ์„ฑ๋Šฅ์•ˆ์ •์„ฑ์ˆ˜์ต ๊ฐ„ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

๊ด‘๊ณ ๋ฅผ ์™„์ „ํžˆ ์ง€์—ฐํ•˜๋ฉด ํŽ˜์ด์ง€ ์„ฑ๋Šฅ์€ ๊ฐœ์„ ๋˜์ง€๋งŒ ๊ด‘๊ณ  ๋…ธ์ถœ ๊ธฐํšŒ๊ฐ€ ์ค„์–ด๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ๊ตฌํ˜„ ์‹œ์—๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๊ฐ’์„ ๊ท ํ˜• ์žˆ๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ๋กœ๋”ฉ ์‹œ์ (์ง€์—ฐ ์‹œ๊ฐ„): rootMargin์„ ์‚ฌ์šฉํ•ด ๋ทฐํฌํŠธ ์ง„์ž… ๋ช‡ ํ”ฝ์…€ ์ „์— ๋กœ๋“œํ• ์ง€ ๊ฒฐ์ •ํ•˜์„ธ์š”. ๋„ˆ๋ฌด ๋Šฆ์œผ๋ฉด ๊ด‘๊ณ ๊ฐ€ ํ‘œ์‹œ๋  ๊ธฐํšŒ๋ฅผ ๋†“์น˜๊ณ , ๋„ˆ๋ฌด ์ด๋ฅด๋ฉด LCP์— ์˜ํ–ฅ์ด ํฝ๋‹ˆ๋‹ค.
  • ํ”Œ๋ ˆ์ด์Šคํ™€๋” ์„ค๊ณ„: ๊ณ ์ • ๋†’์ด ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ฅผ ์‚ฌ์šฉํ•ด CLS๋ฅผ ๋ฐฉ์ง€ํ•˜์„ธ์š”. ๊ด‘๊ณ  ๋กœ๋“œ ํ›„ ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์น˜ํ™˜ํ•˜๋ฉด UX๊ฐ€ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ํด๋ฐฑ ์ „๋žต: IntersectionObserver ๋ฏธ์ง€์› ๋ธŒ๋ผ์šฐ์ €์— ๋Œ€ํ•œ ์ฆ‰์‹œ ๋กœ๋“œ ๋˜๋Š” ํƒ€์ด๋จธ ๊ธฐ๋ฐ˜ ๋กœ๋“œ ํด๋ฐฑ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ์ด๋Š” ์ˆ˜์ต ์†์‹ค์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

4. ๊ด‘๊ณ  ์ตœ์ ํ™” ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋‹ค์Œ์€ ์šด์˜ ์ค‘ ๋ฐ˜๋“œ์‹œ ์ ๊ฒ€ํ•ด์•ผ ํ•  ์ฒดํฌ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์€ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์˜ ์•ˆ์ •์„ฑ๊ณผ ์ˆ˜์ต์„ฑ ํ™•๋ณด์— ์ง๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์šด์˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Intersection Observer ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ)
์ ๊ฒ€ ํ•ญ๋ชฉ ๊ถŒ์žฅ ํ–‰๋™ ์šฐ์„ ๋„
ํ”Œ๋ ˆ์ด์Šคํ™€๋” ๋†’์ด ๊ด‘๊ณ  ์Šฌ๋กฏ์˜ ๊ณ ์ • ๋†’์ด ์ง€์ • ๋†’์Œ
rootMargin ์„ค์ • '100px~300px' ๋ฒ”์œ„์—์„œ A/B ํ…Œ์ŠคํŠธ ์ค‘
๋ฐ์ดํ„ฐ ์†์„ฑ ๊ด€๋ฆฌ data-ad-ready๋กœ ์ƒํƒœ ๊ด€๋ฆฌ ๋†’์Œ
์˜ค๋ฅ˜ ๋กœ๊น… ๋กœ๋“œ ์‹คํŒจ ์‹œ ํด๋ฐฑ ๋ฐ ๋กœ๊ทธ ๊ธฐ๋ก ์ค‘

5. ์ฝ”๋“œ ํ†ตํ•ฉ ๋ฐ ๋ชจ๋“ˆํ™” ๊ถŒ์žฅ ํŒจํ„ด

์‚ฌ์ดํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๊ด‘๊ณ  ๋กœ๋”๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ BlogApp์ด๋‚˜ SiteCore์˜ ์ผ๋ถ€๋กœ ํ†ตํ•ฉํ•˜์„ธ์š”. ๋ชจ๋“ˆํ™” ์‹œ ๋‹ค์Œ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค:

์ดˆ๊ธฐํ™”(init)์—์„œ Observer๋ฅผ ์„ค์ •, adLoader ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋…ธ์ถœ, fail-safe(๋„คํŠธ์›Œํฌ ์‹คํŒจ ์‹œ ์ •์  ์ปจํ…์ธ  ํ‘œ์‹œ) ํฌํ•จ. ์˜ˆ์‹œ: BlogApp.adLoader.initObserver()๋ฅผ DOMContentLoaded ๋˜๋Š” SPA ๋ผ์šฐํŠธ ๋ณ€๊ฒฝ ์‹œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์šด์˜ ์ค‘ ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™” ํŒ์ž…๋‹ˆ๋‹ค:

  1. ์ค‘์š” ๊ด‘๊ณ  ์Šฌ๋กฏ(์˜ˆ: ์ฒซ ํ™”๋ฉด ์ƒ๋‹จ)์€ rootMargin์„ ์ž‘๊ฒŒ ํ•˜์—ฌ ์šฐ์„  ๋กœ๋“œ.
  2. ๋น„ํ•ต์‹ฌ ๊ด‘๊ณ  ์Šฌ๋กฏ์€ ํฐ rootMargin ๋˜๋Š” ์ง€์—ฐ ์‹œ๊ฐ„ ์„ค์ •์œผ๋กœ ๋น„์šฉ ์ ˆ๊ฐ.
  3. ๋ทฐํฌํŠธ ๋‚ด์—์„œ ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ€๋Š” ์˜์—ญ(์˜ˆ: ์Šค์™€์ดํ”„ ์‹œ)์ด ์žˆ๋‹ค๋ฉด threshold๋ฅผ ์กฐ์ •ํ•ด ๊ณผ๋„ํ•œ ๋กœ๋“œ๋ฅผ ๋ฐฉ์ง€.

๊ตฌํ˜„ ์‹œ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•  ์ : ๊ด‘๊ณ  ๋„คํŠธ์›Œํฌ์˜ ๋น„๋™๊ธฐ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์ด๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ๋ธ”๋กœํ‚น์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋„๋ก async ๋˜๋Š” defer๋กœ ๋กœ๋“œํ•˜๊ณ , ๊ด‘๊ณ  ํ˜ธ์ถœ์€ ๊ฐ€๋Šฅํ•œ ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์„ธ์š”. ๋˜ํ•œ, ๊ด‘๊ณ  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ DOM์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•œ iframe์„ ์‚ฝ์ž…ํ•  ๋•Œ ๋†’์ด์™€ ๋„ˆ๋น„๊ฐ€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋„๋ก ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด CLS๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5-1. ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ A/B ํ…Œ์ŠคํŠธ

๋ธ”๋กœ๊ทธ์— ๊ด‘๊ณ  ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ฐ˜๋“œ์‹œ A/B ํ…Œ์ŠคํŠธ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ๊ฒ€์ฆํ•˜์„ธ์š”. ๊ด€์‹ฌ ์ง€ํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: LCP, CLS, FCP(First Contentful Paint), ๊ด‘๊ณ ๋ทฐ(views), ํด๋ฆญ๋ฅ (CTR), RPM. ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ์ ์šฉ ์ „ํ›„์˜ ์ง€ํ‘œ๋ฅผ ๋น„๊ตํ•ด ๋กœ๋“œ ์‹œ์ (rootMargin/threshold) ์กฐํ•ฉ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

5-2. ๊ด‘๊ณ  ์ตœ์ ํ™” ๊ตฌํ˜„ ์ƒ˜ํ”Œ

์š”์•ฝํ•˜๋ฉด ๊ตฌํ˜„ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(1) ์Šฌ๋กฏ ๋งˆํฌ์—… ์ค€๋น„ (2) Intersection Observer ์ดˆ๊ธฐํ™” (3) entry.isIntersecting ์‹œ loadAd ํ˜ธ์ถœ (4) ๋กœ๋“œ ์„ฑ๊ณต ์‹œ observer.unobserve ๋ฐ data-ad-ready ์—…๋ฐ์ดํŠธ (5) ์˜ค๋ฅ˜ ์‹œ ํด๋ฐฑ ์ฒ˜๋ฆฌ.
!-- [1] ๊ด‘๊ณ  ์ปจํ…Œ์ด๋„ˆ (HTML) --
div id="ad-slot-1" class="ad-lazy-load" data-ad-ready="false"/div
div id="ad-slot-2" class="ad-lazy-load" data-ad-ready="false"/div

script
/
* Intersection Observer ๊ธฐ๋ฐ˜ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ (Lazy Loading)
*/
(() = {
const adLoader = {
observerOptions: {
root: null, // ๋ทฐํฌํŠธ๋ฅผ ๊ธฐ์ค€
rootMargin: '200px 0px', // 200px ์ „ ๋ฏธ๋ฆฌ ๋กœ๋“œ
threshold: 0.01 // 1% ๋ณด์ด๋ฉด ํŠธ๋ฆฌ๊ฑฐ
},

observerCallback(entries, observer) {
entries.forEach(entry = {
if (entry.isIntersecting) {
const adSlot = entry.target;
adLoader.loadAd(adSlot.id);
observer.unobserve(adSlot); // ํ•œ ๋ฒˆ ๋กœ๋“œ ํ›„ ๊ด€์ฐฐ ์ค‘๋‹จ
}
});
},

loadAd(adSlotId) {
const adSlot = document.getElementById(adSlotId);
if (!adSlot || adSlot.dataset.adReady === 'true') return;

// ์‹ค์ œ ๊ด‘๊ณ  ๋กœ๋“œ ์ฝ”๋“œ (AdSense ์˜ˆ์‹œ)
const ins = document.createElement('ins');
ins.className = 'adsbygoogle';
ins.style.display = 'block';
ins.setAttribute('data-ad-client', 'ca-pub-XXXXXXXXXXXXXXX'); // โ–ถ ์ž์‹ ์˜ ID ์ž…๋ ฅ
ins.setAttribute('data-ad-slot', '1234567890'); // โ–ถ ๊ด‘๊ณ  ์Šฌ๋กฏ ID
ins.setAttribute('data-ad-format', 'auto');
ins.setAttribute('data-full-width-responsive', 'true');
adSlot.appendChild(ins);

try {
(adsbygoogle = window.adsbygoogle || []).push({});
console.log(`Lazy Loaded Ad: ${adSlotId}`);
} catch (e) {
console.warn(`๊ด‘๊ณ  ๋กœ๋“œ ์‹คํŒจ: ${adSlotId}`, e);
}

adSlot.dataset.adReady = 'true';
},

initObserver() {
const slots = document.querySelectorAll('.ad-lazy-load[data-ad-ready="false"]');
if (!('IntersectionObserver' in window)) {
console.log('IntersectionObserver ๋ฏธ์ง€์› ๋ธŒ๋ผ์šฐ์ €: ๋ชจ๋“  ๊ด‘๊ณ  ์ฆ‰์‹œ ๋กœ๋“œ');
slots.forEach(slot = adLoader.loadAd(slot.id));
return;
}

const observer = new IntersectionObserver(adLoader.observerCallback, adLoader.observerOptions);
slots.forEach(slot = observer.observe(slot));
console.log(`๊ด‘๊ณ  ${slots.length}๊ฐœ ๊ด€์ฐฐ ์‹œ์ž‘`);
}
};

// ํŽ˜์ด์ง€ ๋กœ๋“œ ์™„๋ฃŒ ์‹œ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ ์ดˆ๊ธฐํ™”
window.addEventListener('load', () = adLoader.initObserver());
})();
/script

๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์€ ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ ์  ํŠธ๋ฆญ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)๊ณผ ์ˆ˜์ต์„ฑ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ์ „๋žต์  ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์€ LCP๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ํ˜ธ์ถœ์„ ์ค„์ด๋ฉฐ, ์‚ฌ์šฉ์ž ์ดํƒˆ์„ ๋‚ฎ์ถฐ ๊ถ๊ทน์ ์œผ๋กœ ์ˆ˜์ต ์•ˆ์ •ํ™”์— ๊ธฐ์—ฌํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜์ž ์ž…์žฅ์—์„œ๋Š” ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์˜ ์ ์ ˆํ•œ rootMargin ์„ค์ •, ํ”Œ๋ ˆ์ด์Šคํ™€๋” ๋†’์ด ํ™•๋ณด, ํด๋ฐฑ ์ฒ˜๋ฆฌ ์„ธ ๊ฐ€์ง€๋ฅผ ์ฒ ์ €ํžˆ ๊ด€๋ฆฌํ•ด ๋ณด์„ธ์š”!


Q1: Intersection Observer๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋‚˜์š”?

A1: Intersection Observer ๋ฏธ์ง€์› ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•ด ํด๋ฐฑ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ํด๋ฐฑ ์˜ˆ์‹œ๋กœ๋Š” ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ ๋ชจ๋“  ๊ด‘๊ณ ๋ฅผ ์ฆ‰์‹œ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜, ์ผ์ • ์‹œ๊ฐ„(์˜ˆ: 2์ดˆ) ํ›„์— ๊ด‘๊ณ ๋ฅผ ๋กœ๋“œํ•˜๋Š” ํƒ€์ด๋จธ ๊ธฐ๋ฐ˜ ๋กœ์ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‚ฌ์šฉ์ž์˜ ์—์ด์ „ํŠธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์กฐ๊ฑด๋ถ€๋กœ ํด๋ฐฑ ํ–‰๋™์„ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Q2: ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์ด ๊ด‘๊ณ  ์ˆ˜์ต์— ์•…์˜ํ–ฅ์„ ์ฃผ์ง„ ์•Š๋‚˜์š”?

A2: ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •๋œ ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์€ ๋…ธ์ถœ ๊ธฐํšŒ๋ฅผ ์ง€๋‚˜์น˜๊ฒŒ ์ค„์ด์ง€ ์•Š์œผ๋ฉด์„œ๋„ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ rootMargin๊ณผ threshold๋ฅผ ์กฐ์ ˆํ•˜์—ฌ '๋ณด์—ฌ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์‹œ์ '์— ๊ด‘๊ณ ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. A/B ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Q3: ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋กœ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ CLS๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A3: ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋Š” ๊ด‘๊ณ ๊ฐ€ ์ฐจ์ง€ํ•  ์ •ํ™•ํ•œ ๊ณต๊ฐ„(๋†’์ด/๋„ˆ๋น„)์„ ์‚ฌ์ „์— ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์ •๋œ ๋†’์ด ๊ฐ’์„ CSS๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๋น„์œจ ๊ธฐ๋ฐ˜ ๋ฐ•์Šค(์˜ˆ: aspect-ratio)๋กœ ๊ณต๊ฐ„์„ ์˜ˆ์•ฝํ•˜๋ฉด ๊ด‘๊ณ  ๋กœ๋“œ ์ „ํ›„์˜ ๋ ˆ์ด์•„์›ƒ ๋ณ€๋™์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝ ๊ฐ•์กฐ: ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์˜ ์„ฑ๊ณต ํฌ์ธํŠธ๋Š” ์ •ํ™•ํ•œ ๋กœ๋“œ ์‹œ์ , ์•ˆ์ •์  ํ”Œ๋ ˆ์ด์Šคํ™€๋”, ์‹ ์†ํ•œ ํด๋ฐฑ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ๊ฒ€ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋ฉด, ๊ด‘๊ณ  ์ง€์—ฐ ๋กœ๋”ฉ์€ ํŽ˜์ด์ง€ ์„ฑ๋Šฅ๊ณผ ๊ด‘๊ณ  ์ˆ˜์ต ๋ชจ๋‘์— ๊ธ์ •์  ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Latest in this category

    ์ฟ ํŒกํŒŒํŠธ๋„ˆ์Šค API V2 ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์‹ ์ƒํ’ˆ ๋ฐ ์ธ๊ธฐ์ƒํ’ˆ์ด ์ž๋™ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

    AI ์ฑ—๋ด‡์œผ๋กœ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉˆ์ถค
    ๋…ธ๋ž˜ ์žฌ์ƒ ๋ฉˆ์ถค