ํฐ์คํ ๋ฆฌ ๋ฐฉ๋ฌธ์ ์ ์กฐ์, AI SEO ํ๊ฒฝ์ ์น๋ช ์ ์ํ์ฑ ๋ถ์
๋ฎ์ ํธ๋ํฝ ๋ ธ์ถ์ด ํด๋ฆญ์ ๋ง๋ ์ด์ ๋ฅผ ์ค๋ช ํ๊ณ , ์กฐ์ ๋์ E-E-A-T ๊ธฐ๋ฐ ์ฝํ ์ธ UX ๊ฐ์ ์ผ๋ก ์ค์ ๊ฒ์ ๋ ธ์ถ๊ณผ ์ ๋ขฐ๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
๋ธ๋ก๊ทธ๋ฅผ ๋ง ์์ํ๊ฑฐ๋ ๋ฆฌ๋ธ๋๋ฉ์ ๋ง์น ๋ธ๋ก๊ฑฐ๋ค์ด ๋ฐฉ๋ฌธ์ ์๋ฅผ ๋ ธ์ถํ๊ฒ ๋๋ฉด ์ง๋ฉดํ๋ ๊ฐ์ฅ ํฐ ์ฌ๋ฆฌ์ ํ๋ค์๋ฐฉ๋ฌธ์์(ํธ๋ํฝ)์ ์ด๋ผํ ์ด๊ธฐ๋ธ๋ก๊ทธ ๋ฐฉ๋ฌธ์ ์์ ๋๋ค.
์ด์ฒ๋ผ ๋ฎ์ ๋ฐฉ๋ฌธ์ ์ซ์๋ ๋จ์ํ ํต๊ณ๋ฅผ ๋์ด, ๋ฐฉ๋ฌธ์๋ค์๊ฒ "์ด ๋ธ๋ก๊ทธ๋ ์์ง ํ์ฑํ๋์ง ์์๊ฑฐ๋" ๋๋ "์ ๋ณด์ ๊ฐ์น๊ฐ ๋ฎ๋ค"๋ ๋ฌด์์์ ์ธ ์ธ์์ ์ฌ์ด์ฃผ๋ ์ฌ๋ฆฌ์ ์ง์ ์ฅ๋ฒฝ์ด์ ์ฝํ ์ธ ์๋น๋ฅผ ๊ฐ๋ก๋ง๋ ์ฅ์ ๊ฐ ๋ฉ๋๋ค.
์ด๋ฌํ ์ฌ๋ฆฌ์ ์๋ฐ์ ์ฌํ์ ์ฆ๊ฑฐ(Social Proof)์ ๋ถ์ฌ๋ก ์ธํด ๋ฐ์ํ๋ ํ์์ ๋๋ค. ์ฌ๋๋ค์ ๋ค์๊ฐ ๋ฐ๋ฅด๊ณ ๊ฒ์ฆ๋ ์ ๋ณด๋ฅผ ๋ ์ ๋ขฐํฉ๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์ผ๋ถ ๋ธ๋ก๊ฑฐ๋ค์ ๋ฎ์ ๋ฐฉ๋ฌธ์ ์์น๋ฅผ ์ธ์์ ์ผ๋ก ๋์ฌ ๋ธ๋ก๊ทธ์ ๋ํ ์ ๋ขฐ๋์ ํ์ฑํ๋ ์ธ์์ ์ฌ์ด์ฃผ๊ธฐ ์ํดํฐ์คํ ๋ฆฌ ๋ฐฉ๋ฌธ์ ์ ์กฐ์์ด๋ผ๋ ์ ๋ต์ ํ๋ก ํธ์๋ ์์ ์ ์๋ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฒ ๊ธ์ ์ด๋ฌํ ํฐ์คํ ๋ฆฌ ๋ฐฉ๋ฌธ์ ์ ์กฐ์์ด ์ ๋จ๊ธฐ์ ์ผ๋ก ์ ํน์ ์ด์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก๋ ๋ธ๋ก๊ทธ๋ฅผ ๋ง์น๋ ํด๋ก์ด ์ ํ์ธ์ง, ๊ทธ ๊ธฐ์ ์ ๋ฐฐ๊ฒฝ, ์ฌ๋ฆฌ์ ๋๊ธฐ, ๊ทธ๋ฆฌ๊ณ ํ๋ AI ๋ฐ SEO ํ๊ฒฝ์์์ ์น๋ช ์ ์ธ ์ํ์ฑ, ๊ทธ๋ฆฌ๊ณ ์์ ํ๊ณ ํจ๊ณผ์ ์ธ SEO ๊ธฐ๋ฐ ๋์ ๋ฐฉ๋ฒ๊น์ง ์ข ํฉ์ ์ผ๋ก ๋ถ์ํฉ๋๋ค.
๊ธฐ์ ์ ๊ตฌ์กฐ์ ์ฌ๋ฆฌ์ ๊ธฐ์ ๋ถ์: ๋ฐฉ๋ฌธ์ ์นด์ดํฐ ์กฐ์์ ์๋ ์๋ฆฌ
ํฐ์คํ ๋ฆฌ ๋ฐฉ๋ฌธ์ ์ ์กฐ์์ ๋ธ๋ก๊ทธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ตฌ์กฐ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ทจ์ฝ์ ๊ณผ ์ธ๊ฐ์ ์ฌ๋ฆฌ์ ์ทจ์ฝ์ฑ์ด ๊ฒฐํฉ๋ ์ง์ ์์ ๋ฐ์ํฉ๋๋ค.
1. ํฐ์คํ ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์ทจ์ฝ์
ํฐ์คํ ๋ฆฌ์ ๋ฐฉ๋ฌธ์ ์นด์ดํฐ์ ๋ฐฉ๋ฌธ์ ๊ทธ๋ํ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋(Client-Side), ์ฆ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ JavaScript๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๊ณ ๊ทธ๋ ค์ง๋ค๋ ์ฌ์ค์ด ์กฐ์์ ๊ธฐ์ ์ ๊ทผ๊ฑฐ๊ฐ ๋ฉ๋๋ค. ์ด๋ ์๋ฒ์์ ์ต์ข ๋ ๋๋ง๋๋ ๊ฒ์ด ์๋๋๋ค.
| ๊ตฌ์ฑ ์์ | ์ญํ | ์กฐ์ ๊ฐ๋ฅ์ฑ ๋ฐ ์ทจ์ฝ์ |
|---|---|---|
window.chartData |
์ง๋ 7์ผ๊ฐ์ ๋ฐฉ๋ฌธ์ ์นด์ดํธ ๋ฐ์ดํฐ(Timestamp์ count ๋ฐฐ์ด)๋ฅผ ๋ด๋ ์ ์ญ JavaScript ๊ฐ์ฒด. | GTM(Google Tag Manager) ๋ฑ์ ์ธ๋ถ ์คํฌ๋ฆฝํธ์์ ์ธ์ ๋ ์ง ์ ๊ทผํ์ฌ ๋ด์ฉ์ ์์ ํ ์ ์์ต๋๋ค. |
| DOM ํ ์คํธ ์์ | .total, .Today, .Yesterday์ ๊ฐ์ด ๋ฐฉ๋ฌธ์ ์๋ฅผ ํ์ํ๋ HTML ์์. |
Tistory ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋ ํ ์ต์ข ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๊ฐ์ ์ ์ผ๋ก Mock ๋ฐ์ดํฐ๋ก ๋ฎ์ด์์ธ ์ ์์ต๋๋ค. (*Race Condition* ์ ๋ฐ) |
2. GTM์ ํ์ฉํ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ด ๋ฐฉ๋ฒ
๊ตฌ๊ธ ํ๊ทธ ๋งค๋์ (Google Tag Manager(GTM))์ ๋ง์ถค HTML ๊ธฐ๋ฅ์ ํ์ฉํ ๋ฐฉ๋ฌธ์ ์กฐ์ ๋ฐฉ๋ฒ์ ํฐ์คํ ๋ฆฌ(Tistory)์ ๋น๋๊ธฐ ๋ก๋ฉ ๋ฉ์ปค๋์ฆ์ ์ญ์ด์ฉํ์ฌ, ์กฐ์๋ ๋ฐฉ๋ฌธ์ ์(Mock) ๋ฐ์ดํฐ๊ฐ ์ต์ข ์ ์ผ๋ก ํ๋ฉด์ ๋ฐ์๋๋๋ก ํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ์์ ์กฐ์ ์ฝ๋๋ฅผ ๋ณธ๋ฌธ์ด๋ ์คํจ์ ์ง์ ๋ ธ์ถํ์ง ์์ผ๋ฉด์ ์คํ๋ ์ ์์ต๋๋ค.

