July 29, 2025

๐Ÿ—๏ธ <div> Soup: ์‹œ๋งจํ‹ฑ HTML ๋ฌด์‹œ๋กœ ์ธํ•œ ์›น ์ ‘๊ทผ์„ฑ๊ณผ SEO ์ €ํ•˜

HTML
์›นํ‘œ์ค€
SEO/์ ‘๊ทผ์„ฑ
์•„ํ‚คํ…์ฒ˜
๋„ค์ด๋ฐ

Summary

๊ณผ๋„ํ•œ <div> ์‚ฌ์šฉ๊ณผ ์‹œ๋งจํ‹ฑ HTML ํƒœ๊ทธ ๋ฌด์‹œ๋Š” ์›น ์ ‘๊ทผ์„ฑ, SEO, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ์ €ํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ์˜ ์˜๋ฏธ์— ๋งž๋Š” HTML5 ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ์ ์ด๊ณ  ์˜๋ฏธ ์žˆ๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Why Wrong?

์›น ํŽ˜์ด์ง€๋ฅผ ์˜ค์ง <div> ์š”์†Œ์™€ ์ผ๋ฐ˜์ ์ธ ์ธ๋ผ์ธ/๋ธ”๋ก ์š”์†Œ(์˜ˆ: <span>, <p>)๋กœ๋งŒ ๊ตฌ์„ฑํ•˜๊ณ  ์‹œ๋งจํ‹ฑ HTML5 ํƒœ๊ทธ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

  • ์˜๋ฏธ ์ „๋‹ฌ ๋ถ€์กฑ: HTML์€ ๋‹จ์ˆœํžˆ ์‹œ๊ฐ์ ์ธ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋„˜์–ด, ๋ฌธ์„œ์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ ์˜ ์˜๋ฏธ๋ฅผ ์ •์˜ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. <div>๋งŒ์œผ๋กœ๋Š” ๊ฒ€์ƒ‰ ์—”์ง„, ๋ณด์กฐ ๊ธฐ์ˆ (์Šคํฌ๋ฆฐ ๋ฆฌ๋”) ๋ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŽ˜์ด์ง€์˜ ์ฃผ์š” ์˜์—ญ(ํ—ค๋”, ๋‚ด๋น„๊ฒŒ์ด์…˜, ๋ณธ๋ฌธ, ํ‘ธํ„ฐ ๋“ฑ)๊ณผ ์ฝ˜ํ…์ธ ์˜ ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ์›น ์ ‘๊ทผ์„ฑ ์ €ํ•ด: ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์‚ฌ์šฉ์ž๋Š” ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ(์˜ˆ: <nav>, <main>, <h1>, <article>)๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€์˜ ์ฃผ์š” ๋žœ๋“œ๋งˆํฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ฝ˜ํ…์ธ ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ <div>๋กœ๋งŒ ๊ตฌ์„ฑํ•˜๋ฉด ์ด๋Ÿฌํ•œ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์ง€ ์•Š์•„ ์‹œ๊ฐ ์žฅ์• ๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ๋งค์šฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.
  • SEO ์„ฑ๋Šฅ ์ €ํ•˜: ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ๋Š” ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์ค‘์š” ์ฝ˜ํ…์ธ ๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ํ‚ค์›Œ๋“œ์˜ ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•˜์—ฌ ๋žญํ‚น์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ์—†๋Š” <div> ์œ„์ฃผ์˜ ๊ตฌ์กฐ๋Š” ๊ฒ€์ƒ‰ ์—”์ง„์ด ํŽ˜์ด์ง€์˜ ๊ฐ€์น˜๋ฅผ ์ œ๋Œ€๋กœ ํ‰๊ฐ€ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์–ด SEO ์ ์ˆ˜๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ €ํ•˜: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ <div>๋งŒ์œผ๋กœ๋Š” ํ•ด๋‹น ์„น์…˜์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ฆ‰์‹œ ์•Œ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ ์ดํ•ด๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๊ณ , ํ˜‘์—… ์‹œ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋น„์šฉ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ, ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. CSS ์„ ํƒ์ž ์ž‘์„ฑ ๋˜ํ•œ .class ๋ช…์— ๊ณผ๋„ํ•˜๊ฒŒ ์˜์กดํ•˜๊ฒŒ ๋˜์–ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CSS ๋ฐ JavaScript ์ž‘์—…์˜ ๋น„ํšจ์œจ์„ฑ: ๊ตฌ์กฐ์  ์˜๋ฏธ๊ฐ€ ์—†๋Š” <div>์— ํด๋ž˜์Šค๋ช…์„ ๋•์ง€๋•์ง€ ๋ถ™์ด๊ฒŒ ๋˜์–ด CSS ์„ ํƒ์ž ์ž‘์„ฑ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , JavaScript๋กœ ํŠน์ • ์ฝ˜ํ…์ธ ๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ๋ถˆํ•„์š”ํ•œ DOM ํƒ์ƒ‰์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, document.querySelector('.header .logo') ๋Œ€์‹  document.querySelector('header h1')์ฒ˜๋Ÿผ ๋” ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

