Next.js 15: Cambio crítico de searchParams

Guía para migrar a Next.js 15 cuando searchParams es una Promesa: por qué, cómo hacerlo con seguridad y cómo aprovechar rendimiento y streaming.

2 sept 2025 • 6 min de lectura • Equipo Q2BSTUDIO

Inteligencia-Artificial-

Comprendiendo el cambio de objetos síncronos a Promesas en Next.js y cómo migrar tu código al nuevo modelo

Publicado el 21 de octubre de 2024, Next.js 15 llegó con novedades potentes y un cambio que tomó por sorpresa a muchos equipos: searchParams ahora es una Promesa. Si vienes de Next.js 14 y estás planeando actualizar, esta ruptura de compatibilidad exige pequeños ajustes. Aquí encontrarás qué cambió, por qué cambió, cómo migrar de forma segura y cómo aprovechar los beneficios de rendimiento que habilita.

Qué cambió

En Next.js 14, searchParams era un objeto accesible de forma síncrona dentro de los Server Components. En Next.js 15, searchParams es una Promesa que debes resolver con await. En la práctica, tu componente de página debe ser async y necesitas await searchParams antes de leer sus propiedades. Un patrón recomendado es hacer await una vez y luego desestructurar: const params = await searchParams; const { q, page, sort } = params. Evita hacer await repetidos sobre la misma Promesa.

Por qué se introdujo este cambio

Primero, para habilitar streaming y renderizado concurrente a nivel de plataforma, permitiendo que el servidor comience a enviar partes de la interfaz antes de resolver todos los parámetros. Segundo, para mejorar la gestión de recursos y el parsing de URLs complejas en el servidor. Tercero, para alinear el framework con la dirección asíncrona de React y el uso de Suspense en Server Components. Y cuarto, para preparar optimizaciones futuras en el pipeline de renderizado del lado servidor.

Migración paso a paso

1. Marca tus páginas como funciones async. 2. Haz await de searchParams antes de acceder a sus claves y desestructura después del await. 3. Actualiza helpers y utilidades que reciban searchParams para que acepten una Promesa o para que esperen el objeto resuelto internamente. 4. Valida los parámetros de URL con defaults seguros, por ejemplo convertir page a entero mínimo 1, limitar limit a un máximo razonable y normalizar sort a un conjunto permitido. 5. En TypeScript, tipa las props como searchParams: Promise y conserva un índice flexible para claves dinámicas. 6. Añade try catch para manejar posibles errores al resolver la Promesa, devolviendo estados de error amigables. 7. Ajusta tus tests para pasar un Promise.resolve con el objeto de parámetros simulado y para invocar el componente async de forma asíncrona.

Errores comunes y cómo evitarlos

Olvidar el await y tratar searchParams como objeto romperá la ejecución. Usar await dentro de un componente que no es async fallará. Esperar la misma Promesa varias veces incurre en sobrecoste y ruido; espera una vez, guarda el resultado y reutilízalo. Si pasas searchParams a un hijo Server Component, puedes pasar la Promesa y resolverla allí, protegida por un Suspense si lo necesitas. Recuerda que en Client Components el patrón recomendado sigue siendo el hook useSearchParams de next/navigation, que se mantiene orientado al cliente.

Buenas prácticas

Haz await una sola vez y desestructura. Centraliza el parseo en una función reutilizable que convierta page, limit y filtros a tipos primitivos válidos y con valores por defecto. Valida whitelists para sort y evita inyecciones en consultas. Utiliza Promise.all para resolver en paralelo searchParams y otros datos del servidor. Añade límites y normalizaciones numéricas. Separa la resolución de searchParams del fetching de datos para facilitar tests y reutilización. Considera Suspense para aislar la espera de parámetros en subárboles específicos y favorecer el streaming de encabezado y diseño principal.

Ejemplo conceptual antes y después

Antes en Next.js 14: function Page({ searchParams }) { const q = searchParams.q; const page = parseInt(searchParams.page) || 1; ... }. Después en Next.js 15: async function Page({ searchParams }) { const params = await searchParams; const { q, page: pageParam } = params; const page = Math.max(1, parseInt(pageParam) || 1); ... }. El patrón clave es que todo acceso a propiedades ocurre tras await.

Patrones de validación rápidos

Convierte page a entero mínimo 1. Limita limit con un rango seguro, por ejemplo entre 1 y 50. Asegura sort con una lista de valores permitidos como name price date. Normaliza booleanos desde cadenas a booleanos reales, por ejemplo in_stock igual a true. Limpia arreglos de filtros eliminando entradas vacías.

Rendimiento y streaming

Al ser asíncrono, el árbol puede comenzar a renderizar con layout, cabecera y contenido base mientras se resuelven los parámetros en secciones específicas bajo límites de Suspense. Esto reduce el tiempo a primer byte visual y mejora la percepción de velocidad. Además, puedes resolver en paralelo searchParams y datos de negocio con Promise.all para reducir el tiempo total de respuesta.

TypeScript en pocas líneas

Declara una interfaz SearchParams con claves opcionales y un índice flexible para parámetros adicionales. En las props, usa searchParams: Promise. Tras await, aplica refinamiento de tipos y normalizaciones para garantizar que tu capa de datos reciba valores correctos.

