Vercel Deployment Best Practices 2026: El Zero-Config es el Lock-In más Elegante que Existe

Vercel Deployment Best Practices 2026: El Zero-Config es el Lock-In más Elegante que Existe

Programación· 14 min de lectura

Con 2,4 millones de desarrolladores, Vercel no es hosting: es la forma en que todo el ecosistema React aprende a escribir aplicaciones

Tienes el proyecto en local. vercel deploy —pull. Y funciona.

Un minuto después tienes una URL de producción con HTTPS, CDN global, preview deployments por cada pull request y análisis de rendimiento. Ni un solo archivo de configuración de servidor, ni una decisión sobre regiones, ni un certificado SSL que gestionar.

*Nada de eso es un accidente. Es la máquina funcionando exactamente como fue diseñada. *

Es fácil describir esa experiencia como magia o como "la mejor DX del ecosistema". Pero conviene pararse a pensar en lo que realmente está ocurriendo bajo la superficie. Vercel posee el framework (Next.js), controla el runtime (Edge Functions), diseña las APIs que usas (generateStaticParams, ISR, Streaming) y cobra por hosting. Dos millones y medio de desarrolladores se han convertido en el banco de pruebas de un ecosistema verticalmente integrado.

Ese modelo —propietario del framework, del runtime y del hosting— no es exclusivo de Vercel. Es el mismo patrón que históricamente han seguido AWS con sus servicios, Apple con su ecosistema de desarrollo o, en el pasado, Microsoft con Windows y Visual Studio. La diferencia es que Vercel lo envuelve en una capa tan pulida que parece que no hay nada que gestionar. Y ahí reside el problema silencioso.

Cuando una plataforma controla las tres capas críticas de tu aplicación —cómo la escribes (framework), dónde la ejecutas (runtime) y dónde la sirves (hosting)—, la decisión de quedarte o marcharte deja de ser una decisión técnica. Se convierte en una decisión de arquitectura que, cuanto más tiempo pasa, más cara es de deshacer.

El problema no es que Vercel sea malo. De hecho, es probablemente el mejor hosting que existe hoy para aplicaciones Next.js. El problema es que el zero-config te hace asumir decisiones que después no puedes revertir, y lo hace de forma tan transparente que ni siquiera notas que las estás tomando.

1. El Fraude Elegante: Tu App "Funciona" Hasta que Quieres Moverte

Lo que la mayoría hace: "Funciona en local, desplegamos en Vercel y olvidamos".

Lo que sucede en realidad: tu middleware usa Edge Runtime. Tu ISR depende de revalidación on-demand que solo Vercel sirve de verdad. Tu next/image optimiza en el borde con su procesador privado. Tu preview deployment por commit depende de su sistema de control de versiones integrado. Y las métricas que ves en el dashboard provienen de un RUM (Real User Monitoring) que no exporta los datos crudos con facilidad.

Cada una de esas piezas parece una feature aislada. Pero juntas forman un mazo de cartas del que es muy difícil salir sin romper algo por el camino.

El error: asumes que Vercel es un servidor genérico con esteroides.

La práctica correcta: tratas cada API como una dependencia que puedes sustituir.

Un proveedor genérico (Fly.io, Railway, Cloudflare Workers, o incluso un VPS de Hetzner con tu propio proxy) no te da ISR funcionando como Vercel. La revalidación on-demand, las Edge Functions, el preview por commit, la optimización de imágenes en el borde... son funcionalidades de plataforma, no del framework. Next.js como framework es de código abierto y portable; el ecosistema que lo rodea en Vercel no lo es.

El día que quieras migrar —por presupuesto, por control, por requisitos de residencia de datos o porque quieras usar otro framework— te das cuenta de que no estás desplegando una app. Estás desplegando una serie de acoplamientos implícitos que nunca firmaste explícitamente.

*Estás desplegando una deuda técnica en diferido. *

La clave para invertir ese fraude elegante no es abandonar Vercel. Es desplegar en Vercel desde una posición de propiedad: sabiendo exactamente qué parte de tu aplicación depende del ecosistema y cuál es tu alternativa declarada para cada una de esas partes. Esa es la diferencia entre ser huésped y ser propietario.