์ฆ, ๋ธ๋ก๊ทธ์ ๊ตฌ๊ธ ํ๊ทธ ๋งค๋์ ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, '์จ๊ธฐ๊ณ ์ถ์ ์ฝ๋'๊ฐ ์ฝ์ ๋์ด ์์ ๊ฐ๋ฅ์ฑ์ ์ผ๋์ ๋ ํ์๊ฐ ์์ต๋๋ค.์๋ ๋ฐฉ์๋ ๊ตฌ๊ธ ํ๊ทธ๋งค๋์ ๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์๋ณธ ๋ฐ์ดํฐ ์์ฒ ๋ด์: Tistory๊ฐ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์
ํ๋
scriptํ๊ทธ ์์ฒด๋ฅผ DOM์์ ์ ๊ฑฐํ์ฌ ๋ฐ์ดํฐ ๊ฒฝ์์ ๋ง์ต๋๋ค. - ๋ฐ์ดํฐ ์ ์ ๋ฐ ์ค๋น: LocalStorage์ Mock ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฐ์์ ๋์ ์ด ๋ฐฉ๋ฌธ์ ๊ธฐ์ค์ ๊ณผ 7์ผ์น ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ์ฌ์ ์ ๋ก๋ํฉ๋๋ค.
- ์ฐจํธ ์ธ์คํด์ค ํฌํ (MutationObserver): MutationObserver๋ฅผ ์ด์ฉํด DOM ๋ณํ๋ฅผ ๊ฐ์ํ๊ณ , Tistory์ ์ฐจํธ ์ธ์คํด์ค($Chart.js$)๊ฐ ์์ฑ๋๋ ์๊ฐ ์ด๋ฅผ ์์ ํ๊ฒ ํ๋ณดํ์ฌ ๋ฐ์ดํฐ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ์ค๋นํฉ๋๋ค.
- ๊ฐ์ ๋ฐ์ดํฐ ๋ฎ์ด์ฐ๊ธฐ: ํ๋ณด๋ ์ฐจํธ ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ค๋น๋ Mock ๋ฐ์ดํฐ๋ก ๊ฐ์ ๋ก ๊ต์ฒดํ๊ณ ์ฆ๊ฐ์ ์ธ ์ ๋ฐ์ดํธ๋ฅผ ์ ๋ํฉ๋๋ค.
- ์ค์๊ฐ ์ฆ๋ถ ๋ฐ ๋๊ธฐํ: 'Today' ์นด์ดํธ๋ ์ค์๊ฐ์ผ๋ก ๋๋คํ ๊ฐ๋งํผ ๊ณ์ ์ฆ๊ฐํ๋๋ก ์ค์ ํ์ฌ ํ์ฑํ๋ ์ธ์์ ์ฐ์ถํ๊ณ , ์ด ๊ฐ์ DOM ํ ์คํธ ์์์ ์ฐจํธ ๋ฐ์ดํฐ, LocalStorage์ ์ง์์ ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
์ค์ ์ ์ฉํ ํ ์คํธ ๋ธ๋ก๊ทธ ๋งํฌ์ ๋๋ค.
3. ๊ธฐํ ๋ธ๋ก๊ทธ ํธ๋ํฝ ์กฐ์ ๋ฐฉ๋ฒ
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์กฐ์ ์ธ์๋ ๊ณผ๊ฑฐ๋ถํฐ ์๋๋์๋ ๋ค์ํ ํธ๋ํฝ ์กฐ์ ๋ฐฉ์๋ค์ ํ๋ ๊ฒ์ ์์ง ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ๋ํ๋ ๊ฐ์ง ์์คํ ์์์๋ ๋ฌด์ฉ์ง๋ฌผ์ด๋ฉฐ, ๋ธ๋ก๊ทธ๋ฅผ ์ ํ์ง ๋ช์ผ๋ก ๋น ๋จ๋ฆฌ๋ ์น๋ช ์ ์ธ ์ํ์ ์ด๋ํฉ๋๋ค.

