Menu

시맨틱 HTML: 시맨틱 태그, 페이지 구조, 접근성

시맨틱 HTML은 모양이 아니라 내용이 무엇인지에 따라 태그를 고르는 거예요. 시맨틱 레이아웃 태그(header, nav, main, article, aside, footer), 이 태그들이 스크린 리더와 검색 엔진에 주는 것, 페이지 구조를 확인하는 법을 알아봐요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

시맨틱 HTML이란

시맨틱 HTML은 각 태그를 내용이 무엇인지에 따라 고르는 거예요. 내비게이션은 <nav>에, 주요 콘텐츠는 <main>에, 블로그 글은 <article>에 넣어요. 태그들은 평범한 상자처럼 보이지만, 페이지의 각 부분이 무슨 일을 하는지 브라우저, 스크린 리더, 검색 엔진에 알려 줘요. 여기 시맨틱 레이아웃 태그로 만든 전체 페이지가 있고, 각 태그에 테두리와 이름을 붙였어요.

<style> 요소를 지우면 페이지가 일반 텍스트처럼 보이지만, 코드를 읽는 사람과 화면의 픽셀을 보지 않고 코드를 읽는 소프트웨어에게는 구조가 그대로 남아 있어요.

시맨틱 레이아웃 태그

태그용도스크린 리더 랜드마크
<header>페이지나 글의 도입부: 로고, 제목, 작성자banner(article, aside, main, nav, section 안에 있지 않을 때만)
<nav>주요 내비게이션 링크 묶음navigation
<main>이 페이지에만 있는 콘텐츠, 페이지당 하나main
<article>그 자체로 의미가 통하는 독립적인 내용: 글, 댓글, 상품 카드기본값 없음
<section>자체 제목이 있는 주제별 콘텐츠 묶음region, 접근 가능한 이름이 있을 때만
<aside>주요 흐름 옆의 관련 콘텐츠: 사이드바, 메모complementary
<footer>페이지나 글의 마무리 정보: 저작권, 작성자, 링크contentinfo(페이지 수준에서만)

각 태그는 따로 자세한 페이지가 있어요. header, nav, section, footer예요. 이 페이지에서는 이 태그들이 어떻게 맞물리는지 다뤄요.

그냥 div를 쓰면 안 되는 이유

<div>로만 만든 페이지도 시맨틱 페이지와 똑같아 보일 수 있어요. 차이는 마크업이 무엇을 말하느냐예요. 버튼을 눌러 각 버전에서 의미를 가진 요소에 테두리를 표시해 보세요.

div 버전은 0개, 시맨틱 버전은 4개를 찾아요. 그게 보조 기술이 보는 모습이에요. 시맨틱 페이지에서는 스크린 리더 사용자가 내비게이션이나 주요 콘텐츠로 바로 건너뛸 수 있지만, div 페이지에서는 전부 읽어 내려가야 해요. class="nav" 같은 클래스 이름은 브라우저에게 아무 의미도 없어요.

첫 번째 예제의 .cols flex 래퍼처럼 스타일이나 레이아웃만을 위한 상자에는 여전히 <div>가 알맞아요.

main, article, aside

<main>은 이 페이지에만 있는 것을 감싸고 한 번만 나와요. 그 안에서 <article>은 다른 사이트에 그대로 옮겨도 의미가 통하는 콘텐츠를 표시하고, <aside>는 관련은 있지만 빼도 글이 깨지지 않는 콘텐츠를 표시해요.

article에는 자체 <header>와 <footer>가 있어요. 이 태그들은 페이지 수준에만 쓰는 게 아니에요. 각각 가장 가까운 article이나 section을 열거나 닫아요. <time datetime> 요소는 날짜를 사람이 읽는 형태로 보여 주면서 기계가 읽을 수 있는 형태로도 제공해요.

제목 개요 확인하기

제목은 구조의 나머지 절반이에요. 스크린 리더 사용자는 제목에서 제목으로 페이지를 이동하는 경우가 많아서, 단계가 건너뛰지 않고 목차처럼 읽혀야 해요. 이 스크립트는 자기가 실행되는 페이지의 개요를 출력해요.

