Mantén estables las URLs de tus recursos y redirige las que se mueven
Keep resource URLs stable, and redirect the ones that move
Trata cada URL que un agente pueda guardar como una promesa: mantenla funcionando, responde con una redirección permanente cuando el recurso se mueve y di 410 Gone cuando lo retiras.
Por qué
Los agentes guardan URLs: en archivos de memoria, en índices llms.txt, en el historial de tareas, en enlaces que citan a los usuarios y en los datos de entrenamiento de modelos que seguirán funcionando dentro de años. Reorganizar la documentación o renombrar un endpoint convierte todo eso en 404, y un 404 no le dice al agente si escribió mal la URL, si no tiene acceso o si debe buscar en otro lado. La nota del W3C de Tim Berners-Lee "Cool URIs don't change" (1998) plantea la regla: una URI buena es una que no cambia, un enlace roto le cuesta al dueño del servidor la confianza de quien lo sigue, y el trabajo del webmaster es asignar URIs que pueda sostener durante 2, 20 o 200 años. HTTP tiene señales para cuando el cambio no se puede evitar. El 308 Permanent Redirect de la RFC 9110 dice que el recurso tiene una URI permanente nueva y que las referencias futuras deberían usarla, y a diferencia del 301 conserva el método de la petición, algo que importa a un agente que envía un POST. El 410 Gone dice que el acceso ya no está disponible y que la situación probablemente es permanente, con el propósito declarado de que se eliminen los enlaces remotos, así que el agente puede descartar el enlace en vez de reintentar. AX-SYS-09 mapea tus recursos; este principio mantiene válidas en el tiempo las direcciones de ese mapa.
Haz
Construye las URLs alrededor de IDs estables, responde a las URLs movidas con 308 y un Location, y a las retiradas con 410 y una referencia a lo que las reemplazó.
No hagas
Renombrar rutas en un rediseño y dejar que los enlaces viejos caigan en 404, ni redirigir cada URL muerta a la página de inicio.
Artefacto
GET /docs/refund-api HTTP/1.1
-> 308 Permanent Redirect
Location: /docs/refunds
POST /v1/refunds/legacy_export HTTP/1.1
-> 410 Gone
Content-Type: application/problem+json
{ "title": "Retired on 2026-07-01", "replacement": "/v1/exports?type=refunds" }
El agente actualiza el enlace guardado después del 308 y deja de reintentar después del 410.
Fuentes
- [01]W3C: Cool URIs don't change (Tim Berners-Lee, 1998) ↗
A cool URI is one which does not change; when someone follows a link and it breaks, they generally lose confidence in the owner of the server; it is the duty of a Webmaster to allocate URIs which you will be able to stand by in 2 years, in 20 years, in 200 years
- [02]RFC 9110: HTTP Semantics (15.4.9, 308 Permanent Redirect) ↗
308 indicates that the target resource has been assigned a new permanent URI and any future references to this resource ought to use one of the enclosed URIs; 307 and 308 were added to unambiguously indicate method-preserving redirects, while 301 and 302 allow a POST to be redirected as GET
- [03]RFC 9110: HTTP Semantics (15.5.11, 410 Gone) ↗
410 indicates that access to the target resource is no longer available at the origin server and that this condition is likely to be permanent; it notifies the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to it be removed