Google trata 404 y 410 de manera diferente, y la diferencia importa cuando estás retirando URLs en masa. La versión corta: 404 dice "falta, intenta de nuevo más tarde"; 410 dice "desaparecida, nunca vuelve". Googlebot revisita 404s durante semanas antes de eliminarlas del índice. Elimina 410s en días. Si estás en medio de una migración y mirando miles de URLs que deberían desaparecer para siempre, elegir el código correcto ahorra semanas en la limpieza.
Qué significa realmente cada código
404 Not Found es la respuesta predeterminada cuando un recurso no existe en la URL solicitada. El servidor está diciendo "esta URL no tiene recurso ahora mismo". La implicación es permisiva: quizás la URL tenga un recurso más tarde, quizás es un error tipográfico, quizás el recurso se movió y alguien olvidó enviar una redirección. El 404 es una red amplia.
410 Gone es el código de retiro explícito. El servidor está diciendo "esta URL tenía un recurso, ha sido eliminado permanentemente, no preguntes de nuevo". Es la señal de puerta que se cierra. Google documenta esto explícitamente: 410 se interpreta como una señal más fuerte para eliminar la URL del índice que 404.
Cómo Googlebot trata cada uno
Comportamiento de 404. Googlebot encuentra un 404, marca la URL como faltante, pero la mantiene en la cola de rastreo. El bot revisita la URL en un cronograma cada vez más lento (24h, luego 7d, luego 30d, luego 90d). Si la URL eventualmente devuelve un 200 nuevamente, se reinstala. El ciclo continúa durante meses. La URL permanece en el informe de Cobertura de Search Console bajo "No encontrada (404)" durante todo el tiempo.
Comportamiento 410. Googlebot encuentra un 410, marca la URL como permanentemente retirada, la elimina del índice en cuestión de días. La URL aparece brevemente en Search Console bajo "Página eliminada por reclamación legal" o "Soft 404" dependiendo de la interpretación de Google, luego desaparece. La cola de rastreo deja de revisitarla.
La diferencia funcional es días versus meses de contaminación del índice.
Cuándo elegir 410 sobre 404
- Limpieza de migración: URLs que ya no existen en el nuevo sitio y no tienen equivalente semántico. Usa 410. Se han ido.
- Publicaciones de blog eliminadas: contenido antiguo que intencionalmente has retirado. 410 si estás seguro; 404 si existe alguna posibilidad de que la publicación vuelva bajo el mismo slug.
- Páginas de productos deactivados: SKU que ya no vendes. 410 si el producto se retira permanentemente; 404 si podría volver.
- Jubilación de patrón de URL: por ejemplo, retirar /forum/* porque el foro fue deactivado. 410 en toda la ruta.
- URLs basura de hackeos pasados o errores de CMS que de alguna manera terminaron en el índice. 410.
Cuándo 404 es la opción correcta
- Errores tipográficos y URLs que nunca existieron: 404 es la respuesta convencional. 410 sería incorrecto porque la URL nunca tuvo contenido para empezar.
- Contenido bajo revisión para republicación: si la URL podría volver, 404 mantiene la puerta abierta para que Google la encuentre de nuevo.
- Páginas temporalmente no disponibles: 404 es incorrecto aquí también — usa 503 con un encabezado Retry-After. Pero sin eso, 404 es el default más seguro para casos ambiguos.
Cómo configurar 410 en plataformas comunes
Vercel (vercel.json)
Añade una regla de rewrite o código de estado. El patrón más limpio es entregar un endpoint /410 y reescribir URLs retiradas hacia él con statusCode 410. Ten en cuenta que vercel.json soporta nativamente redirects, no rewrites de código de estado para URLs arbitrarias; el patrón es usar un middleware de Next.js que retorne new Response(null, { status: 410 }) para cualquier URL en tu lista de retiro.
Netlify (netlify.toml o _redirects)
Usa la sintaxis _redirects: /retired-url 410! — el signo de exclamación al final es el flag force-status. O en netlify.toml, usa un bloque [[redirects]] con status = 410.
Apache (.htaccess)
Redirect gone /retired-url — o usa RewriteRule con el flag [G]: RewriteRule ^retired-url$ - [G,L].
Nginx
return 410; dentro de un bloque location que coincida con el patrón de URL. Para patrones en masa: location ~ ^/old-pattern/ { return 410; }.
Por qué esto importa a escala
Un sitio con 10.000 URLs retiradas divididas 50/50 entre 404 y 410 verá la mitad de 410 desaparecer del informe de Cobertura dentro de dos semanas, y la mitad de 404 fluctuar en el informe de Cobertura durante tres a seis meses. El conjunto de 404 ocupa presupuesto de rastreo de Googlebot que debería ir a las URLs que quieres indexar. En sitios más grandes el impacto en el presupuesto es medible: menos presupuesto para retiradas significa más para contenido nuevo.
El patrón de migración
Tres pasos para cualquier limpieza de migración. Uno: extrae cada URL de Search Console, Ahrefs y el sitemap antiguo. Dos: categoriza cada URL en uno de cuatro grupos: (a) se asigna a una URL nueva → redirección 301, (b) renombrada a nuevo slug → 301, (c) retirada permanentemente → 410, (d) estado ambiguo → 404. Tres: despliega las reglas de redirección/410/404 en vercel.json o .htaccess en el mismo deploy que el contenido nuevo, más un linter SEO en tiempo de construcción que rompa la construcción si falta alguna URL anterior a la migración del conjunto de reglas.
Vale la pena conocer: el código 451
451 Unavailable For Legal Reasons existe para contenido que has sido legalmente obligado a retirar. Es raro y específico — DMCA takedowns, GDPR derecho al olvido cuando la URL se retira completamente, órdenes judiciales. Google lo interpreta de manera similar a 410 (desaparece del índice) pero la señal legal es lo que importa. Úsalo solo cuando el contexto legal aplica.
El resumen
Usa 410 para retiro permanente. Usa 404 para contenido genuinamente faltante o ambiguo. La diferencia de limpieza de índice de dos semanas versus seis meses aparece en cada migración de algunos miles de URLs. La solución es una regla en vercel.json, netlify.toml, o .htaccess. Hazlo bien en el cutover y ahorras la limpieza posterior al lanzamiento que nadie presupuesta.
Lectura adyacente: 301 vs 302 vs 307 vs 308 es la decisión relacionada para URLs que no se retiran sino que se mueven. La misma limpieza de migración que necesita 410 también necesita la decisión de código de redirección; consulta el post de estrategia de redirección para ese marco.