HTML meta 태그 완벽 가이드: SEO부터 소셜 미디어 최적화까지
HTML meta 태그의 모든 것을 알아봅니다. charset, viewport, description부터 Open Graph, Twitter Card, AI 봇 제어까지 실무에서 필요한 메타 태그를 상세히 설명합니다.
HTML <meta> 태그 완벽 가이드
문서의 메타데이터를 정의하는 <meta> 태그는 검색엔진, 브라우저, 소셜 미디어에 페이지 정보를 제공하는 핵심 요소입니다. 이 가이드에서는 실무에서 필요한 모든 메타 태그 사용법을 다룹니다.
관련 상세 가이드
이 문서의 주제를 더 깊이 다루는 상세 가이드입니다:
| 가이드 | 설명 |
|---|---|
| Open Graph 메타 태그 완벽 가이드 | Facebook, LinkedIn, KakaoTalk 소셜 미디어 공유 최적화 |
| HTML meta refresh 리다이렉트 가이드 | JavaScript 없이 페이지 자동 이동 구현 |
| HTML SEO 완벽 가이드: 시멘틱 태그 | 시멘틱 HTML 태그와 검색엔진 최적화 |
목차
- 기본 문법과 주요 속성
- charset - 문자 인코딩
- viewport - 반응형 웹
- SEO 관련 메타 태그
- AI 봇 제어
- http-equiv - HTTP 헤더 설정
- Open Graph (OG) 태그
- Twitter Card 태그
- 테마 및 색상
- 기타 유용한 메타 태그
- 시멘틱 HTML과 SEO
- 실무 템플릿
- SEO 체크리스트
기본 문법과 주요 속성
<meta charset="UTF-8">
<meta name="속성명" content="값">
<meta http-equiv="헤더명" content="값">
<meta property="og:속성" content="값">
<meta>태그는 void element로 종료 태그가 없습니다.
주요 속성
| 속성 | 설명 | 예시 |
|---|---|---|
charset | 문자 인코딩 선언 | charset="UTF-8" |
name | 메타데이터 이름 | name="description" |
content | 메타데이터 값 | content="페이지 설명" |
http-equiv | HTTP 헤더 설정 | http-equiv="refresh" |
property | Open Graph 속성 | property="og:title" |
media | 미디어 쿼리 (theme-color용) | media="(prefers-color-scheme: dark)" |
charset - 문자 인코딩
문서의 문자 인코딩을 선언합니다. 반드시 문서의 첫 1024 바이트 내에 위치해야 합니다.
<meta charset="UTF-8">
주의사항
- HTML5에서는 UTF-8만 유효합니다
<head>태그 바로 다음에 위치시키는 것이 권장됩니다- 레거시 방식:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
viewport - 반응형 웹
모바일 브라우저의 뷰포트 설정을 제어합니다.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
viewport 속성값
| 속성 | 설명 | 값 |
|---|---|---|
width | 뷰포트 너비 | device-width 또는 픽셀값 |
height | 뷰포트 높이 | device-height 또는 픽셀값 |
initial-scale | 초기 확대 비율 | 0.1 ~ 10.0 |
minimum-scale | 최소 확대 비율 | 0.1 ~ 10.0 |
maximum-scale | 최대 확대 비율 | 0.1 ~ 10.0 |
user-scalable | 사용자 확대/축소 허용 | yes / no |
예시
<!-- 기본 반응형 설정 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 확대 제한 (접근성 문제로 권장하지 않음) -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
SEO 영향: viewport 태그가 있으면 Google에서 페이지를 모바일 친화적으로 인식합니다.
SEO 관련 메타 태그
description - 페이지 설명
검색 결과에 표시되는 페이지 설명입니다.
<meta name="description" content="이 페이지는 HTML meta 태그의 사용법과 SEO 최적화 방법을 설명합니다.">
권장 길이: 150-160자 (모바일에서는 더 짧게 표시됨)
keywords - 키워드
<meta name="keywords" content="HTML, meta 태그, SEO, viewport">
참고: 현재 Google은 keywords 태그를 검색 순위에 반영하지 않습니다. 남용 때문에 무시됩니다.
robots - 검색 로봇 제어
<meta name="robots" content="index, follow">
| 값 | 설명 |
|---|---|
index | 페이지 색인 허용 |
noindex | 페이지 색인 금지 |
follow | 링크 추적 허용 |
nofollow | 링크 추적 금지 |
noarchive | 캐시 저장 금지 |
nosnippet | 검색 결과 미리보기 금지 |
author - 저자
<meta name="author" content="홍길동">
AI 봇 제어
AI 학습 데이터 수집을 제어합니다. 검색 순위에는 영향 없음.
<!-- AI 학습 차단 -->
<meta name="GPTBot" content="noindex, nofollow">
<meta name="Google-Extended" content="noindex">
<meta name="ClaudeBot" content="noindex, nofollow">
<meta name="CCBot" content="noindex, nofollow">
<!-- AI 학습 허용 -->
<meta name="GPTBot" content="index, follow">
주요 AI 크롤러 목록
| 봇 이름 | 소유사 | 용도 |
|---|---|---|
GPTBot | OpenAI | ChatGPT 학습 데이터 수집 |
ChatGPT-User | OpenAI | ChatGPT 검색 기능 (학습 아님) |
Google-Extended | Gemini AI 학습 (검색 순위 무관) | |
ClaudeBot | Anthropic | Claude AI 학습 |
Claude-User | Anthropic | Claude 검색 기능 |
CCBot | Common Crawl | 오픈소스 AI 학습 데이터 |
Bytespider | ByteDance | TikTok AI 학습 |
Meta-ExternalAgent | Meta | Facebook/Instagram AI |
PerplexityBot | Perplexity | AI 검색 엔진 |
Applebot-Extended | Apple | Apple AI 학습 |
전략별 설정
1. 완전 차단 (콘텐츠 보호 우선)
<meta name="GPTBot" content="noindex, nofollow">
<meta name="ClaudeBot" content="noindex, nofollow">
<meta name="Google-Extended" content="noindex">
<meta name="CCBot" content="noindex, nofollow">
2. AI 검색 허용 + 학습 차단 (노출은 되지만 학습에는 사용 안됨)
<!-- 검색용 봇 허용 -->
<meta name="ChatGPT-User" content="index, follow">
<meta name="Claude-User" content="index, follow">
<!-- 학습용 봇 차단 -->
<meta name="GPTBot" content="noindex, nofollow">
<meta name="ClaudeBot" content="noindex, nofollow">
3. 전체 허용 (노출 극대화)
<meta name="GPTBot" content="index, follow">
<meta name="ClaudeBot" content="index, follow">
<meta name="Google-Extended" content="index">
참고: 더 정밀한 제어는
robots.txt파일 사용을 권장합니다.
http-equiv - HTTP 헤더 설정
http-equiv는 "HTTP equivalent"(HTTP 동등물)의 약자입니다. HTML 문서 내에서 HTTP 헤더와 동일한 효과를 낼 수 있게 해줍니다.
<!-- 서버에서 설정하는 HTTP 헤더 -->
Content-Type: text/html; charset=utf-8
Refresh: 5
<!-- HTML에서 동일한 효과 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="5">
http-equiv vs name 차이
| 구분 | http-equiv | name |
|---|---|---|
| 용도 | HTTP 헤더 시뮬레이션 | 문서 메타데이터 |
| 처리 | 브라우저가 HTTP 헤더처럼 처리 | 검색엔진/브라우저가 참고 |
| 예시 | refresh, content-type, CSP | description, viewport, robots |
refresh - 페이지 새로고침/리다이렉트
JavaScript 없이 HTML만으로 페이지를 새로고침하거나 다른 URL로 리다이렉트할 수 있습니다.
<!-- 5초 후 현재 페이지 새로고침 -->
<meta http-equiv="refresh" content="5">
<!-- 3초 후 다른 페이지로 리다이렉트 -->
<meta http-equiv="refresh" content="3;url=https://example.com">
<!-- 즉시 리다이렉트 (0초) -->
<meta http-equiv="refresh" content="0;url=https://example.com/new-page">
리다이렉트 실무 예제
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<!-- 5초 후 새 페이지로 리다이렉트 -->
<meta http-equiv="refresh" content="5;url=https://example.com/new-location">
<title>페이지 이동 중...</title>
</head>
<body>
<p>페이지가 이동되었습니다.</p>
<p>5초 후 자동으로 이동합니다.</p>
<p>자동으로 이동하지 않으면 <a href="https://example.com/new-location">여기를 클릭</a>하세요.</p>
</body>
</html>
리다이렉트 주의사항
| 항목 | 설명 |
|---|---|
| SEO | 검색엔진은 meta refresh를 301/302 리다이렉트보다 낮게 평가합니다. 영구 이동은 서버 리다이렉트 권장 |
| 접근성 | 스크린 리더 사용자에게 혼란을 줄 수 있음. 0초 즉시 이동은 피하는 것이 좋음 |
| 사용자 경험 | 뒤로가기 버튼이 제대로 작동하지 않을 수 있음 |
| 권장 상황 | 임시 안내 페이지, 점검 페이지, 레거시 URL 이전 고지 |
권장: 영구적인 URL 변경은 서버 측 301 리다이렉트를 사용하세요.
기타 http-equiv 값
<!-- IE 호환성 모드 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- 보안 정책 (CSP) -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
Open Graph (OG) 태그
소셜 미디어에서 공유 시 표시되는 정보를 정의합니다.
<!-- 기본 정보 -->
<meta property="og:type" content="website">
<meta property="og:title" content="페이지 제목">
<meta property="og:description" content="페이지 설명">
<meta property="og:url" content="https://example.com/page">
<meta property="og:image" content="https://example.com/image.jpg">
<!-- 추가 정보 -->
<meta property="og:site_name" content="사이트 이름">
<meta property="og:locale" content="ko_KR">
og:type 값
| 값 | 설명 | 사용 예 |
|---|---|---|
website | 일반 웹사이트 | 홈페이지, 랜딩 페이지 |
article | 블로그/뉴스 기사 | 블로그 포스트, 뉴스 기사 |
video.movie | 영화 | 영화 정보 페이지 |
video.episode | TV 에피소드 | TV 프로그램 |
music.song | 음악 | 음원 페이지 |
profile | 프로필 페이지 | 사용자 프로필 |
product | 제품 페이지 | 쇼핑몰 상품 |
article 타입 전용 태그
<meta property="article:published_time" content="2024-01-15T09:00:00+09:00">
<meta property="article:modified_time" content="2024-01-20T14:30:00+09:00">
<meta property="article:author" content="https://example.com/author/name">
<meta property="article:section" content="Technology">
<meta property="article:tag" content="HTML">
이미지 권장 사양
| 플랫폼 | 권장 크기 | 비율 |
|---|---|---|
| 1200 x 630px | 1.91:1 | |
| 1200 x 627px | 1.91:1 | |
| KakaoTalk | 800 x 400px | 2:1 |
OG 디버깅 도구
Twitter Card 태그
트위터(X)에서 공유 시 표시되는 정보를 정의합니다.
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="제목">
<meta name="twitter:description" content="설명">
<meta name="twitter:image" content="https://example.com/image.jpg">
<meta name="twitter:site" content="@사이트계정">
<meta name="twitter:creator" content="@작성자계정">
twitter:card 값
| 값 | 설명 | 이미지 |
|---|---|---|
summary | 작은 이미지 + 제목/설명 | 최소 144x144px, 최대 4096x4096px |
summary_large_image | 큰 이미지 + 제목/설명 | 최소 300x157px, 권장 1200x628px |
app | 앱 다운로드 카드 | 앱 아이콘 사용 |
player | 비디오/오디오 플레이어 | 플레이어 임베드 |
Open Graph 폴백
Twitter는 twitter: 태그가 없으면 og: 태그를 대신 사용합니다.
| Twitter Card | Open Graph 폴백 |
|---|---|
twitter:title | og:title |
twitter:description | og:description |
twitter:image | og:image |
테마 및 색상
theme-color - 브라우저 테마 색상
<meta name="theme-color" content="#0078D7">
<!-- 다크모드 대응 -->
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)">
color-scheme - 색상 체계
<meta name="color-scheme" content="light dark">
기타 유용한 메타 태그
referrer - Referrer 정책
사용자가 링크를 클릭할 때 이전 페이지의 URL 정보가 얼마나 전달되는지 제어합니다.
<meta name="referrer" content="strict-origin-when-cross-origin">
| 값 | 설명 | 전달되는 정보 |
|---|---|---|
no-referrer | Referrer 전송 안함 | 없음 |
no-referrer-when-downgrade | HTTPS→HTTP 시 전송 안함 | 전체 URL (기본값) |
origin | 출처(도메인)만 전송 | https://example.com |
origin-when-cross-origin | 같은 사이트는 전체 URL, 다른 사이트는 출처만 | 조건부 |
same-origin | 같은 사이트에만 전송 | 조건부 |
strict-origin | HTTPS→HTTP 시 전송 안함, 그 외 출처만 | https://example.com |
strict-origin-when-cross-origin | 권장 | 조건부 |
unsafe-url | 항상 전체 URL 전송 (보안 취약) | 전체 URL |
format-detection - 자동 감지 비활성화
모바일 브라우저가 전화번호, 이메일 등을 자동으로 링크로 만드는 기능을 제어합니다.
<!-- 전화번호 자동 링크 비활성화 -->
<meta name="format-detection" content="telephone=no">
<!-- 여러 항목 비활성화 -->
<meta name="format-detection" content="telephone=no, email=no, address=no">
사용 예시
<head>
<meta name="format-detection" content="telephone=no">
</head>
<body>
<!-- 전화번호 아님 - 링크 안됨 -->
<p>주문번호: 010-1234-5678</p>
<!-- 실제 전화번호 - 수동 링크 -->
<p>고객센터: <a href="tel:+82-2-1234-5678">02-1234-5678</a></p>
</body>
참고: 이 메타 태그는 주로 iOS Safari에서 작동합니다.
시멘틱 HTML과 SEO
검색엔진은 시멘틱 태그를 통해 페이지 구조와 콘텐츠의 중요도를 파악합니다.
문서 구조 태그
| 태그 | 용도 | SEO 해석 | 접근성 랜드마크 |
|---|---|---|---|
<header> | 페이지/섹션 헤더 | 브랜드, 네비게이션 영역 | banner |
<nav> | 네비게이션 링크 | 사이트 구조 파악, 내부 링크 중요도 | navigation |
<main> | 주요 콘텐츠 (1개) | 핵심 콘텐츠 영역 | main |
<article> | 독립적 콘텐츠 | 개별 색인 가능한 콘텐츠 | article |
<section> | 주제별 그룹 | 콘텐츠 주제 구분 | region (제목 필요) |
<aside> | 부가 콘텐츠 | 주요 콘텐츠와 분리됨 | complementary |
<footer> | 페이지/섹션 푸터 | 저작권, 보조 정보 | contentinfo |
검색엔진 처리 우선순위
1. <main> 내부 콘텐츠 (핵심) - 가장 높은 가중치
2. <article> 내부 콘텐츠 (개별 색인 대상)
3. <header>/<nav> (사이트 구조 파악)
4. <aside> (부가 정보)
5. <footer> (보조 정보) - 가장 낮은 가중치
헤딩 태그 (h1-h6)
콘텐츠의 계층 구조를 정의하는 SEO에서 가장 중요한 태그 중 하나입니다.
| 태그 | 용도 | 권장 사항 |
|---|---|---|
<h1> | 페이지 주제 | 페이지당 1개만, 핵심 키워드 포함 |
<h2> | 주요 섹션 제목 | 주요 키워드/주제 포함 |
<h3> | 하위 섹션 제목 | h2 아래 세부 주제 |
<h4-h6> | 더 세부적인 구분 | 필요시에만 사용 |
헤딩 규칙:
- 계층 순서 준수: h1 → h2 → h3 (건너뛰기 금지)
- h1은 페이지당 1개만
- 스타일 목적으로 헤딩 태그 선택 금지
올바른 시멘틱 구조 예시
<body>
<header>
<h1>사이트 제목</h1>
<nav>...</nav>
</header>
<main>
<article>
<h2>글 제목</h2>
<section>
<h3>섹션 제목</h3>
<p>내용...</p>
</section>
</article>
</main>
<aside>관련 글</aside>
<footer>저작권 정보</footer>
</body>
article vs section 차이
| 구분 | <article> | <section> |
|---|---|---|
| 독립성 | 독립적으로 배포/재사용 가능 | 단독으로는 의미 불완전 |
| 예시 | 블로그 포스트, 뉴스 기사, 댓글 | 챕터, 탭 내용, 주제별 그룹 |
| RSS | 피드 항목으로 배포 가능 | 해당 없음 |
실무 템플릿
기본 웹페이지
<!DOCTYPE html>
<html lang="ko">
<head>
<!-- 필수 메타 태그 -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- SEO 메타 태그 -->
<title>페이지 제목 | 사이트명</title>
<meta name="description" content="페이지에 대한 간결하고 명확한 설명 (150-160자)">
<meta name="robots" content="index, follow">
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:title" content="페이지 제목">
<meta property="og:description" content="페이지 설명">
<meta property="og:url" content="https://example.com/page">
<meta property="og:image" content="https://example.com/og-image.jpg">
<meta property="og:site_name" content="사이트명">
<meta property="og:locale" content="ko_KR">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="페이지 제목">
<meta name="twitter:description" content="페이지 설명">
<meta name="twitter:image" content="https://example.com/twitter-image.jpg">
<!-- 테마 색상 -->
<meta name="theme-color" content="#0078D7">
<!-- 캐노니컬 URL -->
<link rel="canonical" href="https://example.com/page">
</head>
<body>
<!-- 콘텐츠 -->
</body>
</html>
SEO 체크리스트
필수 메타 태그
-
charset="UTF-8"설정 (첫 1024바이트 내) -
viewport태그로 반응형 설정 -
title태그 50-60자, 키워드 앞쪽 배치 -
description은 150-160자 이내로 작성 - 각 페이지마다 고유한 title, description 작성
- 중복 페이지는 canonical 태그 설정
- 색인 원치 않는 페이지는
robots="noindex"설정
소셜 미디어
-
og:image는 1200x630px 권장 -
og:title,og:description,og:url설정 -
twitter:card설정 (summary_large_image 권장) -
twitter:image는 최소 280x150px
시멘틱 HTML
-
<h1>태그 페이지당 1개만 사용 - 헤딩 계층 구조 준수 (h1→h2→h3, 건너뛰기 금지)
-
<main>태그로 핵심 콘텐츠 감싸기 -
<article>태그로 독립 콘텐츠 구분 -
<nav>태그로 네비게이션 감싸기 -
<header>,<footer>적절히 사용
콘텐츠 최적화
- 이미지에 설명적
alt텍스트 - 이미지
width/height지정 (CLS 방지) - 이미지
loading="lazy"설정 - 링크에 설명적 앵커 텍스트 ("여기 클릭" 금지)
- 목록 태그로 정보 구조화 (
<ul>,<ol>) -
<time datetime="">태그로 날짜 표시
AI 봇 제어 (선택)
- 콘텐츠 보호 시 AI 학습 차단 메타 태그 추가
- 또는 robots.txt에서 AI 크롤러 제어