리디렉션은 한 URL로 들어온 사용자와 검색로봇을 다른 URL로 이동시키는 처리입니다. 서버가 새 주소를 응답 헤더에 담아 알리거나, 페이지를 읽은 브라우저가 다른 주소를 열게 할 수 있습니다. 주소를 바꾼 뒤에도 기존 링크로 방문한 사람이 새 페이지에 도착하도록 연결할 때 쓰입니다.
영구 이동과 임시 이동의 차이
새 주소를 계속 쓸 예정이면 영구 이동, 나중에 원래 주소로 돌아올 예정이면 임시 이동을 선택합니다. 두 방식 모두 방문자를 이동시키지만 Google이 대표 URL을 선택할 때는 다르게 해석합니다.
| 목적 | 주요 코드 | 검색엔진에 전달하는 의미 |
|---|---|---|
| 영구 이동 | 301, 308 | 새 URL을 대표 URL로 선택하라는 신호 |
| 임시 이동 | 302, 307 | 이동 자체로는 새 URL을 대표로 선택하라는 신호를 주지 않음 |
같은 영구 이동이라도 301과 308의 HTTP 동작은 다릅니다. 301과 302는 클라이언트가 POST 요청을 GET으로 바꿔 다시 보낼 수 있지만, 307과 308은 자동 이동 시 요청 메서드를 유지해야 합니다. 폼 제출이나 API 요청을 이동시킨다면 이 차이까지 고려해야 합니다.
리디렉션을 적용하는 상황
영구 리디렉션은 주소 변경이나 중복 URL 정리에 적용합니다.
- 페이지 슬러그나 디렉터리 구조를 바꿀 때 기존 주소를 새 주소로 연결합니다.
- HTTP와 HTTPS, www가 있는 주소와 없는 주소를 하나의 형식으로 통일합니다.
- 여러 중복 URL을 하나의 대표 URL로 모읍니다.
- 도메인을 이전하거나 기존 페이지의 내용을 새 페이지에 통합합니다.
일시적으로 다른 페이지를 보여 준 뒤 원래 주소로 돌아갈 계획이면 임시 리디렉션을 적용할 수 있습니다. 다만 서버 점검 때문에 요청을 처리할 수 없다는 사실을 알리는 응답은 503입니다. 다른 URL로 이동시키는 처리와 일시적인 서비스 불가 응답을 구별해야 합니다.
삭제한 URL을 대신할 관련 페이지가 없다면 404나 410으로 응답합니다. 관련 없는 홈페이지로 일괄 이동시키면 방문자가 원하는 내용을 찾지 못하고, Google이 소프트 404로 처리할 수도 있습니다.
서버에서 이동 주소를 응답하는 방법
Google은 가능한 경우 서버 측 HTTP 리디렉션을 권장합니다. 네이버도 페이지 주소를 변경할 때 서버에서 301로 응답하도록 안내합니다. 서버 응답에는 이동을 알리는 상태 코드와 목적지를 담은 Location 헤더가 들어갑니다.
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page
위 응답을 받은 브라우저는 Location에 적힌 새 주소를 요청합니다. 설정한 규칙이 적용됐는지는 기존 URL을 직접 요청해 상태 코드와 헤더를 확인해야 합니다.
서버에서 설정하기 어렵다면 HTML의 meta refresh로 브라우저를 이동시킬 수 있습니다. Google은 지연 시간이 0초인 meta refresh를 영구 이동으로, 0초보다 길면 임시 이동으로 해석합니다. JavaScript 리디렉션은 렌더링에 실패하면 Google이 이동을 감지하지 못할 수 있으므로, 서버 응답이나 meta refresh를 쓸 수 없을 때 고려합니다.
체인과 루프 문제
목적지에 도착하기 전에 여러 URL을 차례로 거치면 리디렉션 체인이라고 합니다. 이동한 주소가 다시 앞선 주소로 돌아가도록 설정돼 있다면 리디렉션 루프가 생깁니다. 이 경우 이동을 반복하다가 오류가 나므로 최종 페이지를 열 수 없습니다.
이동 단계마다 새 요청이 필요하므로 체인이 길어지면 페이지를 여는 데 시간이 더 걸립니다. 중간 URL 하나라도 robots.txt로 막거나 오류를 반환하면 검색로봇이 목적지에 도달하지 못할 수도 있습니다. 기존 주소에서 최종 URL로 바로 이동하도록 규칙을 정리하면 이런 중간 단계를 줄일 수 있습니다.
301과 canonical의 역할 구분
301 리디렉션은 실제 방문을 새 URL로 이동시킵니다. canonical은 기존 페이지를 계속 열 수 있게 두면서 선호하는 대표 URL을 알립니다.
기존 주소에서 별도 페이지를 제공할 필요가 없다면 영구 리디렉션을 적용합니다. 인쇄용 페이지나 같은 내용을 보여 주는 필터 URL처럼 여러 주소를 계속 열어 둬야 한다면 canonical을 검토합니다. 내용이 다른 필터 페이지까지 무조건 같은 대표 URL로 지정하는 것은 아닙니다.
설정 후 확인 항목
- 기존 URL의 상태 코드와
Location이 설정한 이동 방식 및 목적지와 일치하는지 확인합니다. - 최종 URL이 200으로 응답하고 이전 페이지를 대신할 실제 콘텐츠를 보여 주는지 확인합니다.
- 원래 주소와 중간 주소, 최종 URL을 robots.txt로 차단하지 않았는지 살핍니다.
- 영구 이전이라면 내부 링크, canonical과 사이트맵도 새 URL로 갱신합니다.
- 새 페이지에 시험용
noindex가 남아 있지 않은지 확인합니다. - Search Console의 URL 검사와 페이지 색인 보고서, 서버 로그에서 새 URL의 수집 및 색인 상태를 추적합니다.
주소창에는 최종 URL만 보일 수 있으므로 브라우저 개발자 도구의 Network 탭에서 이동 전후 요청을 확인합니다. curl -I -L은 HEAD 요청으로 HTTP 리디렉션의 응답 헤더를 따라가는 명령입니다. JavaScript나 meta refresh로 발생한 이동까지 확인하려면 브라우저에서 실제 동작을 봐야 합니다.
AI 답변에 예전 URL이 출처로 남아 있다면 링크를 눌렀을 때 새 페이지까지 연결되는지도 점검합니다. 리디렉션이 정상 작동하는 것과 답변에 표시된 출처 URL이 새 주소로 바뀌는 것은 별개의 결과입니다.
자주 묻는 질문
301과 302 중 무엇을 써야 하나요?
영구적으로 주소를 바꾸면 301이나 308을 적용합니다. 원래 주소로 돌아갈 예정인 일시 이동은 302나 307을 검토합니다.
리디렉션을 설정하면 순위가 그대로 유지되나요?
보장되지 않습니다. 리디렉션은 기존 주소와 새 주소의 관계를 알리지만, 검색엔진이 새 URL을 수집하고 처리하는 동안 순위가 변할 수 있습니다. 주소와 함께 콘텐츠나 사이트 구조도 바꿨다면 그 영향도 따로 고려해야 합니다.
리디렉션은 언제 삭제해도 되나요?
Google은 사이트 이전 시 리디렉션을 가능한 한 오래, 일반적으로 최소 1년 유지하라고 권장합니다. 검색로봇이 이전 주소를 다시 수집하고 신호를 새 URL로 옮길 시간을 확보하기 위해서입니다. 이후에도 외부 링크나 북마크로 방문하는 사람이 있다면 리디렉션을 계속 제공할 수 있습니다.
함께 알아두면 좋은 용어
- 301 리디렉션: URL의 영구 이동을 알리는 HTTP 응답
- 302 리디렉션: URL의 임시 이동을 알리는 HTTP 응답
- 리디렉션 체인: URL이 여러 단계의 이동을 거치는 구조
- 캐노니컬 태그: 중복되거나 매우 비슷한 페이지 중 선호하는 대표 URL을 알리는 태그
- HTTP 상태 코드: 서버의 요청 처리 결과를 나타내는 숫자 응답