How to Fix?

์ฝ˜ํ…์ธ ์˜ ์˜๋ฏธ์™€ ๋ชฉ์ ์— ๋งž๋Š” HTML5 ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ˜ํ…์ธ ์˜ ์˜๋ฏธ์— ๋งž๋Š” HTML5 ํƒœ๊ทธ ์‚ฌ์šฉ: <header>, <nav>, <main>, <article>, <section>, <aside>, <footer>, <figure>, <figcaption>, <mark>, <time>, <details>, <summary> ๋“ฑ ๋ชฉ์ ์— ๋งž๋Š” ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŽ˜์ด์ง€์˜ ์ตœ์ƒ๋‹จ ์˜์—ญ์€ <header>, ์ฃผ์š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฉ”๋‰ด๋Š” <nav>, ํŽ˜์ด์ง€์˜ ์ฃผ์š” ์ฝ˜ํ…์ธ ๋Š” <main>, ๋…๋ฆฝ์ ์ธ ๊ฒŒ์‹œ๊ธ€์ด๋‚˜ ๋‰ด์Šค๋Š” <article>, ๊ด€๋ จ์„ฑ ์žˆ๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ์„น์…˜์€ <section>, ๋ณด์กฐ ์ฝ˜ํ…์ธ ๋Š” <aside>, ํŽ˜์ด์ง€์˜ ์ตœํ•˜๋‹จ ์˜์—ญ์€ <footer>๋กœ ๋งˆํฌ์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ์ œ๋ชฉ ํƒœ๊ทธ(<h1>~<h6>)์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ณ„์ธต ๊ตฌ์กฐ ์œ ์ง€: ํŽ˜์ด์ง€์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ์ œ๋ชฉ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ณ„์ธต ์ˆœ์„œ๋ฅผ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. (h1 ๋‹ค์Œ์— h3์ด ์˜ค๊ฑฐ๋‚˜, ํ•œ ํŽ˜์ด์ง€์— h1์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒƒ์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค.)
  • ๋ฆฌ์ŠคํŠธ(<ul>, <ol>)์™€ ํ…Œ์ด๋ธ”(<table>)์˜ ์ ์ ˆํ•œ ํ™œ์šฉ: ๋ชฉ๋ก ํ˜•ํƒœ์˜ ์ฝ˜ํ…์ธ ๋Š” <ul> (์ˆœ์„œ ์—†๋Š” ๋ชฉ๋ก) ๋˜๋Š” <ol> (์ˆœ์„œ ์žˆ๋Š” ๋ชฉ๋ก)๋กœ, ํ‘œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋Š” <table>๋กœ ๋งˆํฌ์—…ํ•˜์—ฌ ๊ตฌ์กฐ์ ์ธ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค.
  • ARIA role ์†์„ฑ ํ™œ์šฉ (๋ณด์กฐ์ ): HTML5 ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ณต์žกํ•œ UI ์ปดํฌ๋„ŒํŠธ(์˜ˆ: ์ปค์Šคํ…€ ํƒญ, ์•„์ฝ”๋””์–ธ)์˜ ๊ฒฝ์šฐ, ARIA role ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์กฐ ๊ธฐ์ˆ ์— ์ถ”๊ฐ€์ ์ธ ์˜๋ฏธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•œ ํ•œ HTML5 ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฉฐ, ARIA๋Š” HTML์˜ ์˜๋ฏธ๋ฅผ '๋ณด๊ฐ•'ํ•˜๋Š” ์—ญํ• ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์›น ํ‘œ์ค€ ์ค€์ˆ˜: W3C HTML ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋œ HTML์ด ์›น ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜์—ฌ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Before Code (Bad)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
