409 Conflict: solicitudes que chocan con el estado actual
409 Conflict significa que una solicitud válida choca con el estado actual del recurso, como una colisión de edición o un nombre ya en uso.
409 Conflict significa que la solicitud choca con el estado actual del recurso. La solicitud en sí es válida; simplemente no se puede aplicar tal como están las cosas. Alguien ha editado antes el mismo registro, el nombre que elegiste ya está ocupado o la versión que estás actualizando está desfasada.
Definición
La RFC 9110, sección 15.5.10 dice que el 409 encaja en situaciones en las que el usuario podría resolver el conflicto y volver a enviar la solicitud, y que el servidor debería incluir información suficiente para reconocer el origen del conflicto. Los conflictos son más probables con solicitudes PUT, por ejemplo cuando un cliente envía cambios basados en una versión antigua de un documento.
Ejemplos típicos
- Colisiones de edición en un CMS o wiki cuando dos personas guardan la misma página.
- Nombres únicos: crear un nombre de usuario, un slug o un bucket de almacenamiento que ya existe. Amazon S3, por ejemplo, responde 409 cuando el nombre de un bucket ya está en uso.
- Concurrencia optimista: API como Kubernetes rechazan con 409 las actualizaciones que llevan una versión de recurso obsoleta.
- Reglas de estado: cancelar un pedido que ya se ha enviado.
Códigos relacionados: una creación correcta devuelve 201, 422 es para datos que no superan la validación y 412 Precondition Failed es para una condición If-Match explícita que no se cumple.
Impacto en el SEO
El 409 pertenece a las operaciones de escritura, así que los rastreadores no deberían encontrarlo. Si una página pública devuelve 409 a un GET normal, algo está mal configurado, y Google lo trata como cualquier otro 4xx y elimina la URL del índice (documentación de Google). Revisa las páginas sospechosas con el comprobador de códigos de estado HTTP, que debería indicar 200 para toda URL indexable.
Cómo gestionarlo
Un buen 409 le dice al cliente qué hacer a continuación. Devuelve la versión actual para que el cliente pueda combinar los cambios o reintentar, idealmente como Problem Details (RFC 9457):
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "https://example.com/probs/edit-conflict",
"title": "This page was changed by another editor",
"status": 409,
"current_version": 18
}
Por el lado del cliente, vuelve a obtener el recurso, muestra al usuario qué ha cambiado y reenvía la solicitud. En los conflictos de nombre, sugiere una alternativa disponible en lugar de devolver un error escueto.
Preguntas frecuentes
¿Cuál es la diferencia entre 409 y 422?
El 422 significa que los datos enviados no son válidos en sí mismos, como una dirección de correo mal formada. El 409 significa que los datos pueden estar bien pero chocan con el estado actual del recurso, como un nombre duplicado o una versión desfasada.
¿Por qué recibo 409 Conflict al guardar en mi CMS?
Probablemente otra persona, u otra pestaña, guardó antes el mismo contenido, así que tu copia está desfasada. Recarga la última versión, vuelve a aplicar tus cambios y guarda de nuevo.
¿Un error 409 puede afectar al SEO de mi sitio?
Solo si las páginas públicas lo devuelven ante solicitudes GET normales, lo que sería un error de configuración. Google trataría esas URL como las demás páginas 4xx y las eliminaría del índice.