SEO

Soft 404

Soft 404는 서버가 HTTP 200(정상)을 반환하지만, 구글이 페이지의 내용을 분석해 '사실상 존재하지 않는 페이지'로 판단한 상태를 말합니다. 브라우저에는 페이지가 열리지만 구글은 검색 결과에서 제외하며, Search Console의 Coverage 리포트에 'Soft 404'로 표시됩니다.

Soft 404는 서버가 HTTP 200(정상)을 반환하지만, 구글이 페이지의 내용을 분석해 '사실상 존재하지 않는 페이지'로 판단한 상태를 말합니다. 브라우저에는 페이지가 열리지만 구글은 검색 결과에서 제외하며, Search Console의 Coverage 리포트에 'Soft 404'로 표시됩니다.

왜 중요한가

Soft 404는 '기술적으로는 문제가 없지만 SEO 관점에서는 심각한' 회색 지대입니다. 사이트 운영자는 '페이지가 잘 열리니까 괜찮다'고 착각하기 쉽지만, 구글은 이런 페이지를 인덱싱하지 않고 크롤 예산도 낭비된다고 판단해 해당 도메인의 전반적 크롤링·인덱싱 효율을 낮춥니다. Ahrefs 감사 도구로 대형 블로그를 점검하면 전체 URL의 2~8%가 Soft 404로 분류되는 경우가 흔합니다.

Soft 404 vs 하드 404 vs 200

상태HTTP 코드구글 판단사용자 경험
정상 페이지200인덱싱콘텐츠 정상
하드 404404인덱스 제거오류 페이지
Soft 404200인덱스 제외얇은/빈 콘텐츠

구글은 "페이지가 없으면 404를 반환하고, 있으면 실제 콘텐츠를 충분히 담아라"라고 명시적으로 권고합니다. 둘 다 만족하지 않는 상태가 Soft 404입니다.

Soft 404의 주요 원인

재고 없는 상품 페이지: 이커머스에서 품절된 상품 페이지가 "현재 판매하지 않습니다" 한 줄만 남기고 200을 반환하는 경우.

검색 결과 없음 페이지: 내부 검색이 결과 0건일 때 '검색 결과가 없습니다' 메시지만 반환하는 페이지.

얇은 콘텐츠: 제목만 있고 본문이 거의 없거나, 이미지 한 장만 있는 포스트.

리다이렉트 누락: 삭제된 페이지를 404로 반환하지 않고 '페이지를 찾을 수 없습니다'를 200으로 반환하는 경우.

자바스크립트 렌더링 실패: SPA에서 콘텐츠가 JS 로드 전에 빈 <body>로 구글봇에 전달되는 경우.

로그인 필수 콘텐츠: 로그인 없이 접근하면 "권한이 없습니다" 메시지만 나오는 페이지를 200으로 반환.

복제·템플릿 페이지: 수천 개의 지역별·카테고리별 페이지가 공통 템플릿에 변수만 바꾼 수준의 콘텐츠를 반환.

진단 방법

Search Console Coverage 리포트: '제외됨' 탭에서 'Soft 404'로 분류된 URL을 확인합니다.

URL Inspection: 개별 URL의 실제 렌더링 결과와 구글 판단을 비교합니다.

Screaming Frog: 크롤링 후 'Response Codes' 필터에서 200이지만 콘텐츠가 얇은 페이지를 탐지합니다.

HTTP 코드 + 콘텐츠 매트릭스: 응답 코드가 200이면서 본문 텍스트 길이가 임계값 이하인 URL을 자동 감지하는 커스텀 감사.

해결 방법

실제 404 반환: 페이지가 존재하지 않으면 서버가 반드시 404(또는 영구 삭제 시 410)를 반환하게 설정합니다. 이것이 가장 확실한 해결책입니다.

301 리다이렉트: 삭제된 페이지에 가치 있는 백링크가 있다면 관련 있는 상위 페이지로 301 리다이렉트해 권한을 보존합니다.

콘텐츠 보강: 얇은 페이지는 실제 가치 있는 콘텐츠로 채웁니다. 이커머스 품절 페이지는 '비슷한 추천 상품' 목록으로 보강.

noindex 처리: 내부 검색 결과, 얇은 필터 조합 페이지는 noindex 메타 태그를 추가해 구글이 아예 시도하지 않게 합니다.

SSR/SSG 전환: JavaScript 렌더링 지연이 원인이면 서버 사이드 렌더링으로 전환합니다.

템플릿 페이지 감축: 자동 생성된 얇은 페이지는 콘텐츠를 합치거나 삭제합니다.

Sources:

관련 인블로그 게시물

inblog에서 활용하기

inblog는 삭제된 포스트에 정상 404를 반환하고, 얇은 태그 페이지에 적절한 noindex를 적용하는 정책을 기본 내장해 Soft 404 문제를 구조적으로 차단합니다. 블로그 운영자가 슬러그를 변경하거나 포스트를 삭제할 때도 올바른 상태 코드와 리다이렉트가 자동 처리되어 크롤 예산과 인덱싱 효율이 유지됩니다.