시맨틱 마크업
HTML 요소를 사용할 때 시각적 표현이 아닌 콘텐츠의 의미와 구조를 기반으로 적절한 태그를 선택하여 마크업하는 방식입니다.
비시맨틱 vs 시맨틱 마크업
<!-- X 비시맨틱 마크업 — 의미 없는 div로만 구성 -->
<div id="header">
<div class="nav">
<div class="nav-item">홈</div>
<div class="nav-item">소개</div>
</div>
</div>
<div id="main">
<div class="article">
<div class="title">제목</div>
<div class="content">본문 내용</div>
</div>
<div id="sidebar">관련 링크</div>
</div>
<div id="footer">Copyright 2026</div>
<!-- O 시맨틱 마크업 — 태그 자체가 의미를 전달 -->
<header>
<nav>
<a href="/">홈</a>
<a href="/about">소개</a>
</nav>
</header>
<main>
<article>
<h1>제목</h1>
<p>본문 내용</p>
</article>
<aside>관련 링크</aside>
</main>
<footer>Copyright 2026</footer>
주요 시맨틱 태그
구조 태그
| 태그 | 의미 | 용도 |
<header> | 머리말 | 페이지/섹션의 상단 영역 (로고, 네비게이션) |
<nav> | 내비게이션 | 주요 링크 모음 |
<main> | 핵심 콘텐츠 | 페이지의 주요 콘텐츠 (페이지당 1개) |
<article> | 독립 콘텐츠 | 블로그 글, 뉴스 기사 등 독립적으로 배포 가능한 콘텐츠 |
<section> | 주제별 그룹 | 관련 콘텐츠를 주제별로 묶음 |
<aside> | 부가 콘텐츠 | 사이드바, 관련 링크, 광고 |
<footer> | 바닥글 | 저작권, 연락처, 사이트맵 |
텍스트 태그
| 태그 | 의미 | 비시맨틱 대안 |
<h1>~<h6> | 제목 계층 | <div class="title"> |
<p> | 문단 | <div class="text"> |
<strong> | 중요한 텍스트 (강조) | <b> (단순 굵게) |
<em> | 강조 (뉘앙스 변경) | <i> (단순 기울임) |
<time> | 날짜/시간 | <span>2026-02-25</span> |
<mark> | 하이라이트 | <span class="highlight"> |
<figure> | 멀티미디어 + 캡션 그룹 | <div class="image-wrapper"> |
<figcaption> | figure의 설명 | <div class="caption"> |
<address> | 연락처 정보 | <div class="contact"> |
페이지 구조 시각화:
┌─────────────────────────────────┐
│ <header> │
│ ┌─────────────────────────┐ │
│ │ <nav> │ │
│ └─────────────────────────┘ │
└─────────────────────────────────┘
┌─────────────────────────┬───────┐
│ <main> │ │
│ ┌───────────────────┐ │<aside>│
│ │ <article> │ │ │
│ │ ┌─────────────┐ │ │ │
│ │ │ <section> │ │ │ │
│ │ └─────────────┘ │ │ │
│ │ ┌─────────────┐ │ │ │
│ │ │ <section> │ │ │ │
│ │ └─────────────┘ │ │ │
│ └───────────────────┘ │ │
└─────────────────────────┴───────┘
┌─────────────────────────────────┐
│ <footer> │
└─────────────────────────────────┘
왜 시맨틱 마크업을 사용하는가?
| 이유 | 설명 |
| 접근성 (Accessibility) | 스크린 리더가 태그의 의미를 파악하여 시각장애인에게 구조를 전달 |
| SEO (검색 엔진 최적화) | 검색 엔진이 콘텐츠의 중요도와 구조를 정확히 파악 |
| 코드 가독성 | 개발자가 HTML만 보고도 페이지 구조를 이해 가능 |
| 유지보수성 | 의미 있는 태그로 역할이 명확하여 수정이 용이 |
| 표준 준수 | W3C HTML5 표준에 부합 |
[스크린 리더가 읽는 방식]
비시맨틱: <div class="nav"> → "그룹" (의미 없음)
시맨틱: <nav> → "내비게이션 영역" (역할 명확)
비시맨틱: <div class="title"> → "텍스트"
시맨틱: <h1> → "제목 레벨 1" (문서 구조 파악 가능)
[검색 엔진이 파악하는 방식]
비시맨틱: <div>블로그 글 내용</div>
→ 검색 엔진: "이건 뭔지 모르겠음"
시맨틱: <article><h1>제목</h1><p>내용</p></article>
→ 검색 엔진: "독립적인 글이고, 제목은 이거고, 본문은 이거구나"
→ 검색 결과 상위 노출 가능성 ↑
자주 하는 실수
| X 잘못된 사용 | O 올바른 사용 | 이유 |
<div> 남발 | 적절한 시맨틱 태그 사용 | div는 의미 없는 컨테이너 |
<b>굵게</b> | <strong>중요</strong> | b는 시각적, strong은 의미적 강조 |
<i>기울임</i> | <em>강조</em> | i는 시각적, em은 의미적 강조 |
<br>로 간격 조정 | CSS margin/padding | br은 줄바꿈 의미 |
<h1>을 크기 목적으로 사용 | CSS font-size로 크기 조절 | h1~h6은 제목 계층 의미 |
<table>로 레이아웃 구성 | CSS Grid/Flexbox | table은 표 데이터 전용 |
<!-- X h 태그를 크기 목적으로 사용 -->
<h1>페이지 제목</h1>
<h3>바로 소제목</h3> <!-- h2를 건너뜀 → 구조 깨짐 -->
<h6>작은 글씨가 필요해서</h6> <!-- 크기 목적 → 잘못된 사용 -->
<!-- O 계층 순서를 지킴 -->
<h1>페이지 제목</h1>
<h2>소제목</h2>
<h3>세부 제목</h3>
<p style="font-size: 12px;">작은 글씨는 CSS로</p>
article vs section
| 태그 | 의미 | 판단 기준 |
<article> | 독립적으로 배포 가능한 콘텐츠 | RSS 피드로 뽑아내도 의미가 통하는가? |
<section> | 주제별로 묶인 관련 콘텐츠 그룹 | 문서의 개요에서 하나의 항목이 되는가? |
<!-- article: 독립적인 블로그 글 -->
<article>
<h2>TypeScript 입문 가이드</h2>
<p>TypeScript는 JavaScript의 상위 집합입니다...</p>
<time datetime="2026-02-25">2026년 2월 25일</time>
</article>
<!-- section: 한 페이지 내의 주제별 구분 -->
<section>
<h2>경력 사항</h2>
<p>2020~2023 A 회사 백엔드 개발자</p>
</section>
<section>
<h2>기술 스택</h2>
<p>Java, Spring, TypeScript</p>
</section>