" 는 렌더 안 돼. 정확히 그래서 너의 버그 절반이 거기 살아."
반드시 맞아야 할 여섯 줄
눈에 보이는 콘텐츠 전에, 모든 페이지에 렌더되지 않는 여섯 가지가 필요해. 하나라도 빠지면 뭔가가 조용히 망가져 — 잘못된 문자 인코딩, 모바일에서 흐릿한 렌더링, 탭 제목 없음, 공유 미리보기 없음, 검색 결과에 설명 없음. 하나씩 짚고 빠졌을 때 무슨 일이 생기는지 보자.
1. <!DOCTYPE html> — 항상 첫 줄
이건 태그가 아니야. 브라우저 파서한테 보내는 신호야: 모던 표준-준수 HTML 렌더링을 써라. 빼면 브라우저가 조용히 quirks mode 로 떨어져 — 옛 페이지가 깨지지 말라고 1990 년대 layout 버그를 의도적으로 재현하는 backward-compat 레이어야. Quirks mode 는 box-sizing 동작을 망가뜨리고, 모던 table-layout 알고리즘을 무시하고, flexbox 를 조용히 깨뜨리는 짓들을 해. 공포의 현장이야. <!DOCTYPE html> 을 항상 맨 앞에 놔.
2. <html lang="en"> — 언어 선언
lang 속성은 screen reader 한테 어떤 음성을 쓸지 (영어 vs 한국어 vs 일본어) 알려 주고, 브라우저한테 어떤 hyphenation 규칙을 쓸지 알려 주고, 검색 엔진한테 이 페이지를 어떤 언어 결과에서 보여줄지 알려 줘. 빼면 screen reader 가 한국어 페이지를 영어 발음으로 읽을 수 있어 (들리는 만큼 끔찍해).
3. <meta charset="utf-8"> — 안 첫 줄
UTF-8 은 2026 년에 출시할 유일한 문자 인코딩이야.
안에 맨 처음 놔서 브라우저가 텍스트 파싱 전에 인코딩을 알게 해. 빼면 너의 이모지, 악센트 문자, 한국어가 한국어 → ?Œ ¬Œ‹ÄÌ» 같은 헛소리로 변해.4. <meta name="viewport" content="width=device-width, initial-scale=1">
이거 없으면 모바일 브라우저가 980px 너비 데스크톱인 척하고 zoom out 해 — 옛 비반응형 사이트가 폰에서 우표만 하게 보이는 이유. Viewport meta 는 "기기 실제 너비로 zoom 1 에서 렌더" 라고 알려. 모든 모던 페이지에 필요해. 단 하나도 빠짐없이.
5. <title> — 탭 제목, bookmark 이름, 검색 결과 헤드라인
6. <meta name="description"> + Open Graph
Description meta 는 검색 엔진이 title 아래 보여주는 글. Open Graph 태그 (og:title, og:image, og:description) 는 Slack/iMessage/Discord/Twitter 가 URL 붙여 넣었을 때 렌더하는 것. 장식이 아니야 — 페이지가 공유될 때 야생에서 어떻게 보일지를 결정해.
모던 미니멀 템플릿
<!DOCTYPE html>, <html lang>, <meta charset>, <meta viewport>, <title>, <meta description>. 나머지 (favicon, OG, font 링크) 는 이 토대 위에 얹혀.골격
<header> + <nav> + <main> + (선택 <aside>) + <footer>. 페이지당 <main> 정확히 하나 (스펙이 요구). <main> 안에 <h1> 정확히 하나 — 페이지 주요 heading. Screen reader 가 이 구조를 써서 사용자가 단축키 한 번에 콘텐츠로 점프하게 해.