HTTP 리다이렉트 완전 가이드
HTTP 리다이렉트란
HTTP 리다이렉트(URL 리다이렉션)는 사용자를 한 URL에서 다른 URL로 자동 전송하는 메커니즘입니다. 페이지를 요청하면 서버가 3xx 상태 코드와 새 주소를 가리키는 Location 헤더로 응답하고, 브라우저가 해당 주소로 자동 이동합니다.
리다이렉트는 다양한 상황에서 사용됩니다:
- 새 도메인으로 사이트 이전
- URL 경로 구조 변경
- HTTP에서 HTTPS로 업그레이드
- 모바일과 데스크톱에 다른 URL 제공
- URL 단축 서비스 (bit.ly, t.co 등)
- A/B 테스트 및 트래픽 분할
리다이렉트 작동 원리
클라이언트 요청:
GET /old-page HTTP/1.1
Host: example.com
서버 응답:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page
리다이렉트 유형
301 Moved Permanently
301은 가장 일반적인 리다이렉트 유형입니다. 리소스가 새 URL로 영구적으로 이동했음을 클라이언트와 검색 엔진에 알립니다.
✅ 301을 사용해야 하는 경우
- 영구적인 도메인 이전
- 영구적인 URL 구조 변경
- HTTP → HTTPS 업그레이드
- 중복 콘텐츠 통합
SEO: 검색 엔진은 링크 가치(PageRank)를 새 URL로 이전하고 인덱스를 업데이트합니다. Google은 보통 몇 주 내에 이를 완료합니다.
브라우저 동작: 브라우저는 301 리다이렉트를 캐시하여 이후 방문 시 원래 URL을 건너뛸 수 있습니다.
302 Found (임시)
302는 임시 이동을 나타냅니다. 원래 URL은 유효한 상태로 인덱스에 유지됩니다.
✅ 302를 사용해야 하는 경우
- 유지보수 페이지
- A/B 테스트
- 지역 기반 임시 라우팅
- 단기 모바일/데스크톱 분기
303 See Other
303은 원래 요청 메서드와 관계없이 GET으로 리다이렉트 대상을 가져오도록 클라이언트에 강제합니다. 주로 POST 제출 후 폼 재전송을 방지하는 데 사용됩니다 (Post/Redirect/Get 패턴).
307 Temporary Redirect
307은 302와 유사하지만 원래 요청 메서드를 엄격하게 유지합니다. POST는 리다이렉트 후에도 POST로 유지됩니다 — 역사적으로 메서드 변경을 허용했던 302와 다릅니다.
308 Permanent Redirect
308은 301의 메서드 유지 버전입니다. GET 요청의 경우 301과 308의 동작은 동일합니다. 요청 메서드를 변경해서는 안 되는 영구 리다이렉트가 필요할 때 308을 사용합니다.
클라이언트 측 리다이렉트
Meta refresh
<meta http-equiv="refresh" content="0; url=https://example.com/new-page">
SEO에 불리 — 검색 엔진이 올바르게 처리하지 못할 수 있습니다.
JavaScript 리다이렉트
window.location.href = "https://example.com/new-page";
크롤러가 JavaScript를 실행하지 않을 수 있어 SEO에 이상적이지 않습니다.
⚠️ 클라이언트 측 리다이렉트의 한계
클라이언트 측 리다이렉트는 HTTP 상태 코드를 갖지 않으므로, 검색 엔진은 이동이 영구적인지 임시적인지 판단할 수 없습니다. 항상 서버 측 리다이렉트를 우선하세요.
사용 시기 가이드
- 영구적인 도메인 변경 → 301
- 임시 유지보수 → 302
- HTTP → HTTPS → 301
- www / non-www 정규화 → 301
- 폼 제출 후 → 303
- A/B 테스트 → 302
- 영구 리다이렉트, 메서드 유지 → 308
- 임시 리다이렉트, 메서드 유지 → 307
SEO 영향
링크 가치 이전
301 리다이렉트는 링크 가치의 거의 전부를 새 URL로 이전합니다. Google은 301이 PageRank의 약 100%를 이전한다고 밝혔습니다. 302는 가치를 이전하지 않으며, 원래 URL이 랭킹 시그널을 유지합니다.
인덱스 업데이트 타임라인
301 설정 후 Google은 보통:
- 며칠 내에 리다이렉트 발견
- 1~4주 내에 인덱스 업데이트
- 1~3개월 내에 가치 완전 이전
리다이렉트 체인의 영향
체인의 홉이 추가될 때마다 (A → B → C) 지연 시간이 증가하고 가치가 희석될 수 있습니다. Google은 약 10홉까지 따라가지만, 3을 초과하는 체인은 문제의 신호입니다. 항상 원래 URL에서 최종 목적지로 직접 리다이렉트하세요.
🎯 모범 사례
직접 리다이렉트 (A → C)를 사용하세요. 체인을 정기적으로 감사하고 가능한 한 단축하세요.
일반적인 문제와 해결 방법
1. 리다이렉트 루프
증상: 브라우저에 "리다이렉트가 너무 많습니다"라고 표시됨.
일반적인 원인: CDN/원본 서버 간 HTTPS 설정 충돌, WordPress siteurl 설정 오류, Nginx/Apache 리라이트 규칙 중복, .htaccess 설정 오류.
# curl로 진단
curl -I -L https://example.com
또는 301check.com으로 전체 체인을 시각화할 수 있습니다.
2. 쿼리 문자열 손실
리다이렉트 규칙에서 쿼리 파라미터가 유지되도록 하세요. Nginx에서는 $request_uri 또는 $is_args$args를 사용합니다.
3. 캐시된 301
브라우저는 301 리다이렉트를 캐시합니다. 리다이렉트를 변경해도 사용자에게는 이전 목적지가 표시될 수 있습니다. 시크릿 창에서 테스트하거나 캐시를 지우세요.
4. 모바일 리다이렉트 불일치
모바일 사용자가 해당 모바일 페이지가 아닌 홈페이지로 리다이렉트되는 경우, URL 매핑을 수정하거나 반응형 디자인으로 전환하세요.
모범 사례
- 영구적인 변경에는 301을, 임시 변경에는 302를 사용
- 확신이 없으면 302로 시작 — 확정되면 301로 업그레이드 가능
- 리다이렉트 체인을 피하고 최종 URL로 직접 리다이렉트
- 리다이렉트 규칙에서 쿼리 문자열 유지
- 대규모 이전 후 Google Search Console로 모니터링
- 모든 리다이렉트 규칙을 문서화하여 팀과 공유
- 변경 전후에 301check.com으로 테스트