303 See Other: redirigir después de enviar un formulario
303 See Other redirige al cliente a otra URL que debe pedirse con GET, normalmente después de enviar un formulario.
303 See Other redirige al cliente a una URL distinta y le indica que la pida con GET, sea cual sea el método de la solicitud original. Su función clásica es cerrar el envío de un formulario: el servidor procesa un POST y luego manda al navegador a una página de resultado.
Definición
La RFC 9110, sección 15.4.4 describe el 303 como una redirección a otro recurso, indicado en Location, que ofrece “una respuesta indirecta a la solicitud original”. El cliente la sigue con un GET. A diferencia del 302, no hay ambigüedad sobre el método, y a diferencia del 307, el método está pensado para cambiar.
Un 303 en respuesta a un GET es menos frecuente. Significa que el servidor no tiene ninguna representación de lo solicitado que enviar, pero que la URL de destino lo describe. Los sitios de Linked Data lo usan para separar el identificador de un objeto del mundo real del documento que habla de él.
Post/Redirect/Get
Sin redirección, recargar una página de “gracias” vuelve a enviar el formulario y puede crear pedidos o mensajes duplicados. El patrón Post/Redirect/Get lo resuelve:
POST /contact HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
name=Sara&message=Hello
HTTP/1.1 303 See Other
Location: /contact/thanks/
Content-Length: 0
En PHP: header('Location: /contact/thanks/', true, 303);. En Express: res.redirect(303, '/contact/thanks/').
Impacto en el SEO
La documentación de Google trata el 303 como el 302: Googlebot lo sigue, pero es solo una señal canónica débil, así que la URL original suele seguir siendo la canónica. Eso no supone ningún problema en los flujos de formularios, que los rastreadores no envían de todos modos. Dos notas prácticas:
- No uses el 303 para mover páginas. Para los cambios permanentes, usa 301 o 308.
- Las páginas de confirmación y de “gracias” no tienen valor en búsquedas; añade noindex para que no entren en el índice si alguien las enlaza.
Para ver qué devuelve la URL de una página en una visita normal, rastréala con el comprobador de redirecciones.
Preguntas frecuentes
¿Cuándo debo usar 303 en lugar de 302?
Usa 303 después de un POST, PUT o DELETE cuando quieras que el navegador cargue una página de resultado con GET. Expresa esa intención con claridad, mientras que el tratamiento del método en el 302 ha variado históricamente según el cliente.
¿Google trata el 303 de forma distinta al 302?
No. La documentación de Google dice que el 303 se gestiona como el 302: Googlebot lo sigue y la URL original suele seguir siendo la canónica.
¿Por qué al recargar la página de mi formulario me pide reenviar los datos?
La página de resultado del formulario se devolvió directamente como respuesta al POST. Redirige con 303 a una URL de resultado independiente y al recargar solo se volverá a cargar esa página.