301 Moved Permanently
301 redirection은 검색 엔진과 사용자에게 페이지가 영구적으로 이동했음을 알리고 올바른 페이지로 보내졌는지 확인하는 상태 코드이다. 즉, 요청한 리소스가 Location 헤더에 주어진 URL로 완전히 옮겨졌음을 나타낸다. 사용자는 이전 페이지를 대체한 새 페이지로 redirection 된다.
301을 활용하면 기존 URL에 대한 모든 SEO 값과 링크 리소스가 새 URL로 이전된다. 이는 검색엔진 최적화의 관점에서 "the link-juice is sent to the new URL"(원래의 콘텐츠가 새로운 URL로 아예 옮겨졌다)를 의미한다.
요청
GET /index.php HTTP/1.1
Host: www.example.org
응답
HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp
302 Found
301이 URL의 영구적인 이동을 나타내는 반면, 302 Found는 클라이언트가 요청한 리소스가 Location 헤더에 주어진 URL로 일시적으로 이동하였음을 나타낸다. 브라우저는 사용자를 이 URL의 페이지로 redirect 시키지만, 검색 엔진은 그 리소스가 일시적으로 이동했다고 해서 그 링크를 갱신하진 않는다.
리다이렉트 시 메서드 변경이 되지 않는 307 Temporary Redirect도 존재한다. 즉, GET, HEAD 요청에 대한 응답으로는 302를 설정하는 것이 권장되고, 302를 사용할 경우 POST, PUT 같은 요청을 GET으로 바꿔서 Redirect 시킬 수 있으므로 POST나 PUT에는 302 대신 307을 사용하는 것이 권장된다.