2. La Regla de Oro: Si No Puedes Reproducirlo Localmente, No Lo Despliegues

Aplica el patrón de dependencia en reversa. Todo lo que hace tu app en producción debe poder ejecutarse en tu ordenador. Si hay una sola pieza de tu aplicación que solo funciona dentro del ecosistema de Vercel, esa pieza es deuda técnica con fecha de vencimiento incierta.

El ejemplo más claro de esta regla es la revalidación. Vercel expone revalidatePath y revalidateTag como si fueran parte de Next.js. Lo son, parcialmente, pero solo funcionan de verdad si el runtime que sirve tus páginas conoce el sistema de cache que las está generando. En un servidor VPS con Node ordinario, revalidatePath no tiene a quién llamar: no existe el proceso que gestione la invalidación.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

La alternativa portátil es abstrayar la revalidación a tu propio HTTP layer. En lugar de llamar a una función interna del framework, emites una petición a tu propia capa de cache (un NGINX, un proxy Nitro, o un Edge KV como Cloudflare KV o Upstash). Así, tu código de revalidación solo sabe que existe un cache delante de tu aplicación y que puede purgarlo con una petición HTTP.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

La lógica de esta segunda versión es idéntica: recibes una petición, verificas un token y purgas una página del cache. Pero la implementación es radicalmente distinta en una dimensión crucial: la segunda versión funciona en cualquier parte. La primera solo dentro del ecosistema.

Este patrón —abstraer la operación técnica sobre una interfaz que tú controlas— es el mismo principio que aplican las buenas arquitecturas de software en todos los demás dominios: bases de datos tras repositorios, servicios externos tras interfaces, colas tras adaptadores. En el hosting debería ser igual de evidente, pero el zero-config lo esconde tan bien que casi nadie lo aplica.

El Marco de Portabilidad de 5 Capas

Esta es la arquitectura que usamos en cada deploy serio. El Marco de Portabilidad de 5 Capas.

Cada capa de tu proyecto debe tener una alternativa declarada. No implementada — declarada. Sabes adónde moverías cada pieza si Vercel desapareciera mañana, si subiera los precios un 300% o si simplemente decidieras que quieres tu propio VPS con todas las piezas bajo control.

El valor de declarar la alternativa no es solo práctico (tener un plan B escrito). Es conceptual: te obliga a descubrir qué piezas de tu aplicación son verdaderamente portables y cuáles están irremediablemente pegadas a la plataforma. Ese inventario de acoplamientos es, en sí mismo, uno de los activos técnicos más valiosos que puede tener un equipo.

Capa 1: Middleware y Edge — Nunca Negocio, Siempre Transporte

El middleware de Next.js en Vercel se ejecuta en Edge Functions. Las limitaciones son brutales: sin Node.js completo, sin leer el body de un POST, con límite de tamaño de paquete, y con tiempos de ejecución muy acotados. Cualquiera que haya intentado meter autenticación completa, validación de sesiones contra una base de datos o cálculo pesado en un middleware ha chocado antes o después con esos límites.

Úsalo solo para transporte: A/B testing, geolocalización, headers de cache, redirecciones por dispositivo o por idioma. La lógica de negocio vive en API Routes, Server Components o en tu propio backend.

Lo que la mayoría hace: meten autenticación completa en middleware y luego añaden una función que no cabe en el límite del runtime, o peor, una dependencia que no está soportada en el runtime de edge.

Lo que deberías hacer: middleware = router de transporte. Lógica = código en tu backend.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Nótese que este middleware no consulta una base de datos, no valida tokens, no toma decisiones de autorización. Lo único que hace es enriquecer la petición con información de contexto —en este caso, el país del visitante— y pasar el control al siguiente eslabón. Así de simple debería ser siempre.

La razón de fondo es de diseño: el middleware debe ser tan ligero que pueda reimplementarse en cualquier runtime de edge —Cloudflare Workers, Deno Deploy, Fastly Compute— sin cambiar una sola línea de lógica. Si tu middleware solo manipula headers y URLs, esa portabilidad es trivial. Si contiene tu sistema de autenticación, es un trabajo de meses desacoplarlo.