Testing

En pruebas unitarias, crea un mock con Promise.resolve y pásalo como prop searchParams a tu componente de página. Renderiza de forma asíncrona en el entorno de test, verifica que se muestren textos derivados de q, category, page y valida que se apliquen defaults cuando faltan parámetros.

Migración automatizable

Puedes iniciar con una búsqueda por funciones export default function que reciban searchParams y convertirlas a async. Luego introduce una variable intermedia como const params igual a await searchParams y reemplaza accesos directos por params.clave. Apóyate en reglas de ESLint para prevenir await faltantes y en revisiones de tipado para detectar accesos inseguros.

Checklist rápido

Convierte tus páginas a async. Haz await de searchParams una vez y desestructura. Actualiza helpers y tipos. Añade validación y defaults. Usa Promise.all para concurrencia. Cubre con tests y estados de error. Comprueba rutas con múltiples combinaciones de consulta.

Cómo encaja esto en productos reales

En catálogos, listados de blog o buscadores, el patrón asíncrono permite emitir el contenedor y la navegación de inmediato y demorar secciones dependientes de filtros costosos. Al combinarlo con almacenamiento en caché del lado servidor y segmentación por parámetros, se obtienen mejoras tangibles en experiencia y SEO técnico.

Q2BSTUDIO te acompaña

En Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida, especialistas en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y power bi, automatización de procesos, agentes IA e ia para empresas. Si necesitas migrar a Next.js 15, optimizar rendimiento o construir una plataforma moderna de extremo a extremo, nuestro equipo puede ayudarte a diseñar, desarrollar y asegurar cada capa de tu solución. Conoce cómo abordamos proyectos de software a medida y multiplataforma en desarrollo de aplicaciones y software a medida o descubre cómo aceleramos casos de uso con modelos, orquestación y agentes en inteligencia artificial para empresas.

Conclusión

El cambio de searchParams a Promesa en Next.js 15 es un paso lógico hacia un modelo de renderizado más eficiente y concurrente. La migración es directa si aplicas tres ideas clave: convierte tus páginas a async, haz await de searchParams y centraliza el parseo y validación. A partir de ahí, podrás habilitar streaming, reducir el tiempo de respuesta percibido y escalar tus vistas con mayor robustez. Recuerda validar y sanear siempre los parámetros de URL, y apóyate en tests para garantizar que tu transición sea segura.

Palabras clave relacionadas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

Inteligencia artificial

Agentes de IA, chatbots y asistentes inteligentes que automatizan tareas y atienden a tus clientes 24/7 para mejorar la eficiencia de tu negocio.

Más info

Desarrollo de software

Aplicaciones web, móviles y de escritorio, intranets, e-commerce, SaaS y plataformas de gestión diseñadas para las necesidades concretas de tu empresa.

Más info

Servicios cloud

Migración, infraestructura, hosting gestionado, alta disponibilidad y seguridad en Microsoft Azure y Amazon Web Services para que tu negocio escale sin límites.

Más info

Ciberseguridad y pentesting

Auditorías de seguridad, test de intrusión (pentesting) y protección de aplicaciones, datos e infraestructura on-premise y cloud, con hacking ético y cumplimiento normativo.

Más info

Business Intelligence

Cuadros de mando y análisis de datos con Power BI: integramos tus fuentes, diseñamos dashboards y KPIs y convertimos tus datos en decisiones.

Más info

Automatización de procesos

Automatizamos tareas repetitivas y conectamos tus aplicaciones con n8n, Power Automate, Make y RPA, eliminando trabajo manual y aumentando la productividad.

Más info

Formación para empresas

Formamos a tus equipos en tecnología con criterio: desarrollo web, bases de datos, Git, buenas prácticas y seguridad, automatización con n8n, inteligencia artificial para empresas y creación de soluciones de IA con Azure AI Foundry.

Más info

Auditoría de código

Auditamos el código que creas tú, tu equipo o una IA: te decimos qué está bien y qué mejorar, lo securizamos y lo dejamos listo para producción, web o app.

Más info

Generación de imágenes con IA

Creamos por ti las imágenes que necesita tu negocio con inteligencia artificial: producto, redes, publicidad, ilustración y avatares. Tú nos dices qué quieres y te lo entregamos listo para usar.

Más info

Generación de vídeos con IA

Creamos por ti vídeos con inteligencia artificial: promocionales, para redes, presentadores virtuales, doblaje y animaciones. Nos cuentas la idea y te lo entregamos montado y listo para publicar.

Más info

Avatares conversacionales con IA

Creamos avatares conversacionales con IA —humanos digitales con cara y voz— que atienden a tus clientes y equipos con el conocimiento de tu empresa, en tu web, monitores interactivos, WhatsApp o Teams.

Más info

Marketing Online e IA

Google Ads, Meta Ads, LinkedIn Ads y posicionamiento en motores de IA (GEO/AEO): captamos clientes y hacemos que tu marca aparezca donde te buscan, también en ChatGPT, Gemini y Perplexity.

Más info

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.

Live Chat