Estás aquí:
SPAgenciaSEO.com » Blog » Cómo redirigir errores 404 concretos a páginas específicas amigables

Cómo redirigir errores 404 concretos a páginas específicas amigables

Si tienes una web más o menos dinámica, donde creas y eliminas contenido (como productos que ya no están en stock, o landing pages temporales para campañas concretas) seguramente estés familiarizado con la importancia de hacer redirección para esas URLs que ya no existen.

A nadie le gusta que los visitantes que acceden a esas URLs se topen con un error 404: acumular errores 404 no solo ofrece una mala experiencia de usuario, sino que también pueden dañar tu posicionamiento SEO.

Cuando nos enfrentamos al problema de una URL eliminada, la lógica nos dice que tenemos que redirigir ese error hacia otra página relacionada.

¿Pero qué ocurre si necesitas eliminar contenido obsoleto, que sabes que no va a volver estar en línea, pero no quieres estar haciendo redirecciones todo el tiempo?

En este artículo, te mostraré una solución limpia y profesional que:

  • Redirige automáticamente un custom post eliminado a una página personalizada
  • No afecta en absoluto a los demás posts que siguen activos
  • La página 404 normal sigue funcionando pero no para nuestro custom post
  • Ofrecemos mejor contexto al usuario que se encuentra con ese error
  • No tenemos que hacer una redirección por cada custom post que eliminamos

Problema: cuando no quieres hacer redirecciones constantemente, pero un error 404 no es amigable con el usuario

Para este escenario no queremos tener que hacer redirecciones individuales cada vez que un post del grupo se elimina.

Tampoco podemos hacer una redirección masiva que capture todas las URLs que contengan el slug que use el tipo de contenido que queremos redirigir, porque redirigiría también a los posts activos, haciendo que ningún visitante pudiera acceder a ellos. Esto es un error crítico que debemos evitar a toda costa.

La clave está en crear una redirección condicional, que solo se active cuando WordPress ya haya determinado que la URL para el post type no existe (error 404).


La solución: una página de aterrizaje diferenciada y un snippet PHP personalizado

La forma más elegante y precisa de resolver este problema es mediante un pequeño fragmento de código PHP que añadiremos a nuestro tema. Este código actúa después de que WordPress procese la solicitud y detecte que la página no existe.

Ejemplo: aplicando esta lógica a un sistema de cupones de descuento

Imagínate que tienes un post type en tu instalación de WordPress para publicar cupones de descuento o promociones de corta duración, cada una con su URL específica. Este descuento o promoción estará online unos días y luego se eliminará.

Como el número de promociones entrantes y salientes es elevado, no quieres estar realizando redirecciones todo el tiempo cada vez que elimines una promoción, así que optas por lo siguiente:

  1. Creamos una página de aterrizaje tipo «Esta promoción ya no está disponible» a donde llegarán todos aquellos usuarios visitando URLs de promociones obsoletas y que hayamos eliminado de nuestra web
  2. Un snippet PHP analiza cada error 404 de la web, y si la página contiene el slug de nuestro post type, lo redirige a esa página de aterrizaje

Ventajas

Las ventajas de este sistema son varias:

  • Mejor flujo de trabajo: no tenemos que redireccionar manualmente cada promoción que eliminamos
  • Mejor experiencia de usuario: el usuario aterriza en una página informándole que la promoción que busca no existe, pero que puede buscar otras

Poniéndolo en marcha

Suponiendo que hayas creado tu página de aterrizaje para promociones eliminadas, por ejemplo esta:

https://example.com/esta-promocion-ya-no-existe/

Ahora crearemos el snippet PHP que redirigirá al usuario a esa página.

Este es el código que necesitas:


add_action( 'template_redirect', 'redirect_404_to_custom_page' );

function redirect_404_to_custom_page() {
    if ( ! is_404() ) {
        return;
    }

    $url_solicitada = $_SERVER['REQUEST_URI'];
    
    if ( preg_match( '#^/promocion/[^/]+/?$#', $url_solicitada ) ) {
        wp_redirect( 'https://example.com/esta-promocion-ya-no-existe/', 301 );
        exit;
    }
}

¿Cómo funciona este código?

  1. Detección del 404: El snippet primero comprueba que estamos ante un error 404, no ante una página que existe y que está en código 200.
  2. Verificación del patrón: Utiliza una expresión regular para asegurarse de que la URL solicitada coincide con la estructura de URLs de tu sistema de promociones, es decir que contiene el slug /promocion/ en ella
    • Los slugs del post type para las promociones en nuestro son siempre los mismos:
      • https://example.com/promocion/slug-promocion-1/
      • https://example.com/promocion/slug-promocion-2/
      • https://example.com/promocion/slug-promocion-3/
  3. Redirección selectiva: Solo si se cumplen ambas condiciones, redirige al usuario a la página personalizada que hayamos creado, en nuestro ejemplo, esta:
https://example.com/esta-promocion-ya-no-existe/

¿Cómo implementar esto en tu web?

La página de aterrizaje sólo es cuestión de crearla, no tiene más secreto. Te recomiendo publicarla en no index pero permitiendo que los enlaces puedan ser visitados, con estas dos metaetiquetas:

noindex, follow

Cualquiera de los plugins SEO para WordPress que hay en el mercado te permiten hacer eso fácilmente.

En cuanto al snippet PHP que hará el trabajo, tienes dos opciones para añadir este código a tu WordPress:

  1. Functions.php del tema: Puedes añadirlo directamente al archivo functions.php de tu tema activo. Sin embargo, recuerda que si actualizas el tema, perderás el código. Para evitarlo, debes usar un tema hijo. Si no tienes un tema hijo o no sabes lo que es, pasa al punto 2.
  2. Plugin de snippets: Instala un plugin como «Code Snippets» o «WP Code«, que te permiten añadir código PHP de forma segura y organizada, sin necesidad de tocar los archivos del tema.

Importante: Sustituye /promocion/ por el slug que uses para tu post type y modifica también la URL de la página personalizada que hayas creado.


Sé claro en tu landing page

La página a la que rediriges a tus visitantes cuando una promoción ya no existe debe ofrecer una buena experiencia. Te recomiendo incluir:

  • Un mensaje claro: explica que la promoción que el usuario está buscando ya no está disponible, pero hazlo de forma amable.
  • Añade enlaces útiles: dirige a los usuarios a tu página de promociones actuales o a la página de inicio.
  • Búsqueda: Incluye un buscador para que puedan encontrar promociones similares.

Ventajas de esta solución

  • Precisa: solo redirige posts eliminados, nunca afecta a los activos.
  • Automática: no necesitas crear redirecciones una por una para cada promoción eliminada.
  • Respetuosa con el SEO: La redirección 301 indica a los motores de búsqueda que el contenido se ha movido de forma permanente y ya no está disponible, y no se trata de un error 404 clásico
  • Personalizable: puedes adaptar la expresión regular a cualquier estructura de URLs o post type que tengas (promociones, descuentos, eventos caducados…)

Conclusiones

Como ves, gestionar contenido eliminado en WordPress no tiene por qué ser un dolor de cabeza. Con este sencillo snippet PHP, puedes ofrecer una experiencia de usuario coherente y profesional, manteniendo tu SEO intacto y sin complicarte la vida con redirecciones manuales.

La próxima vez que elimines un evento antiguo, recuerda que tus visitantes no se encontrarán con un error 404 genérico, sino con una página diseñada específicamente para guiarles hacia otros contenidos de tu sitio.

¿Has probado esta solución?

¿Tienes alguna otra estrategia para gestionar contenidos eliminados?

Comparte tu experiencia en los comentarios