Capa 2: ISR — El Impuesto Oculto del Build

ISR (Incremental Static Regeneration) es la feature más rompedora de Next.js: páginas estáticas que se regeneran en background. En teoría, es lo mejor de los dos mundos: el rendimiento del HTML estático con la frescura del contenido dinámico.

Pero su implementación — revalidación por tag, on-demand, con tiempo de build — es un ecosistema privado de Vercel. En otro proveedor tienes que montar tú mismo el mecanismo que detecta cuándo una página necesita regenerarse, dispara el rebuild y purga el CDN. No es imposible, pero es trabajo que no esperabas tener que hacer.

La práctica correcta: diseña tu app para que ISR sea un bonus, no un requisito. Si tu página funciona como HTML estático generado en build, puedes moverte a cualquier proveedor sin dolor.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Esta configuración es un buen ejercicio mental: te obliga a preguntarte por cada opción si estás tomando una decisión consciente o aceptando el valor por defecto de la plataforma. ¿De verdad necesitas ISR, o tu contenido es suficientemente estático para un generateStaticParams completo con un job de regeneración periódica? ¿De verdad necesitas el optimizador de imágenes de Vercel, o puedes servir imágenes con un transformador propio o un CDN de imágenes como Cloudinary o imgix?

Si respondes honestamente a esas preguntas, descubrirás que una parte sorprendentemente grande de las aplicaciones Next.js puede funcionar perfectamente como HTML estático generado en build, con una capa de datos que consulta APIs externas. Y esa es la arquitectura más portable que existe.

Capa 3: Base de Datos y Storage — Fuera del Ecosistema

Vercel Postgres, Vercel Blob, Vercel KV. Nombres bonitos (son Neon, UploadThing y Upstash) pero el contrato es privado. Si algún día migras, no te llevas los datos con una exportación sencilla: te llevas un problema de conversión de esquemas, credenciales y deuda de integración.

*La regla de oro: tu base de datos no vive en Vercel. *

Conecta tu proyecto a un proveedor independiente (Neon, Supabase, Upstash, PlanetScale) con su propia URL y su propia consola de gestión. Así tu data layer se mantiene intacto si cambias de plataforma de hosting. La base de datos es la capa más difícil de migrar de cualquier aplicación —los datos son el activo más valioso del negocio—, así que es la última de la que deberías depender de un proveedor de hosting.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

Fíjate en la diferencia conceptual. DATABASE_URL es tu variable de entorno, apuntando a un proveedor independiente. Si mañana migras de Vercel a Fly.io o a Railway, esta línea de código no cambia. La base de datos sigue en el mismo sitio, con las mismas credenciales, con la misma latencia esperada. La única cosa que cambia es dónde se ejecuta el código que la consulta.

Capa 4: CI/CD — El Preview Debe Ser un Workflow, No un Afterthought

Cada pull request produce un preview deployment. Si no lo usas como review de producto —con métricas de rendimiento, errores y datos reales— estás desperdiciando tu herramienta más potente. El preview deployment es la única oportunidad que tienes de ver tu código corriendo en producción antes de que lo vea un solo usuario real.

La práctica correcta: el pipeline es verificar que el preview, no el deploy, pase las comprobaciones críticas.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

El error más caro: confiar en que el deploy de producción es tu entrada de verificación. El preview existe para que tú — no tu usuario — encuentres el error primero. Cada deploy a producción sin pasar por una revisión en preview es un lanzamiento de moneda donde la cara es "funciona" y la cruz es "lo descubre el cliente".

Además, el workflow de CI/CD debe ser portable. Si tu pipeline de verificación está dentro del sistema de Vercel, estás atado a su manera de hacer las cosas. Si, en cambio, tu verificación corre en GitHub Actions (o en cualquier otro runner CI generico) contra el código del repo, esa parte de tu proceso sigue siendo tuya cuando te mudes.

Capa 5: Config Comprometida — Dueño de Tu Deployment

