Intercepting Routes Next.js

Guía de Next.js: Intercepting Routes para modales avanzados

¿Alguna vez has navegado por Instagram o Reddit y has notado que, al hacer clic en una foto, esta se abre en un modal sin perder el contexto de la página principal, pero la URL cambia mágicamente? Intentar replicar este comportamiento con estados de React tradicionales es una pesadilla de mantenimiento y SEO.

En pleno 2026, la arquitectura de aplicaciones web exige fluidez. Los usuarios ya no toleran recargas de página innecesarias, pero los desarrolladores necesitamos que cada contenido tenga su propio enlace para ser compartido. Aquí es donde entran las Intercepting Routes de Next.js, una funcionalidad del App Router que separa la navegación visual de la estructura de rutas del servidor.

En esta guía profesional de AndroFan, vamos a desglosar cómo implementar este patrón avanzado. Olvida los useState(isOpen) mediocres; vamos a construir una experiencia de navegación de nivel Enterprise que elevará tus proyectos al estándar actual de la industria.

Conceptos clave: Intercepting vs Parallel Routes

Para dominar los modales avanzados, primero debemos entender que las Intercepting Routes casi nunca viajan solas. Normalmente se combinan con las Parallel Routes (rutas paralelas) para mostrar contenido en un slot específico del layout.

¿Qué es exactamente interceptar una ruta?

La interceptación permite cargar una ruta desde otra parte de tu aplicación dentro del diseño actual. Es decir, cuando el usuario hace clic en un Link, Next.js intercepta esa navegación y muestra un componente alternativo en lugar de realizar una transición de página completa.

  • Navegación suave: Se muestra el modal manteniendo el contexto visual previo.
  • Recarga de página: Si el usuario refresca (F5), Next.js carga la página completa (full page) del recurso.
  • Compartir enlaces: La URL en el navegador es la del recurso final, permitiendo copiar y pegar el enlace directamente.
💡 Consejo Pro: Piensa en las Intercepting Routes como un «disfraz» que se pone una ruta cuando se accede a ella mediante una navegación interna (client-side), pero que se quita cuando el acceso es directo desde el servidor.

Estructura de archivos y convenciones (..)

La magia de esta característica reside en la nomenclatura de las carpetas dentro del directorio /app. Next.js utiliza una sintaxis similar a los sistemas de archivos relativos (../) para determinar qué ruta interceptar.

Las convenciones de carpetas

  1. (.) para interceptar segmentos en el mismo nivel.
  2. (..) para interceptar segmentos un nivel por encima.
  3. (..)(..) para interceptar segmentos dos niveles por encima.
  4. (…) para interceptar segmentos desde la raíz del directorio app.
ConvenciónNivel de InterceptaciónCaso de Uso Común
(.)Mismo nivelModales de edición rápida en una lista.
(..)Nivel superiorVistas de detalle (Feed -> Post).
(…)Raíz (App)Páginas de login o perfiles globales.

Implementación paso a paso del modal

Supongamos que tenemos una galería de fotos en /feed y queremos que al pulsar una foto se abra un modal con la ruta /photo/[id]. Aquí los pasos técnicos precisos:

1. Crear el Slot Paralelo

En tu layout.js principal, debes definir dónde se renderizará el modal. Usaremos un slot llamado @modal.


export default function Layout({ children, modal }) {
  return (
    <html>
      <body>
        {children}
        {modal}
      </body>
    </html>
  );
}

2. Configurar la Intercepting Route

Crea la carpeta @modal/(.)photo/[id]. Dentro de esta carpeta, el archivo page.js será el que se muestre como modal. Es vital que el nombre coincida con la ruta real que quieres interceptar (/photo/[id]).

3. Crear la ruta real

No olvides crear la ruta física /photo/[id]/page.js. Esta es la que verán los usuarios que entren directamente por URL o recarguen la página. Aquí es donde aplicamos el principio de Progressive Enhancement.

⚠️ Importante: Asegúrate de que el archivo default.js exista dentro de tu slot @modal. Si no lo haces, Next.js devolverá un 404 cuando el modal no deba estar activo tras una navegación.

Gestión de estados y cierre del modal

Uno de los errores más comunes en 2026 es no gestionar correctamente el historial del navegador al cerrar el modal. Al ser una ruta real, cerrar el modal implica «volver atrás».

Para implementar el cierre, puedes usar el hook useRouter de next/navigation. Al detectar un clic fuera del contenido o en un botón de cerrar, ejecutamos router.back(). Esto asegura que la URL vuelva a ser la del feed original.

  • Fondo oscuro (Overlay): Crea un componente de cliente que maneje el evento de clic.
  • Bloqueo de scroll: Usa CSS (overflow: hidden) en el body cuando el slot modal tenga contenido.
  • Accesibilidad: Implementa el manejo de la tecla Escape y el foco atrapado (Focus Trap) para usuarios con lectores de pantalla.

Mejores prácticas para SEO y Accesibilidad

En AndroFan valoramos la eficiencia técnica. Implementar modales mediante rutas no es solo un capricho visual, es una estrategia de SEO. Al tener una ruta única, los motores de búsqueda pueden indexar el contenido individual de cada modal como una página independiente.

  1. Metadatos dinámicos: Usa la función generateMetadata tanto en la ruta interceptada como en la real para que los títulos de página cambien al abrir el modal.
  2. Carga diferida: Utiliza Suspense para mostrar un skeleton dentro del modal mientras se cargan los datos pesados de la imagen o el post.
  3. Compatibilidad con Share API: Al cambiar la URL, puedes integrar fácilmente el botón de compartir del sistema operativo en móviles Android e iOS.

Ventajas y Desventajas

✅ Ventajas

  • UX Superior: Navegación fluida sin perder el estado de la página de origen.
  • SEO Optimizado: Cada modal tiene su propia URL indexable.
  • Mantenibilidad: Código desacoplado del componente principal de la página.

❌ Desventajas

  • Curva de aprendizaje: La estructura de carpetas puede ser confusa al principio.
  • Complejidad inicial: Requiere configurar Parallel Routes simultáneamente.

Preguntas Frecuentes

¿Qué pasa si el usuario refresca la página con el modal abierto?

Gracias a que usamos rutas reales, el navegador cargará la página completa definida en /photo/[id] en lugar de la versión interceptada. Esto garantiza que el contenido siempre esté disponible.

¿Puedo interceptar rutas de dominios externos?

No. Las Intercepting Routes son exclusivas para la navegación interna dentro de tu aplicación Next.js.

¿Es compatible con animaciones de Framer Motion?

Totalmente. Puedes envolver el contenido del slot en un AnimatePresence para lograr transiciones suaves de entrada y salida.

Conclusión

  • Las Intercepting Routes permiten mostrar contenido nuevo sin perder el contexto visual actual.
  • Requieren una estructura de carpetas estricta usando (.) o (..).
  • Siempre deben ir acompañadas de una ruta real para garantizar la resiliencia del sitio.
  • Mejoran significativamente el SEO al proporcionar URLs únicas para cada pieza de contenido.

Si buscas que tu web se sienta como una aplicación nativa de alto rendimiento, esta es la técnica que debes dominar hoy mismo. ¿Has tenido problemas configurando los slots paralelos? ¡Cuéntanos tu experiencia en los comentarios!

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *