Apoya mi contenido: 

Tabla de contenido

1) Requisitos previos

  • Repo en GitHub/GitLab/Bitbucket con tu app (Next.js, Astro, SvelteKit, Remix o estático).
  • Script de build definido (p. ej. next build).
  • Variables de entorno por entorno: VERCEL_ENV=development|preview|production.

2) Despliegue paso a paso

  1. Conecta tu repo desde Vercel > Add New… > Project.
  2. Ajusta la configuración de build:
    • Next.js: Vercel detecta next build.
    • Estático: define npm run build y Output Directory (p. ej. dist).
  3. Variables de entorno: crea grupos para Development, Preview y Production.
  4. Dominios: añade el dominio y activa redirecciones apex ↔ www.
  5. Preview Deployments: cada PR genera una URL para QA.
  6. Production: haz merge a main para publicar; activa protección si necesitas aprobación.

3) Optimización de costes (lo que realmente ahorra)

  • SSG primero: páginas estáticas desde CDN son más baratas que funciones serverless.
  • ISR (Incremental Static Regeneration): usa revalidate para refrescar sin recalcular en cada request.
  • Edge para lógica corta (AB testing, reescrituras). Evita conexiones largas en serverless.
  • Caché agresiva para assets con Cache-Control e immutable.
  • Optimiza imágenes (WebP/AVIF, tamaños responsivos, lazy).
  • Reduce tamaño de funciones: menos dependencias, artefactos ligeros, evita SDKs pesados.
  • Cron breves con Vercel; mueve trabajos pesados a colas/servicios externos.
  • BD y caché: pools y KV/Redis con TTL para reducir invocaciones.
  • Logs/analítica: muestreo y niveles más bajos en producción.
  • Limpia previews antiguos y medios no usados.
  • Monitorea Usage y define alertas internas.

4) Configuración útil (copiar/pegar)

// next.config.js
const nextConfig = {
  reactStrictMode: true,
  swcMinify: true,
  // Artefacto ligero para serverless/edge
  output: 'standalone',
  images: {
    formats: ['image/avif', 'image/webp'],
    minimumCacheTTL: 31536000
  },
  experimental: {
    optimizePackageImports: ['lodash', 'date-fns']
  }
};
module.exports = nextConfig;
{
  "headers": [
    {
      "source": "/(.*)\\.(js|css|jpg|jpeg|png|webp|avif|svg|woff2)",
      "headers": [
        { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
      ]
    }
  ],
  "redirects": [
    { "source": "/www/(.*)", "destination": "/$1", "permanent": true }
  ]
}
// app/blog/[slug]/page.tsx — ISR (App Router)
export const revalidate = 60; // revalida cada 60s
// app/api/revalidate/route.ts — revalidación bajo demanda
import { revalidatePath } from 'next/cache';
export async function POST(req: Request) {
  const { path } = await req.json();
  revalidatePath(path);
  return Response.json({ revalidated: true, now: Date.now() });
}
// middleware.ts — lógica barata en Edge
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export const config = { matcher: ['/es/:path*'] };

export function middleware(req: NextRequest) {
  const url = req.nextUrl.clone();
  if (!url.pathname.endsWith('/')) url.pathname += '/';
  return NextResponse.rewrite(url);
}

5) Checklist de ahorro rápido

  • ¿Páginas críticas como SSG/ISR?
  • ¿Imágenes en AVIF/WebP y tamaños correctos?
  • ¿Funciones serverless con pocos MB y sin dependencias pesadas?
  • ¿Caché CDN y headers immutable para assets?
  • ¿Previews antiguos eliminados?
  • ¿Logs/analítica muestreados?
  • ¿Cron jobs breves y trabajos pesados fuera?
  • ¿Revisión del Usage semanal?

6) Errores comunes que encarecen

  • SSR en cada request sin necesidad.
  • Subir imágenes gigantes sin optimizar.
  • Acumular deployments de preview.
  • Hacer warming constante a funciones.
  • Incluir SDKs nativos pesados dentro de funciones.

7) FAQ

¿SSR es siempre más caro? No siempre, pero cada request ejecuta compute. Si puedes cachear o usar ISR, suele salir más barato.

¿Conviene Edge para todo? Úsalo para lógica corta cerca del usuario. Para tareas intensivas o dependencias nativas, mejor serverless tradicional o un worker externo.

¿Cómo bajo el TTFB sin gastar más? Pre-render, CDN, HTML mínimo primero y carga diferida de JS.

¡Comunícate con nosotros!

Ads Blocker Image Powered by Code Help Pro

Bloqueador de anuncios detectado!!!

 Por favor, apóyanos desactivando este bloqueador de anuncios para seguir creando contenido que te gusta 🙏🏼

Powered By
100% Free SEO Tools - Tool Kits PRO