</head>
<body>
    <div class="header">
        <div class="logo">๋กœ๊ณ </div>
        <div class="navigation">
            <div class="nav-item">ํ™ˆ</div>
            <div class="nav-item">์†Œ๊ฐœ</div>
            <div class="nav-item">์—ฐ๋ฝ์ฒ˜</div>
        </div>
    </div>

    <div class="main-content">
        <div class="article-section">
            <div class="article-title">๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ</div>
            <div class="article-author">์ž‘์„ฑ์ž: ํ™๊ธธ๋™</div>
            <div class="article-body">
                <p>์ด๊ฒƒ์€ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.</p>
                <p>๋” ๋งŽ์€ ๋‚ด์šฉ...</p>
            </div>
            <div class="comments">
                <div class="comment-title">๋Œ“๊ธ€</div>
                <div class="comment-list">
                    <div class="comment-item">
                        <p>์ข‹์€ ๊ธ€์ด๋„ค์š”!</p>
                        <div class="comment-author">๊น€์ฒ ์ˆ˜</div>
                    </div>
                </div>
            </div>
        </div>

        <div class="sidebar-section">
            <div class="sidebar-title">๊ด€๋ จ ๋งํฌ</div>
            <div class="link-list">
                <div class="link-item">๋งํฌ 1</div>
                <div class="link-item">๋งํฌ 2</div>
            </div>
        </div>
    </div>

    <div class="footer">
        <div class="copyright">ยฉ 2023 ๋‚ด ์›น์‚ฌ์ดํŠธ. All rights reserved.</div>
    </div>
</body>
</html>

After Code (Good)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>๋‚ด ์›น์‚ฌ์ดํŠธ</title>
</head>
<body>
    <header>
        <h1><a href="/">๋กœ๊ณ </a></h1>
        <nav>
            <ul>
                <li><a href="/">ํ™ˆ</a></li>
                <li><a href="/about">์†Œ๊ฐœ</a></li>
                <li><a href="/contact">์—ฐ๋ฝ์ฒ˜</a></li>
            </ul>
        </nav>
    </header>

    <main>
        <article>
            <h2>๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ</h2>
            <address>์ž‘์„ฑ์ž: ํ™๊ธธ๋™</address>
            <p>์ด๊ฒƒ์€ ๊ฒŒ์‹œ๊ธ€ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๊ฐ€ ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.</p>
            <p>๋” ๋งŽ์€ ๋‚ด์šฉ...</p>

            <section>
                <h3>๋Œ“๊ธ€</h3>
                <ul>
                    <li>
                        <p>์ข‹์€ ๊ธ€์ด๋„ค์š”!</p>
                        <address>๊น€์ฒ ์ˆ˜</address>
                    </li>
                </ul>
            </section>
        </article>

        <aside>
            <h3>๊ด€๋ จ ๋งํฌ</h3>
            <ul>
                <li><a href="#">๋งํฌ 1</a></li>
                <li><a href="#">๋งํฌ 2</a></li>
            </ul>
        </aside>
    </main>

    <footer>
        <small>ยฉ 2023 ๋‚ด ์›น์‚ฌ์ดํŠธ. All rights reserved.</small>
    </footer>
</body>
</html>