302 리다이렉트
302 리다이렉트는 요청한 리소스가 일시적으로 다른 URL로 이동했음을 알리는 HTTP 상태 코드(302 Found)입니다. 원본 URL을 그대로 유지한 채 잠깐 다른 위치로 보낼 때 사용하며, 영구 이동을 뜻하는 301과 달리 검색엔진에 색인 대상을 옮기라는 신호를 주지 않습니다.
- 302 리다이렉트는 '임시 이동'을 뜻하는 HTTP 상태 코드(302 Found)로, 원본 URL을 유지한 채 일시적으로 다른 위치로 방문자를 보냅니다.
- 301(영구 이동)과의 차이가 핵심입니다. 301은 색인·링크 신호를 새 URL로 옮기지만, 302는 검색엔진이 원본 URL을 색인에 남겨 둡니다.
- Google은 302를 따라가되 '리다이렉트 대상을 정규(canonical) URL로 삼으라'는 신호로 사용하지 않습니다. 검색 결과에는 원본 페이지가 계속 노출됩니다.
- 영구적으로 옮길 페이지에 302를 잘못 쓰면 링크 자산 이전과 정규화가 지연됩니다. 임시 상황에서만 302를 사용해야 합니다.
- 임시 302가 너무 오래 유지되면 검색엔진이 결국 301처럼 처리하는 경향이 있으므로, 의도와 기간을 맞춰 사용해야 합니다.
개요
302 리다이렉트는 요청한 페이지가 일시적으로 다른 URL에 있음을 브라우저와 검색엔진에 알리는 HTTP 상태 코드입니다. 정식 명칭은 302 Found이며, 응답에 포함된 Location 헤더의 주소로 클라이언트가 자동 이동합니다. 핵심은 '원본 URL이 여전히 정답'이라는 점입니다. 즉 이동은 임시이고, 원래 주소는 그대로 살아 있다는 의미를 담고 있습니다.
이 때문에 302는 점검 중인 페이지를 잠시 다른 곳으로 우회시키거나, 지역·디바이스·로그인 상태에 따라 일시적으로 다른 화면을 보여 주거나, 한정 기간 이벤트 페이지로 잠깐 보낼 때 적합합니다. 반대로 도메인 변경이나 페이지 영구 통합처럼 '되돌릴 일이 없는' 이동에는 301을 써야 합니다.
301과 302의 차이
가장 흔한 실수가 영구 이동에 302를 쓰는 경우입니다. 두 코드는 동작과 SEO 영향이 명확히 갈립니다.
| 구분 | 301 (Moved Permanently) | 302 (Found) |
|---|---|---|
| 의미 | 영구 이동 | 임시 이동 |
| 색인 처리 | 새 URL을 정규 URL로 삼는 신호 | 정규 URL 신호 아님, 원본 URL을 색인에 유지 |
| 검색 결과 노출 | 이동한 새 URL이 노출 | 원본(기존) URL이 계속 노출 |
| 링크·랭킹 신호 | 강한 정규화 신호로 새 URL에 집중 | 약한 신호, 원본 URL에 머무름 |
| 적합한 상황 | 도메인 변경, 페이지 영구 통합·삭제 대체 | 점검·A/B·일시 우회 등 되돌릴 이동 |
SEO 영향
Google 문서는 두 코드를 색인 파이프라인에서 다르게 취급한다고 명시합니다. 301에 대해서는 "Googlebot이 리다이렉트를 따라가며, 색인 파이프라인은 그 리다이렉트를 '대상이 정규 URL이어야 한다'는 신호로 사용한다"고 설명합니다. 반면 302에 대해서는 "Googlebot이 리다이렉트를 따라가지만, 색인 파이프라인은 이를 정규 URL 신호로 사용하지 않는다"고 명시합니다. 그 결과 301은 새 URL을, 302는 원본 URL을 검색 결과에 노출하게 됩니다.
또한 Google의 정규화 신호 강도 측면에서, 서버 사이드 301·308은 강한 신호로 취급되는 반면 302·307이나 자바스크립트·meta refresh 같은 방식은 상대적으로 약한 신호로 취급됩니다. 따라서 영구 이동인데 302를 쓰면 링크 자산과 랭킹 신호가 새 URL로 제때 이전되지 않아 SEO 측면에서 손해를 볼 수 있습니다. 다만 임시 302가 너무 오래 유지되면 검색엔진이 결국 301처럼 처리하는 경향이 있다는 점도 보고됩니다. 즉 코드와 실제 의도가 어긋나면 검색엔진의 해석이 불안정해집니다.
올바른 사용 사례
- 점검(maintenance) 중 페이지를 임시 안내 페이지로 우회시킬 때
- A/B 테스트나 캠페인으로 방문자를 잠시 다른 화면으로 보낼 때
- 지역·언어·로그인 상태에 따라 일시적으로 다른 URL을 보여 줄 때
- 품절·기간 한정 등 곧 원래대로 돌아올 페이지를 잠깐 대체할 때
반대로 다음 경우에는 302를 쓰면 안 됩니다. 도메인·URL을 영구히 옮길 때, http에서 https로 영구 전환할 때, 중복 페이지를 하나로 영구 통합할 때, 삭제된 페이지를 대체 페이지로 영구 연결할 때는 모두 301을 사용해야 합니다. 이런 영구 이동에 302를 쓰면 색인과 링크 자산 이전이 지연됩니다.
POST 요청 주의
302는 POST 요청 처리에서도 주의가 필요합니다. MDN에 따르면 다수 사용자 에이전트는 302 응답 후 후속 요청의 메서드를 POST에서 GET으로 바꾸는데, 이는 의도치 않은 동작을 일으킬 수 있습니다. 요청 메서드를 그대로 유지해야 한다면 메서드 변경이 금지된 307 Temporary Redirect를 사용하는 편이 안전합니다.
구현 예시
서버 설정에서 302를 명시적으로 지정하는 예시입니다.
# Nginx (임시 리다이렉트)
location /event {
return 302 https://example.com/promo;
}
# Apache .htaccess (R=302 가 임시 리다이렉트)
Redirect 302 /event https://example.com/promo