| ์กฐ์ ๋ฐฉ์ | ์๋ ์๋ฆฌ ๋ฐ ํน์ง | AI/SEO ํ๊ฒฝ์์์ ์น๋ช ์ ๋ฌธ์ ์ |
| ๊ถ์ ์๋ ์ฌ์ดํธ ์ฐํ ํธ๋ํฝ ์ ๋ฐ | ํฉ๋ฒ์ ์ธ ๋ญํน ์์๋ฅผ ์ฐํํ์ฌ ํธ๋ํฝ ์ถ์ฒ๋ฅผ ์์ด๋ ค๋ ์๋. | ํธ๋ํฝ ์ถ์ฒ ๋ฐ ์ง ๋ถ์์ ๊ณ ๋ํ: Google์ ๋ญํน ์์คํ ์ ์ด๋ฌํ ์ฐํ ํธ๋ํฝ์ ์ถ์ฒ์ ์ ์ ํ๋ ์ง์ ๋งค์ฐ ์ ๊ตํ๊ฒ ๋ถ์ํฉ๋๋ค. ๊ฐ์ง ์ฆ์ ๊ฐ๋ ฅํ ์ ํ์ง ์กฐ์น๊ฐ ์ทจํด์ง ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. |
| ์ ๋ฃ ํธ๋ํฝ ์ ๋ฐ ์ฌ์ดํธ ํ์ฉ | ๋ด(Bot) ํธ๋ํฝ ๋๋ ์ธ์์ ์ผ๋ก ์์ฑ๋ ์ ํ์ง ํธ๋ํฝ์ ๋๋์ผ๋ก ์ฃผ์ . | ๋น์ ์์ ์ธ ํ๋ ํจํด ํ์ต: Google Analytics๋ ์ด๋ฅผ ์ด์ ์งํ๋ก ํ๋จํฉ๋๋ค. ์งง์ ์ฒด๋ฅ ์๊ฐ, 100%์ ๊ฐ๊น์ด ์ดํ๋ฅ ๋ฑ์ ๋ฐ์ดํฐ๋ ์ฝํ ์ธ ์ ๋ฌด๊ฐ์น์ฑ์ ์๊ณ ๋ฆฌ์ฆ์๊ฒ ํ์ต์์ผ ์ ํ์ง ๋ช์ ๋น ์ง๊ฒ ๋ง๋ญ๋๋ค. |
| ์ ๋ฌธ ์ฅ๋น/์ฝ๋ฉ์ ํตํ ์ง์ ์ ๋ฐ | 2~6๋ง ์๋ ์ฅ๋น(VPN, Proxy ๋ฑ)๋ ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ํน์ IP์์ ๋ฐ๋ณต์ ์ธ ์ ์์ ์ ๋ฐ. | IP ์ฃผ์ ๋ค์์ฑ ๋ถ์กฑ ๋ฐ ์ธ์์ฑ ํฌ์ฐฉ: ์ธ์์ ์ธ ํ๋ ํจํด๊ณผ ์ ํ๋ IP ์ฃผ์ ํ(Pool) ๋๋ฌธ์ ์์ฆ ๊ฒ์ ์์ง์ Bot ๊ฐ์ง ์์คํ (Anomaly Detection System)์ ๊ฑฐ์ 100% ํฌ์ฐฉ๋์ด ๋ฐฐ์ ๋ฉ๋๋ค. |