"Brewing" 아래의 h4는 단계를 하나 건너뛰어요. h3으로 바꾸면 개요가 깔끔하게 읽혀요. 제목 단계는 구조에 따라 고르고, 더 크거나 작게 하고 싶으면 CSS로 크기를 바꾸세요.

다른 시맨틱 태그

시맨틱은 레이아웃만의 문제가 아니에요. 이런 텍스트 수준 태그도 의미를 담아요.

태그의미
<strong>중요한 텍스트(기본적으로 굵게)
<em>강세를 둔 강조(기본적으로 기울임꼴)
<figure>와 <figcaption>캡션이 딸린 이미지, 차트, 코드 예제
<time datetime="...">기계가 읽을 수 있는 형태의 날짜나 시간
<address>페이지나 글 작성자의 연락처
<mark>검색 결과 일치처럼 하이라이트한 텍스트
<abbr title="...">전체 형태가 딸린 약어
<button>동작을 수행하는 것

"W3C" 약어에 마우스를 올리면 툴팁으로 전체 형태가 보여요.

자주 하는 실수

  • 모양 때문에 태그를 씀. <blockquote>는 들여쓰기가 아니라 인용문용이고, <h3>은 중간 크기의 굵은 글씨가 아니라 제목 단계용이에요. 꾸미는 건 CSS로 하세요.
  • 모든 것을 <section>으로 감쌈. section에는 제목과 주제가 있어야 해요. 스타일용 상자가 필요하면 <div>를 쓰세요.
  • 보이는 <main>이 여러 개. 페이지당 하나만 두고, 절대 <article>, <aside>, <header>, <nav>, <footer> 안에 넣지 마세요.
  • 모든 링크 목록을 <nav>에 넣음. 사이트 메뉴나 목차 같은 주요 내비게이션 묶음에만 쓰세요. 푸터의 링크 몇 개에는 필요 없어요.
  • 클릭할 수 있는 <div> 요소. <div onclick>은 키보드로 갈 수 없어요. 동작에는 <button>을, 이동에는 <a href>를 쓰세요.

자주 묻는 질문

시맨틱 HTML이란 무엇인가요?

시맨틱 HTML은 각 태그가 내용의 의미를 설명하는 마크업이에요. 내비게이션에는 <nav>, 독립적인 글에는 <article>, 버튼에는 <button>을 써요. 그러면 브라우저, 스크린 리더, 검색 엔진이 클래스 이름이나 스타일로 추측하지 않고도 페이지를 이해할 수 있어요.

HTML의 시맨틱 태그에는 무엇이 있나요?

레이아웃 태그는 <header>, <nav>, <main>, <article>, <section>, <aside>, <footer>예요. 그 밖에 자주 쓰는 시맨틱 태그로 <figure>, <figcaption>, <time>, <address>, <strong>, <em>, 제목 <h1>~<h6>이 있어요.

div는 시맨틱 요소인가요?

아니요. <div>는 그 자체로 의미가 없고, 스타일과 레이아웃을 위한 범용 상자예요. 맞는 시맨틱 태그가 없을 때 쓰고, 맞는 게 있으면 <header>, <main>, <nav> 등을 쓰세요.

aside 태그는 어디에 쓰나요?

<aside>는 주요 콘텐츠와 관련 있지만 그 흐름에 속하지 않는 내용을 담아요. 사이드바, 관련 링크 상자, 용어 설명, 인용구 같은 거예요. 페이지 수준에서는 스크린 리더가 보조(complementary) 랜드마크로 보여 줘요.

한 페이지에 main 요소는 몇 개까지 쓸 수 있나요?

페이지당 보이는 <main>은 하나예요. 그 페이지에만 있는 콘텐츠를 감싸고, <header>, <nav>, <article>, <aside>, <footer> 안에 들어가면 안 돼요.

시맨틱 HTML이 SEO에 도움이 되나요?

검색 엔진이 페이지의 어느 부분이 주요 콘텐츠이고 어느 부분이 내비게이션인지, 제목들이 어떻게 연결되는지 이해하는 데 도움이 돼요. 그 자체로 순위를 올리는 지름길은 아니지만 추측을 없애 주고 접근성을 높여서, 어차피 할 만한 가치가 있어요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기