기본 404 페이지는 "찾을 수 없음"이라는 텍스트만 덩그러니 보여줘 방문자를 그대로 이탈시킵니다. 커스텀 404 페이지는 검색·주요 메뉴·인기 페이지로 다시 안내해 이탈을 전환 기회로 바꿀 수 있습니다. 설계 원칙과 HTTP 상태 코드를 정확히 지키는 방법을 정리합니다.
404 페이지, 디자인보다 먼저 볼 것은 상태 코드
404 페이지를 예쁘게 꾸미는 것보다 먼저 확인해야 할 것은 실제 HTTP 응답 코드가 404로 나가고 있는가입니다. 리다이렉트를 잘못 걸어 존재하지 않는 페이지가 200(정상)으로 응답되면, 검색엔진이 빈 페이지를 정상 콘텐츠로 오인해 색인에 쌓이는 문제(소프트 404)가 생깁니다.
curl -I https://example.com/no-such-page # HTTP/1.1 404 Not Found 가 나와야 정상
이탈을 줄이는 404 페이지 구성 요소
- 어떤 상황인지 명확히 설명 (삭제됐거나, 주소가 바뀌었거나, 오타)
- 메인 메뉴·검색창을 즉시 노출해 재탐색 유도
- 인기 카테고리 또는 최근 게시글 목록 추천
- 고객센터·문의 링크 (실제 오류라면 신고 가능하도록)
단순히 "홈으로 돌아가기" 링크 하나만 있는 것보다, 방문자가 원래 찾으려던 것과 가까운 대안을 제시하는 편이 이탈률을 낮춥니다.
PHP에서 상태 코드와 커스텀 페이지 연결하기
<?php
header("HTTP/1.1 404 Not Found");
include __DIR__ . '/404_view.php';
exit;
?>Apache는 .htaccess에서 서버 레벨로 지정할 수 있습니다.
ErrorDocument 404 /404.php
Nginx는 서버 블록에서 지정합니다.
error_page 404 /404.php;
중요한 것은 어떤 방식이든 실제 응답 코드가 404를 유지해야 한다는 점입니다.
소프트 404가 만드는 SEO 문제
존재하지 않는 페이지가 200으로 응답되면 검색엔진이 이를 정상 콘텐츠로 판단해 색인 시도를 하지만, 실제로는 내용이 없거나 "찾을 수 없습니다"라는 텍스트뿐이라 저품질 페이지로 누적됩니다. 서치 콘솔에서 "소프트 404"로 표시되는 URL이 많다면 상태 코드 설정을 다시 점검해야 합니다.
검색창·추천 콘텐츠 자동화 구현
<?php
// 요청 URL에서 키워드 추출을 시도해 유사 게시글 검색
$path = trim($_SERVER['REQUEST_URI'], '/');
$keyword = preg_replace('/[^a-zA-Z0-9가-힣]/', ' ', $path);
$related = search_posts($keyword, $limit = 5);
?>
<p>찾으시는 페이지 대신 이런 글은 어떠세요?</p>
<ul>
<?php foreach ($related as $r): ?>
<li><a href="<?php echo $r['url']; ?>"><?php echo htmlspecialchars($r['title']); ?></a></li>
<?php endforeach; ?>
</ul> 404 발생 원인 로그로 추적하기
| 원인 | 확인 방법 | 대응 |
|---|---|---|
| 오래된 외부 링크 | Referer 헤더 확인 | 301 리다이렉트로 새 URL 연결 |
| 내부 링크 오류 | 사이트 내 링크 검사 도구 | 내부 링크 직접 수정 |
| 사용자 오타 | 404 URL 패턴 분석 | 유사 URL 추천 로직 강화 |
| 실제 삭제된 콘텐츠 | 게시글 삭제 로그 대조 | 관련 카테고리로 안내 |
404 로그를 주기적으로 리뷰하면 내부 링크 오류나 반복되는 외부 유입 오타 패턴을 발견해 선제적으로 리다이렉트를 추가할 수 있습니다.
404와 410, 언제 무엇을 써야 하나
실무에서 자주 혼동되는 것이 404와 410의 차이입니다.
- 404 Not Found — 해당 URL이 존재했는지 알 수 없거나 일시적으로 없을 수 있는 경우
- 410 Gone — 콘텐츠가 의도적으로, 영구적으로 삭제됐다는 것이 확실한 경우
이벤트 종료 페이지나 판매 종료된 상품처럼 다시 생기지 않을 것이 확실한 콘텐츠는 410을 쓰면 검색엔진이 재크롤링 시도를 더 빨리 줄여, 불필요한 크롤 예산 낭비를 줄일 수 있습니다.
실무 정리
커스텀 404는 디자인 작업이 아니라 정확한 상태 코드 + 재탐색 유도 UX가 결합된 기술적 UX 작업입니다. 서버 이전이나 URL 구조 변경 후에는 301 리다이렉트와 함께 404 발생률을 점검하세요. 커스텀 404 페이지 설계·구현이 필요하면 무료 견적요청으로 문의해 주세요.
자주 묻는 질문 (FAQ)
404 페이지도 디자인이 예쁘면 SEO에 도움이 되나요? +
디자인 자체는 순위 신호가 아니지만, 이탈률을 낮추고 재탐색을 유도해 전체 사이트 체류시간·행동 지표를 개선하는 데 도움이 됩니다.
404 페이지를 홈페이지로 자동 리다이렉트시키면 안 되나요? +
권장하지 않습니다. 방문자가 원래 어떤 페이지를 찾고 있었는지 맥락이 사라지고, 검색엔진도 대량의 소프트 리다이렉트를 의심스러운 패턴으로 볼 수 있습니다.
404 오류가 갑자기 많이 늘었는데 무엇을 먼저 확인해야 하나요? +
최근 배포에서 URL 구조가 바뀌었는지, 게시글이 대량 삭제됐는지, 내부 링크에 오류가 있는지 순서대로 확인합니다. 서치 콘솔의 404 URL 목록에서 유입 패턴을 함께 보면 원인을 좁힐 수 있습니다.
커스텀 404 페이지도 HTTP 상태 코드는 여전히 404여야 하나요? +
네, 페이지 내용이 아무리 친절해도 응답 코드는 반드시 404를 유지해야 검색엔진이 올바르게 처리합니다.
모바일에서 404 페이지 UX는 따로 신경 써야 하나요? +
모바일은 화면이 좁아 검색창과 핵심 메뉴만 우선 노출하고, 추천 콘텐츠는 스크롤 아래로 배치하는 식으로 우선순위를 재조정하는 것이 좋습니다.
404 페이지에서 즉시 문의로 연결하는 버튼을 넣어도 되나요? +
좋은 전략입니다. 특히 결제·예약 단계에서 오류로 이탈한 방문자에게는 검색창보다 상담 문의 버튼이 더 실질적인 대안이 될 수 있습니다.
404 페이지 자체도 검색엔진에 색인되나요? +
정상적으로 404 상태 코드를 응답한다면 검색엔진은 이를 색인 대상으로 취급하지 않습니다. 다만 noindex 태그를 추가로 넣어 명확히 신호를 줄 수도 있습니다.
그누보드 같은 게시판 CMS에서 404 페이지는 어떻게 지정하나요? +
웹서버 레벨(.htaccess 또는 nginx 설정)에서 error_page를 지정하는 방식이 CMS 종류와 무관하게 가장 안정적으로 동작합니다.