์น๋ช ์ ์ธ ์ํ์ฑ: AI์ SEO ํ๊ฒฝ์์์ ์กฐ์ ๋ฌด์ฉ๋ก
์์ ์ ์๋ ํด๋ผ์ด์ธํธ ํธ๋ํฝ ๋ธ๋ก๊ทธ ๋ฐฉ๋ฌธ์์ ์กฐ์ ์ฝ๋๋ ๊ธฐ์ ์ ์ผ๋ก ํ๋ฉด์ ๋ณด์ด๋ ์ซ์๋ฅผ ๋์ผ ์๋ ์์ง๋ง, AI ๊ธฐ๋ฐ์ ํ๋ SEO ํ๊ฒฝ์์๋ ์ ํ ์ด๋์ด ์๊ณ ์คํ๋ ค ์น๋ช ์ ์ ๋๋ค.
1. ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ : ๊ฒ์ ์์ง๊ณผ AI๋ ๊ฒ๋ชจ์ต์ ์์ง ์๋๋ค
์ด ์กฐ์ ํ์๋ ์ค์ง ํด๋ผ์ด์ธํธ ์ฌ์ด๋(ํ๋ก ํธ์๋)์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ๊ฒ๋ชจ์ต๋ง ๋ฐ๊พธ๋ฉฐ, SEO ์์ ๊ฒฐ์ ์ ์ํฅ์ ๋ฏธ์น๋ ํต์ฌ ๋ฐ์ดํฐ๋ ์กฐ์ํ ์ ์์ต๋๋ค.
- ๊ฒ์๋ถ์ ํ๋จ: Googlebot์ ํด๋ผ์ด์ธํธ ์ธก์์๋ง ๋ฐ๋ ์ซ์๋ฅผ ์์ ๊ฒฐ์ ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์์ ๊ฒฐ์ ์ ์ฌ์ฉํ๋ ํต์ฌ ๋ฐ์ดํฐ๋ Tistory ์๋ฒ๊ฐ Google์ ์ ๋ฌํ๋ ์๋ณธ ํธ๋ํฝ ๋ฐ์ดํฐ์ ์ฝํ ์ธ ํ์ง์ ๋๋ค. ์กฐ์๋ ์ซ์๋ ๊ฒ์๋ถ์ ์์ ๊ฒฐ์ ์ 0%์ ์ํฅ๋ ๋ฏธ์น์ง ์์ต๋๋ค.
- AI ๋ชจ๋ธ์ ์ ๋ขฐ์ฑ ๋ถ์: Gemini, ChatGPT ๋ฑ ๊ณ ๋ํ๋ AI ๋ชจ๋ธ์ ์ฝํ ์ธ ์ ์ง, ์ ๋ณด์ ๊น์ด, ์ ๋ขฐ์ฑ(E-E-A-T)์ ์ค์ฌ์ผ๋ก ๋ถ์ํฉ๋๋ค. AI๋ ์กฐ์๋ ๋ฐฉ๋ฌธ์ ์นด์ดํธ๊ฐ ์๋ ์ค์ ์ฝํ ์ธ ์ ๊ฐ์น๋ฅผ ํ๊ฐํฉ๋๋ค.
2. ์ด์ ๋ฐ์ดํฐ ์ค์ผ๊ณผ ์ ๋ขฐ๋ ๋ถ๊ดด์ ๋๊ฐ
์กฐ์๋ ๋ฐฉ๋ฌธ์ ์นด์ดํธ๊ฐ ์ด๋ํ๋ ๊ฐ์ฅ ํฐ ํผํด๋ ์ด์ ๋ฐ์ดํฐ์ ์ค์ผ๊ณผ ์ฌ์ฉ์ ์ ๋ขฐ์ ๋ถ๊ดด์ ๋๋ค.
| ํผํด ํญ๋ชฉ | ๋ด์ฉ ๋ฐ ๊ฒฐ๊ณผ | SEO ์ํฅ๋ |
|---|---|---|
| ํต์ฌ ์งํ ์ค์ผ | ์กฐ์๋ ์ซ์๋ Google Analytics, Search Console ๋ฑ ๊ณต์ ๋ถ์ ๋๊ตฌ์ ๊ธฐ๋ก๋์ง ์์ต๋๋ค. ์ด์์๋ ๋ธ๋ก๊ทธ์ ์ค์ ์ฌ์ฉ์ ํ๋ ํจํด(์ดํ๋ฅ , ์ฒด๋ฅ ์๊ฐ, ์ ์ ๊ฒฝ๋ก)์ ์ ํ ํ์ ํ ์ ์์ด, ์ง์ ํ SEO ์ต์ ํ๋ฅผ ์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค. | ์ต์ ํ ๋ถ๊ฐ๋ฅ |
| ์ ๋ขฐ์ฑ ์์ค | ๊ฒ๋ณด๊ธฐ ์ซ์๊ฐ ๋น์ ์์ ์ผ๋ก ๋์ง๋ง ์ฝํ ์ธ ํ์ง์ด ๋ฎ๊ฑฐ๋ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฆฌ๋ฉด, ์ฌ์ฉ์๋ ๋ถ์์ฐ์ค๋ฌ์์ ์ง๊ฐํ๊ณ ์กฐ์๋์๋ค๋ ์ธ์์ ๋ฐ์ ์ ๋ขฐ๋๊ฐ ๊ธ๋ฝํฉ๋๋ค. ์ด๋ ๊ฒ์ ์์ง ์์์๋ ๊ฐ์ ์ ์ผ๋ก ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. | ๊ฐ์ ์ ์ ์ํฅ |
| ์ ํ์ง ๋ช ์ํ | ๊ณผ๊ฑฐ๋ถํฐ ์๋๋ ์ ๋ฃ ๋ด ํธ๋ํฝ์ด๋ ๊ถ์ ์๋ ์ฌ์ดํธ ์ฐํ ํธ๋ํฝ ๋ฑ์ ์กฐ์ ๋ฐฉ์์ ๊ฒ์์์ง์ ๊ณ ๋ํ๋ Bot ๊ฐ์ง ์์คํ (Anomaly Detection System)์ ํฌ์ฐฉ๋์ด ๋ธ๋ก๊ทธ ์ ์ฒด๋ฅผ '์ ํ์ง ๋ช'์ผ๋ก ๋น ๋จ๋ฆฌ๋ ๊ฐ์ฅ ์น๋ช ์ ์ธ ์ํ์ ์ด๋ํฉ๋๋ค. (์งง์ ์ฒด๋ฅ ์๊ฐ, 100%์ ๊ฐ๊น์ด ์ดํ๋ฅ ๋ฑ์ด ์๊ณ ๋ฆฌ์ฆ์๊ฒ ์ฝํ ์ธ ์ ๋ฌด๊ฐ์น์ฑ์ ํ์ต์ํด) | ์ง์ ์ ์ ํ์ง |
ํด๋ผ์ด์ธํธ ํธ๋ํฝ ์กฐ์ ์ธ์๋ ๊ณผ๊ฑฐ๋ถํฐ ์๋๋์๋ ๋ค์ํ ํธ๋ํฝ ์กฐ์ ๋ฐฉ์๋ค์ ํ๋ ๊ฒ์ ์์ง ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ๋ํ๋ ๊ฐ์ง ์์คํ ์์์๋ ๋ฌด์ฉ์ง๋ฌผ์ด๋ฉฐ, ๋ธ๋ก๊ทธ๋ฅผ '์ ํ์ง ๋ช'์ผ๋ก ๋น ๋จ๋ฆฌ๋ ์น๋ช ์ ์ธ ์ํ์ ์ด๋ํฉ๋๋ค.
3. ๋ฐฉ๋ฌธ์ ์ ์กฐ์ ์ฝ๋ ์ ๋ฌธ (GTM ๋ง์ถค HTML ํ๊ทธ์ฉ)
โ ๊ฒฝ๊ณ : ์๋ ์ฝ๋๋ ๊ธฐ์ ์ ํ์ต ๋ฐ ๋ถ์ ๋ชฉ์ ์ผ๋ก๋ง ์ ๊ณต๋๋ฉฐ, ์ค์ ๋ธ๋ก๊ทธ ์ด์์ ์ฌ์ฉํ์ฌ SEO ์์๋ฅผ ๋์ด๊ฑฐ๋ ํธ๋ํฝ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ด ์ฝ๋๋ ์ค์ง ๋ธ๋ผ์ฐ์ ์์ ์ซ์๋ง ์กฐ์ํฉ๋๋ค.
์ฝ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ:
- Google Tag Manager (GTM)์ ์ ์ํฉ๋๋ค.
- ์๋ก์ด 'ํ๊ทธ'๋ฅผ ์์ฑํฉ๋๋ค.
- ํ๊ทธ ์ ํ์ '๋ง์ถค HTML'๋ก ์ค์ ํฉ๋๋ค.
- ์๋์ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ต๋๋ค.
- ํธ๋ฆฌ๊ฑฐ๋ฅผ '๋ชจ๋ ํ์ด์ง' ๋๋ 'Page View'๋ก ์ค์ ํฉ๋๋ค.
- ์ฝ๋์ ์๋จ ์ค์ (
var USE_MOCK_DATA = true;)์false๋ก ๋ณ๊ฒฝํ๋ฉด ์กฐ์ ๊ธฐ๋ฅ์ด ๋นํ์ฑํ๋ฉ๋๋ค.
์ฝ๋ ํ๋จ ์์ ์ฝ๋ ์ฐธ๊ณ ํ์ธ์
AI ์๋์ ์ง์ ํ SEO ํด๋ต: E-E-A-T ๊ธฐ๋ฐ์ ์ฅ๊ธฐ ์ ๋ต
ํฐ์คํ ๋ฆฌ ๋ฐฉ๋ฌธ์ ์นด์ดํฐ ์กฐ์์ ๋จ๊ธฐ์ ์ธ ์ฌ๋ฆฌ์ ๋ง์กฑ์ ์ ๊ณตํ ๋ฟ, ๋ธ๋ก๊ทธ์ ์ฅ๊ธฐ์ ์ธ ์์กด๊ณผ ์ฑ์ฅ์ ์ ํ ๊ธฐ์ฌํ์ง ๋ชปํฉ๋๋ค. ์กฐ์ ๋์ , ๋ธ๋ก๊ทธ์ ํต์ฌ ๊ฐ์น๋ฅผ ๋์ด๋ E-E-A-T ๊ธฐ๋ฐ์ ์ฅ๊ธฐ ์ ๋ต์ ์ง์คํด์ผ ํฉ๋๋ค.
- Experience (๊ฒฝํ ๊ธฐ๋ฐ ์ฝํ ์ธ ): ๋ ์๊ฐ ์ป์ ์ ์๋ ์ด์์๋ง์ ๊ณ ์ ํ ๊ฒฝํ๊ณผ ๊น์ด ์๋ ๋ ธํ์ฐ๋ฅผ ๋ด์๋ ๋๋ค. ์ด๊ฒ์ด AI๊ฐ ์์ฑํ ์ ์๋ ์ค๋ฆฌ์ง๋๋ฆฌํฐ์ ๋๋ค.
- Expertise (์ ๋ฌธ์ฑ): ํน์ ์ฃผ์ ์ ๋ํ ์ ํํ๊ณ ์ฌ์ธต์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ ๋ธ๋ก๊ทธ์ ์ ๋ฌธ์ฑ์ ํ๋ฆฝํฉ๋๋ค.
- Authoritativeness (๊ถ์): ๋ค๋ฅธ ๊ถ์ ์๋ ์ฌ์ดํธ๋ก๋ถํฐ ์์ฐ์ค๋ฌ์ด ๋ฐฑ๋งํฌ๋ฅผ ์ป๊ฑฐ๋, ํด๋น ๋ถ์ผ์์ ์ธ์ ๋ฐ๋ ๋ธ๋ก๊ทธ๋ก ์๋ฆฌ๋งค๊นํฉ๋๋ค.
- Trustworthiness (์ ๋ขฐ์ฑ): ์ฌ์ฉ์ ๋ง์กฑ๋ ์ต์ ํ(UX/SX)์ ์ง์คํ์ฌ ๊ธด ์ฒด๋ฅ ์๊ฐ๊ณผ ๋ฎ์ ์ดํ๋ฅ ์ ๋ฌ์ฑํฉ๋๋ค. ์ด๋ ์ฝํ ์ธ ๊ฐ ์ฌ์ฉ์์๊ฒ ๊ฐ์น๊ฐ ์๋ค๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์๊ทธ๋์ ๋๋ค.
ํต์ฌ SEO ์ก์ ํ๋
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ต์ ํ: ํ๋ฉด์ ์ซ์์ ํํน๋์ง ๋ง๊ณ , Google Analytics์ Search Console์ ์ค์ ํธ๋ํฝ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฒ์ ์๋์ ํ๋ ํจํด์ ํ์ ํ๊ณ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
- ๊ตฌ์กฐ์ ๋ฐ์ดํฐ์ ์๋งจํฑ ๋งํฌ์ : HTML5์ JSON-LD ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ๊ฒ์ ์์ง๊ณผ AI์๊ฒ ์ฝํ ์ธ ์ ๋ด์ฉ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฒ์ ๊ฒฐ๊ณผ ๋ ธ์ถ์ ๋๋ ์ค์ํ ๊ธฐ์ ์ SEO ์์์ ๋๋ค.
- ์ค๋ฆฌ์ง๋๋ฆฌํฐ ๊ฐํ: AI๊ฐ ๋จ์ํ ์ ๋ณด๋ฅผ ์ฌ๊ฐ๊ณตํ๋ ์์ค์ ๋์ด์ค ์ ์๋๋ก, ๋ ์ ์ ์ธ ์ ๋ณด์ ๊ฐ์ธ์ ํต์ฐฐ์ ๋ฐ๋์ ํฌํจํฉ๋๋ค.
๊ถ๊ทน์ ์ธ SEO ์ฑ๊ณต์ ์ํด์๋ ๋์ ๋ณด์ด๋ ์ซ์์ ๊ฐ์ง 'ํ์ฑํ'๋ณด๋ค ์ฌ์ฉ์ ๊ฒฝํ(UX)๊ณผ ์ฝํ ์ธ ์ ์ ๋ขฐ์ฑ(E-E-A-T)์ ์ง์คํ๋ ๊ฒ์ด ์ ์ผํ๊ณ ์ฅ๊ธฐ์ ์ธ ์ ๋ต์ ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
Q1. ํฐ์คํ ๋ฆฌ ๋ฐฉ๋ฌธ์ ์ ์กฐ์์ SEO ์์์ ๋์์ด ๋๋์?
A1. ์ ํ ๋์์ด ๋์ง ์์ต๋๋ค. ๋ฐฉ๋ฌธ์ ์ ์กฐ์์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์๋ง ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ฒ์ ์์ง๊ณผ AI๋ ์๋ฒ์ ์ค์ ํธ๋ํฝ๊ณผ ์ฝํ ์ธ ํ์ง์ ๊ธฐ์ค์ผ๋ก ํ๊ฐํฉ๋๋ค.
Q2. ์ด๊ธฐ ๋ฐฉ๋ฌธ์๊ฐ ์ ์ผ๋ฉด ๋ธ๋ก๊ทธ ์ด์์ ๋ถ๋ฆฌํ ๊น์?
A2. ์ด๊ธฐ ๋ฐฉ๋ฌธ์ ์๋ ์ผ์์ ์ธ ์ฌ๋ฆฌ์ ๋ถ๋ด์ผ ๋ฟ์ ๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ฝํ ์ธ ํ์ง, ์ฌ์ฉ์ ๊ฒฝํ(UX/SX), E-E-A-T ๊ธฐ๋ฐ ์ ๋ต์ด ๋ธ๋ก๊ทธ ์ฑ์ฅ์ ํต์ฌ์ ์ ๋๋ค.
Q3. ๋ฐฉ๋ฌธ์ ์๋ฅผ ๋น๋ ธ์ถ๋ก ์ค์ ํด๋ ๊ด์ฐฎ์๊น์?
A3. ๋ค, ๊ถ์ฅ๋ฉ๋๋ค. ์ค์ ํธ๋ํฝ ๋ถ์์ Google Analytics, Search Console ๋ฑ์ผ๋ก ์ถฉ๋ถํ๋ฉฐ, ๋ฐฉ๋ฌธ์ ์ ๋ ธ์ถ์ ์ฌํ์ ์ฆ๊ฑฐ ์ญํ ์ ํ ๋ฟ SEO์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
Q4. ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ฐฉ๋ฌธ์ ์กฐ์์ ํ๋ฉด ๋ธ๋ก๊ทธ ์ ๋ขฐ๋์ ์ด๋ค ์ํฅ์ด ์๋์?
A4. ์กฐ์๋ ๋ฐฉ๋ฌธ์ ์๊ฐ ๋ณด์ด๋ฉด ์ฌ์ฉ์ ์ ๋ขฐ๋๊ฐ ๊ธ๋ฝํ ์ ์์ผ๋ฉฐ, ์ด์ ๋ฐ์ดํฐ๋ ์ค์ผ๋์ด ์ค์ SEO ์ต์ ํ์ ํ์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ ์ ๋ฐฉํดํฉ๋๋ค.
Q5. ๋ธ๋ก๊ทธ ๋ฐฉ๋ฌธ์ ์๋ฅผ ๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด ์ด๋ค ์ ๋ต์ด ์์ ํ๊ฐ์?
A5. ๋จ์ ์กฐ์๋ณด๋ค, ์ค๋ฆฌ์ง๋ ์ฝํ ์ธ ๊ฐํ, ์ฌ์ฉ์ ๊ฒฝํ ์ต์ ํ, ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ํ์ฉ, E-E-A-T ๊ธฐ๋ฐ ์ฅ๊ธฐ ์ ๋ต์ ์ ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ํ๊ณ ํจ๊ณผ์ ์ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ๋ธ๋ก๊ทธ ๋ฐฉ๋ฌธ์ ์๋ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ์ฑ์ฅ ์ ๋๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ด๋ถ ์งํ์ผ ๋ฟ์ ๋๋ค. ์ด๋ฅผ ๊ตณ์ด ๋จ๋ค์๊ฒ ๊ณต๊ฐํ ํ์๋ ์์ต๋๋ค. ๋ฐฉ๋ฌธ์๊ฐ ์ ์ผ๋ฉด ๋ธ๋ก๊ทธ๊ฐ ํ์ฑํ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์๊ณ , ๋ฐฉ๋ฌธ์๊ฐ ๋ง๋ค๊ณ ํด์ ๋ฐ๋์ ์ฅ์ ์ด ๋๋ ๊ฒ๋ ์๋๋๋ค. ์คํ๋ ค ๋ง์ ๋ฐฉ๋ฌธ์๊ฐ ๊ณต๊ฐ๋๋ฉด ๊ฒฝ์ ๋ธ๋ก๊ทธ๊ฐ ๊ธ์ ๋ฒ ๋ผ๊ฑฐ๋ ํธ๋ํฝ์ ๋ ธ๋ ค ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
์ฆ, ๋ฐฉ๋ฌธ์ ์๋ ์๋ํ ๋์๋, ๊ณต๊ฐํ ํ์๋ ์๋ ๊ฐ์ธ ์งํ์ด๋ฉฐ, ๋ธ๋ก๊ทธ ์ด์์ ํต์ฌ์ ์์น๊ฐ ์๋๋ผ ์ฝํ ์ธ ํ์ง๊ณผ ์ฌ์ฉ์ ๊ฒฝํ, ๊ฒ์ ๋ ธ์ถ ์ฑ๊ณผ์ ์์ต๋๋ค.
์์ ์ฝ๋
์๋ ์ฝ๋๋ฅผ html์ ์ง์ ์ ์ฉํ๊ฑฐ๋ ์ฝ๋ ๋ ธ์ถ์ ์ด๋ ต๊ฒ ํ๋ ค๋ฉด ๊ตฌ๊ธ ํ๊ทธ๋งค๋์ ๋ฅผํ์ฉํด์ ํ ์คํธ ํ ์ ์์ต๋๋ค.
script
(function() {
"use strict";
var TOTAL_KEY = 'gimini_visitor_total_count';
var TODAY_KEY = 'gimini_visitor_today_count';
var TODAY_DATE_KEY = 'gimini_visitor_last_visit_date';
var CHART_HISTORY_KEY = 'gimini_chart_history';
var TOTAL_BASE_KEY = 'gimini_visitor_total_base';
var AVERAGE_INCREMENT_INTERVAL_MS = 10000;
var MAX_INCREMENT_VALUE = 3;
var USE_MOCK_DATA = true;
var MOCK_BASE_TOTAL_SUM = 14624;
var currentDayChartEntry = null;
var chartInstance = null;
var chartSetupComplete = false;
var formatNumber = function(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
};
var getRandomInt = function(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
};
var getFormattedDateString = function(date) {
var year = date.getFullYear();
var month = (date.getMonth() + 1).toString();
var day = date.getDate().toString();
if (month.length 2) month = '0' + month;
if (day.length 2) day = '0' + day;
return year + '-' + month + '-' + day;
};
var setupChartData = function(todayDateString) {
var mockData = [
{ "timestamp": "2025-11-19T00:00:00+09:00", "count": 2000 },
{ "timestamp": "2025-11-20T00:00:00+09:00", "count": 2054 },
{ "timestamp": "2025-11-21T00:00:00+09:00", "count": 2198 },
{ "timestamp": "2025-11-22T00:00:00+09:00", "count": 1957 },
{ "timestamp": "2025-11-23T00:00:00+09:00", "count": 2233 },
{ "timestamp": "2025-11-24T00:00:00+09:00", "count": 2012 },
{ "timestamp": "2025-11-25T00:00:00+09:00", "count": 2170 }
];
var history = [];
var storedHistory = localStorage.getItem(CHART_HISTORY_KEY);
if (storedHistory) {
try {
history = JSON.parse(storedHistory);
} catch (e) {
console.error("GTM Pro: Failed to parse chart history from LocalStorage.", e);
storedHistory = null;
}
}
if (!storedHistory || history.length 6) {
history = mockData.slice(0, 6);
history.push({
"timestamp": todayDateString + "T00:00:00+09:00",
"count": 0
});
localStorage.setItem(CHART_HISTORY_KEY, JSON.stringify(history));
console.log("GTM Pro: Chart history initialized and saved.");
}
var todayEntry = null;
var i;
for (i = 0; i history.length; i++) {
if (history[i].timestamp.indexOf(todayDateString) === 0) {
todayEntry = history[i];
break;
}
}
if (!todayEntry) {
if (history.length = 7) {
history.shift();
}
todayEntry = {
"timestamp": todayDateString + "T00:00:00+09:00",
"count": 0
};
history.push(todayEntry);
localStorage.setItem(CHART_HISTORY_KEY, JSON.stringify(history));
}
window.chartData = history;
currentDayChartEntry = todayEntry;
};
var extractArticleData = function() {
var selectors = ['.article_view', '.entry-content', '#content', 'main'];
var articleElement = null;
var i;
for (i = 0; i selectors.length; i++) {
articleElement = document.querySelector(selectors[i]);
if (articleElement) break;
}
if (!articleElement) {
return { content: '', title: '' };
}
var titleElement = document.querySelector('.title-article, h1.title');
var title = (titleElement && titleElement.textContent) ? titleElement.textContent.trim() : document.title;
var content = articleElement.cloneNode(true);
var scripts = content.querySelectorAll('script, style, iframe, .module_plugin, .article_rep_code, .related-articles, .rp_content, .footer');
for (i = 0; i scripts.length; i++) {
scripts[i].parentNode.removeChild(scripts[i]);
}
var textContent = content.textContent.replace(/\s\s+/g, ' ').trim();
return {
content: textContent,
title: title
};
};
var generateAndInjectJsonLd = function(data) {
if (!data.content || data.content.length 50) {
console.warn("GTM Pro: Skipping JSON-LD generation due to insufficient content.");
return;
}
var currentDate = new Date().toISOString();
var author = document.querySelector('.author, .nickname') ? document.querySelector('.author, .nickname').textContent.trim() : 'Unknown Author';
var url = window.location.href;
var jsonLdData = {
"@context": "https://schema.org",
"@type": "Article",
"headline": data.title,
"author": {
"@type": "Person",
"name": author
},
"publisher": {
"@type": "Organization",
"name": author,
"logo": {
"@type": "ImageObject",
"url": url
}
},
"datePublished": currentDate,
"dateModified": currentDate,
"mainEntityOfPage": {
"@type": "WebPage",
"@id": url
},
"description": data.content.substring(0, 200) + '...',
"articleBody": data.content.substring(0, 2000)
};
var script = document.createElement('script');
script.setAttribute('type', 'application/ld+json');
script.textContent = JSON.stringify(jsonLdData);
document.head.appendChild(script);
console.log("GTM Pro: JSON-LD Article Schema injected successfully for SEO.");
};
var removeTistoryChartDataScript = function() {
var container = document.querySelector('.module_plugin');
if (!container) return;
var scripts = container.querySelectorAll('script');
var i;
for (i = 0; i scripts.length; i++) {
var script = scripts[i];
if (script.textContent.indexOf('window.chartData') -1) {
script.parentNode.removeChild(script);
console.warn("GTM Pro: Tistory's original chartData script removed to prevent overwrite.");
window.chartData = null;
return;
}
}
};
function initGTMTasks() {
if (USE_MOCK_DATA) {
removeTistoryChartDataScript();
}
var totalElement = document.querySelector('.total');
var todayElement = document.querySelector('.total + p');
var yesterdayElement = document.querySelector('.count p:nth-child(4)');
var today = new Date();
var todayDate = today.toDateString();
var todayDateString = getFormattedDateString(today);
var totalCount = parseInt(localStorage.getItem(TOTAL_KEY)) || 0;
var todayCount = parseInt(localStorage.getItem(TODAY_KEY)) || 0;
var lastVisitDate = localStorage.getItem(TODAY_DATE_KEY);
var totalBase = parseInt(localStorage.getItem(TOTAL_BASE_KEY)) || 0;
var isNewDay = (lastVisitDate !== todayDate);
if (USE_MOCK_DATA && totalBase === 0) {
totalBase = MOCK_BASE_TOTAL_SUM;
localStorage.setItem(TOTAL_BASE_KEY, totalBase);
console.log("GTM Pro: Total Base initialized to mock sum: " + formatNumber(totalBase));
}
if (USE_MOCK_DATA && isNewDay && lastVisitDate) {
console.log("GTM Pro: New Day detected (" + todayDate + "). Executing chart data rotation.");
var chartHistoryString = localStorage.getItem(CHART_HISTORY_KEY);
var chartHistory = chartHistoryString ? JSON.parse(chartHistoryString) : [];
if (chartHistory.length 0) {
chartHistory.shift();
}
if (chartHistory.length 0) {
chartHistory[chartHistory.length - 1].count = todayCount;
chartHistory[chartHistory.length - 1].timestamp = getFormattedDateString(new Date(lastVisitDate)) + "T00:00:00+09:00";
}
totalBase += todayCount;
localStorage.setItem(TOTAL_BASE_KEY, totalBase);
console.log("GTM Pro: Total Base updated by " + formatNumber(todayCount) + " to " + formatNumber(totalBase));
chartHistory.push({
"timestamp": todayDateString + "T00:00:00+09:00",
"count": 0
});
localStorage.setItem(CHART_HISTORY_KEY, JSON.stringify(chartHistory));
todayCount = 0;
localStorage.setItem(TODAY_DATE_KEY, todayDate);
}
setupChartData(todayDateString);
var yesterdayCount = 0;
var chartDataLength = window.chartData ? window.chartData.length : 0;
if (USE_MOCK_DATA && chartDataLength = 2) {
yesterdayCount = window.chartData[chartDataLength - 2].count;
console.log("GTM Pro: Yesterday count calculated from chart history: " + formatNumber(yesterdayCount));
}
if (USE_MOCK_DATA) {
} else {
var initialTotal = (totalElement) ? parseInt(totalElement.textContent.replace(/,/g, '').trim()) || 0 : 0;
if (initialTotal totalCount) {
totalCount = initialTotal;
if (todayCount === 0 && todayElement) {
var todayText = todayElement.textContent.split(':')[1];
todayCount = (todayText) ? parseInt(todayText.replace(/,/g, '').trim()) || 0 : 0;
}
}
}
todayCount += 1;
var updateDOM = function() {
if (totalElement) {
totalElement.textContent = formatNumber(totalBase);
}
if (todayElement) {
todayElement.textContent = "Today : " + formatNumber(todayCount);
}
if (yesterdayElement) {
yesterdayElement.textContent = "Yesterday : " + formatNumber(yesterdayCount);
}
if (currentDayChartEntry) {
currentDayChartEntry.count = todayCount;
if (chartInstance && typeof chartInstance.update === 'function') {
if (USE_MOCK_DATA && chartInstance.config && chartInstance.config.data && chartInstance.config.data.datasets && chartInstance.config.data.datasets[0]) {
var mockCounts = window.chartData.map(function(item) {
return item.count;
});
if (chartInstance.config.data.datasets[0].data.length === mockCounts.length) {
chartInstance.config.data.datasets[0].data = mockCounts;
console.log("GTM Pro: Forced mock data overwrite applied.");
} else {
console.warn("GTM Pro: Skipping mock data overwrite, data length mismatch.");
}
}
chartInstance.update();
}
}
};
updateDOM();
localStorage.setItem(TODAY_KEY, todayCount);
localStorage.setItem(CHART_HISTORY_KEY, JSON.stringify(window.chartData));
var updateCounterInterval = function() {
var increment = getRandomInt(1, MAX_INCREMENT_VALUE);
var randomInterval = getRandomInt(AVERAGE_INCREMENT_INTERVAL_MS * 0.8, AVERAGE_INCREMENT_INTERVAL_MS * 1.2);
todayCount += increment;
updateDOM();
localStorage.setItem(TODAY_KEY, todayCount);
localStorage.setItem(CHART_HISTORY_KEY, JSON.stringify(window.chartData));
setTimeout(updateCounterInterval, randomInterval);
};
var setupChartAfterLoad = function(obs) {
if (chartSetupComplete) return false;
var canvasElement = document.getElementById('chartctx');
var foundChart = null;
if (canvasElement) {
if (typeof canvasElement.chart === 'object' && canvasElement.chart !== null) {
foundChart = canvasElement.chart;
} else if (typeof window.Chart === 'function' && typeof window.Chart.getChart === 'function') {
foundChart = window.Chart.getChart(canvasElement);
}
}
if (foundChart) {
chartInstance = foundChart;
if (obs) {
obs.disconnect();
console.log("GTM Pro: MutationObserver disconnected immediately upon finding chart.");
}
var startInterval = function() {
if (chartSetupComplete) return;
chartSetupComplete = true;
updateDOM();
updateCounterInterval();
console.log("GTM Pro: Interval started after final overwrite sequence.");
};
console.log("GTM Pro: Chart.js instance secured via Observer. Starting aggressive overwrite sequence.");
if (USE_MOCK_DATA) {
updateDOM();
setTimeout(updateDOM, 500);
setTimeout(updateDOM, 1000);
setTimeout(startInterval, 1500);
} else {
updateDOM();
startInterval();
}
return true;
}
return false;
};
if ('MutationObserver' in window) {
var observer = new window.MutationObserver(function(mutations, obs) {
var chartFound = setupChartAfterLoad(obs);
});
observer.observe(document.body, {
childList: true,
subtree: true,
});
setTimeout(function() {
if ('MutationObserver' in window && observer && !chartSetupComplete) {
observer.disconnect();
}
if (!chartSetupComplete) {
console.warn("GTM Pro: Max wait time exceeded (15s). Starting counter updates (DOM/LocalStorage only).");
chartSetupComplete = true;
updateCounterInterval();
}
}, 15000);
} else {
console.warn("GTM Pro: MutationObserver not supported. Starting counter updates (DOM/LocalStorage only).");
updateCounterInterval();
}
var articleData = extractArticleData();
generateAndInjectJsonLd(articleData);
}
initGTMTasks();
})();
/script
ํ ์คํธ ํ๊ณ ์ถ์ ๋ถ์ ์ฃผ์๋ฅผ ๋๊ธ์ ์ ๋ ฅํด์ฃผ์ธ์ ํ๋ฃจ ๋ฐฉ๋ฌธ์ ๋ฐ๋ก 1๋ง๋ช ํธ๋ํฝ ์ ๋ํด ๋๋ฆด์ ์์ต๋๋ค. ^^