Todo tu vercel.json, next.config.js, variables de entorno y monorepo config debe estar en el repo con el resto del código.

No "recuerdas" tu config de Vercel en un dashboard. Lo versionas. Un cambio sin PR es un cambio que no existe. Esta es quizá la capa más sencilla de aplicar y la que más equipos descuidan.

[@portabletext/react] Unknown block type "code", specify a component for it in the `components.types` prop

La razón es que un dashboard es un estado externo que nadie audita. Si la configuración de tu deployment vive en un dashboard, el día que otro miembro del equipo necesite entender por qué tu aplicación se sirve desde ciertas regiones, o por qué hay un redirect que nadie recuerda haber creado, no tiene forma de rastrearlo. En el repo, en cambio, cada cambio tiene un autor, un motivo y un histórico consultable.

Cada capa declarada con su alternativa = tienes un plan B real antes de necesitarlo. Y tener un plan B antes de necesitarlo es, paradójicamente, lo que te permite usar la plataforma con toda su potencia sin miedo.

El Framework es el Foso — No la Plataforma

Hay una cita que repito en cada proyecto: no es hosting, es un ecosistema. Los 2,4 millones de desarrolladores de Vercel no están eligiendo un hosting. Están eligiendo una forma de pensar sobre el despliegue, sobre el rendimiento, sobre el ciclo de vida de una aplicación web. Y la están eligiendo porque es la más cómoda que existe, no necesariamente la más racional desde el punto de vista de la propiedad tecnológica.

*Están aprendiendo a escribir aplicaciones en la forma que Vercel quiere que escriban. *

Eso no tiene por qué ser malo. De hecho, hay algo admirable en una plataforma que simplifica tanto el onboarding que un desarrollador junior puede desplegar su primera app en cinco minutos. El problema no es la comodidad; es la inconsciencia. Es que la mayoría de los equipos que se benefician del zero-config no son conscientes de lo que están firmando con cada decisión implícita.

La buena noticia es que el foso competitivo real de tu aplicación —lo que hace que los usuarios te elijan a ti y no a tu competidor— no es el hosting ni el framework. Es tu lógica de negocio, tu base de datos, tus algoritmos, tu experiencia de usuario. El hosting es un medio, no el producto. Por eso el marco de portabilidad tiene sentido: porque libera el medio para que puedas concentrar toda tu energía en el producto.

Pero eso no te obliga a ser rehén. El Marco de Portabilidad de 5 Capas convierte a Vercel en lo que debería ser: un acelerador táctico con una salida de emergencia a mano.

Tú no abandonas la plataforma hoy. No tienes por qué. El mejor hosting con el mejor framework y las mejores APIs de su categoría. La portabilidad no es un plan de fuga; es una póliza de seguro que jamás esperas usar, pero que te deja dormir tranquilo sabiendo que, si llega el día, estás cubierto.

*Lo que haces es dormir sabiendo que mañana podrías. *

Es la diferencia entre construir tu negocio sobre la plataforma o construir tu negocio Y la plataforma. Una te hace dependiente. La otra te hace propietario.

Y la propiedad tiene un beneficio adicional que pocos consideran: el poder de negociación. Cuando eres propietario de tu stack y sabes que puedes marcharte, cualquier discusión sobre precio, sobre features, sobre SLA o sobre roadmap es una conversación entre iguales. Cuando eres dependiente, todas esas discusiones las gana la plataforma siempre.

Empieza hoy. Compromete tu vercel.json. Declara tu alternativa a cada capa. Documenta en tu repo qué moverías adónde si mañana Vercel cambiara las reglas del juego. Haz de la portabilidad una práctica permanente, no un proyecto puntual.

Y la próxima vez que alguien diga "es que es muy fácil con Vercel", respóndele que lo fácil siempre tiene un coste.

*El coste es saber si puedes marcharte. *

Artículos relacionados

---

¿Quieres recibir contenido como este cada semana? Suscríbete a mi newsletter

Brian Mena

Brian Mena

Ingeniero informatico construyendo productos digitales rentables: SaaS, directorios y agentes de IA. Todo desde cero, todo en produccion.

LinkedIn