303 redirect (See Other)

The server points the client to a different resource that describes the result of the request. The follow-up request is always a GET (or HEAD).

TypeTemporary
Follow-up methodalways GET (except HEAD)

How Google handles a 303

Google treats 303 like a temporary redirect (like 302 and 307). It is rarely seen on indexable pages, because its main job is sending a browser to a result page after a form submission.

Use a 303 for

  • Post/Redirect/Get: after a form POST, send the browser to a confirmation page so a refresh does not resubmit the form
  • APIs that create a resource and point to where it can be fetched

Don’t use it for

  • Moving content: use 301/308 or 302/307 instead
  • Any case where the follow-up request must keep the POST body

What happens to a POST

A browser sends POST /checkout with a form body. The server answers with…

POST /checkout + body
303 Location: /pay
GET /pay body dropped

Temporary, always GET. This is the intended behaviour: “see the result over there.” It powers the Post/Redirect/Get pattern, so refreshing the confirmation page doesn’t resubmit the order.

Setting up a 303

Nginx

location = /subscribe { if ($request_method = POST) { return 303 /thanks; } }

Express (Node.js)

res.redirect(303, '/thanks')

PHP

header('Location: /thanks', true, 303); exit;

Nuxt / h3

return sendRedirect(event, '/thanks', 303)

Need rules for a whole list of URLs? The redirect rule generator writes them for Apache, Nginx, Vercel and Netlify.

Check that it works

Questions

When should I use 303 instead of 302?

Use 303 when you explicitly want the follow-up request to be a GET, typically right after a form POST. 302 has the same effect in browsers only for historical reasons; 303 makes the intent unambiguous.

Is 303 cacheable?

A 303 response is not a stand-in for the target. RFC 9110 notes that the target resource of the Location URI may be cached, but browsers do not reuse the 303 itself in place of the original request.

Other codes: 301 · 302 · 307 · 308 · 301 vs 302