이미지 alt 속성은 시각장애인이 스크린리더로 콘텐츠를 이해하는 접근성의 기본이면서, 검색엔진이 이미지를 텍스트로 해석하는 SEO 신호이기도 합니다. 상품·게시글이 계속 늘어나는 사이트는 alt를 매번 손으로 입력하기 어려워, DB와 연동해 자동 생성·검증하는 구조가 필요합니다.
alt 텍스트가 없을 때 실제로 벌어지는 일
alt가 비어 있으면 스크린리더는 파일명(IMG_2024.jpg)을 그대로 읽거나 "이미지"라고만 안내해 시각장애인 사용자에게 정보가 전달되지 않습니다. 검색엔진 역시 이미지 자체의 시각 내용을 완전히 이해하지 못하므로, alt 텍스트가 이미지 검색 유입과 문맥 이해에 중요한 역할을 합니다.
의미 있는 이미지 vs 장식용 이미지 구분
모든 이미지에 무조건 긴 alt를 넣는 것이 정답은 아닙니다.
- 의미 있는 이미지 (상품 사진, 인물, 인포그래픽) — 구체적이고 설명적인 alt 필수
- 장식용 이미지 (배경 패턴, 구분선) —
alt=""또는role="presentation"으로 스크린리더가 건너뛰게 처리
장식용 이미지에까지 억지로 설명을 채우면 오히려 스크린리더 사용자에게 불필요한 정보 과부하를 줍니다.
DB 자동 생성 템플릿 설계
상품·게시글 이미지처럼 대량으로 등록되는 경우, 데이터 필드를 조합해 자동으로 alt를 생성하는 규칙을 만듭니다.
<?php
function generate_alt($item) {
return trim($item['category'] . ' ' . $item['name'] . ' 이미지');
}
// 예: "여성 니트 원피스 이미지"
?>
<img src="<?php echo $item['thumb']; ?>"
alt="<?php echo htmlspecialchars(generate_alt($item)); ?>">자동 생성 규칙은 상품명·카테고리를 그대로 나열하는 수준에서 시작해도 충분하며, 완전히 비어 있는 것보다 훨씬 낫습니다.
DB 테이블 설계 예시
이미지마다 수동 보정이 가능하도록 자동 생성 값과 수동 입력 값을 분리해 저장하는 구조가 유지보수에 유리합니다.
CREATE TABLE image_alt (
img_id INT PRIMARY KEY,
auto_alt VARCHAR(255), -- 자동 생성값
manual_alt VARCHAR(255) NULL, -- 수동 보정값 (있으면 우선 사용)
updated_at DATETIME
);출력 시에는 manual_alt가 있으면 우선 사용하고, 없으면 auto_alt로 폴백하는 방식으로 처리합니다.
업로드 시점 검증 규칙
| 검증 항목 | 기준 |
|---|---|
| alt 필수 여부 | 상품·게시글 대표 이미지는 필수, 장식용은 예외 |
| 길이 제한 | 보통 125자 이내로 간결하게 |
| 금지 패턴 | "이미지", "사진" 단독 사용, 키워드 반복 나열 금지 |
| 파일명 그대로 사용 금지 | IMG_1234.jpg 같은 파일명 그대로 alt에 넣지 않기 |
기존에 쌓인 이미지에 일괄 보정 적용하기
이미 alt 없이 등록된 이미지가 수천 건이라면, 전체를 한 번에 손으로 고치는 대신 다음 순서로 접근합니다.
- alt가 비어 있는 이미지 목록을 우선 SQL로 추출
- DB 필드 조합으로 자동 생성 규칙을 일괄 적용(백필)
- 트래픽이 높은 상위 이미지부터 수동 검수·보정
- 이후 신규 업로드부터는 검증 규칙을 강제 적용
스크린리더 사용자 관점의 좋은 alt 예시
| 나쁜 예 | 좋은 예 |
|---|---|
| image1.jpg | 남성 캐주얼 반팔 티셔츠, 네이비 색상 |
| 사진 | 강남역 인근 사무실 외부 전경 |
| SEO 키워드 나열형 alt | 제품 사용 장면을 있는 그대로 설명 |
다국어 사이트에서 alt를 함께 번역해야 하는 이유
다국어로 운영되는 사이트라면 alt 텍스트도 언어별로 분리해서 저장해야 합니다. 한국어 alt를 영어 페이지에 그대로 노출하면 해당 언어권 스크린리더 사용자와 검색엔진 모두에게 의미가 전달되지 않습니다.
CREATE TABLE image_alt_i18n (
img_id INT,
lang_code VARCHAR(5),
alt_text VARCHAR(255),
PRIMARY KEY (img_id, lang_code)
);언어별 레코드가 없는 경우 기본 언어(예: 한국어)로 폴백하는 로직을 함께 두면 번역이 누락된 이미지도 최소한의 alt는 유지됩니다.
실무 정리
alt 자동화는 접근성과 SEO를 동시에 개선하는 가장 비용 대비 효과가 큰 작업 중 하나입니다. 이미지 용량 최적화가 함께 필요하다면 WebP 변환 파이프라인도 참고하세요. 대량 이미지에 alt 자동 연동 시스템을 구축하려면 무료 견적요청으로 현재 DB 구조를 알려주세요.
자주 묻는 질문 (FAQ)
장식용 이미지에도 alt를 꼭 넣어야 하나요? +
의미 없는 장식 이미지는 alt="" 로 비워두는 것이 오히려 정확한 접근성 처리입니다. 스크린리더가 해당 이미지를 건너뛰도록 만드는 것이 목적입니다.
자동 생성된 alt가 키워드 스팸처럼 보이지 않게 하려면? +
상품명·카테고리를 자연스러운 문장 형태로 조합하고, 같은 키워드를 반복해서 나열하지 않도록 템플릿을 설계해야 합니다.
alt에 이미지 파일명을 그대로 써도 되나요? +
권장하지 않습니다. IMG_1234.jpg 같은 파일명은 사용자에게 아무 정보도 주지 못해, 실제 내용을 설명하는 문구로 대체해야 합니다.
alt 텍스트 길이는 어느 정도가 적당한가요? +
일반적으로 125자 이내의 간결한 설명이 권장됩니다. 너무 길면 스크린리더가 전체를 읽는 데 시간이 오래 걸려 오히려 사용성이 떨어집니다.
title 속성을 alt 대신 써도 되나요? +
title은 마우스 오버 시 툴팁으로만 보여 스크린리더 지원이 불완전하고 모바일에서는 아예 노출되지 않아, 접근성 목적이라면 반드시 alt를 사용해야 합니다.
AI로 이미지를 분석해 alt를 자동 생성할 수도 있나요? +
이미지 인식 API를 연동하면 가능하지만, 인식 오류로 엉뚱한 설명이 붙을 위험이 있어 상품명·카테고리 같은 정형 데이터 기반 생성을 우선으로 하고, AI 인식은 보조 수단으로 검토하는 것이 안전합니다.
배경 이미지(CSS background-image)에도 alt가 필요한가요? +
CSS 배경 이미지는 alt 속성 자체가 없습니다. 의미가 중요한 이미지라면 background-image 대신 img 태그로 마크업해 alt를 넣을 수 있게 구조를 바꾸는 것이 접근성 측면에서 더 안전합니다.