표의 헤더 셀. scope 속성으로 열 헤더(col) 또는 행 헤더(row)를 명시. td(데이터 셀)와 구분되는 시맨틱이 스크린리더의 셀 발화, AI의 데이터 매핑에 결정적.
SEO 관점에서 th의 텍스트가 표 헤더 라벨로 검색의 표 추출에 활용. "X의 Y값은?" 같은 검색 매칭에 th가 컨텍스트.
GEO 관점에서 AI가 데이터 셀에 라벨을 매핑하는 핵심. "Pro 요금제의 저장공간은?" 답변 시 — Pro 행 헤더 + 저장공간 열 헤더로 100GB 셀 식별. th + scope가 이 매핑의 기반.
A11y 관점에서 가장 critical. 스크린리더가 데이터 셀을 발화할 때 해당 행/열 헤더를 자동 함께 발화. scope가 그 매커니즘 — "Pro, 저장공간, 100GB" 같은 형태. scope 없거나 th가 td면 "100GB"만 발화 — 무엇의 100GB인지 모름.
자주 보는 안티패턴: 행 헤더가 td(첫 열이 Basic, Pro, Enterprise 같은 라벨인데 td로 박으면 행 헤더 시맨틱 손실), scope 누락(일부 환경에서 자동 추론하지만 명시가 안전), scope를 td에 박기(scope는 th에만 — td의 scope는 무시), 데이터 셀에 th(데이터인데 헤더 시맨틱).
scope 속성의 4가지 값:
- col: 이 셀이 열 헤더
- row: 이 셀이 행 헤더
- colgroup: 여러 열의 헤더
- rowgroup: 여러 행의 헤더
대부분의 경우 col과 row로 충분. colgroup·rowgroup은 다단계 헤더에.
headers 속성 (셀의) — 복잡한 표에서 셀과 헤더를 명시적으로 연결. 표가 복잡해 scope만으로 부족할 때:
<th id="region">지역</th>
<th id="2025">2025</th>
<td headers="region 2025">서울 2025년 데이터</td>
abbr 속성 — 헤더의 축약 형태. 스크린리더가 데이터 셀을 발화할 때 긴 헤더 대신 축약을 사용. "2026년 1분기 매출" 헤더에 abbr="Q1"로 두면 "Q1, 1,250"으로 간결 발화.
<th colspan="N"> — 다단계 헤더 또는 행 그룹 라벨. 셀 병합.
도감의 hub 페이지에서 td/th 적용 — 카드 그리드는 table이 아닌 ul + li로 마크업. 데이터 표가 아닌 카드 목록이라 시리즈 #7의 결정 트리에 따라 목록이 정답. 다만 시리즈 #5에서 본 비교 페이지나 시리즈 #7에서 본 가격표가 들어가는 페이지에서는 table + th + td.