Checklist de lanzamiento web
Objetivo: nunca publicar un sitio, una tienda Shopify, una app o un SaaS con una vulnerabilidad, una carencia legal o un recorrido de compra roto. El lanzamiento sigue siendo una decisión del usuario: verificas y preparas, no publicas nada.
Regla de decisión (bloqueante)
NO PUBLICAR si persiste alguno de estos puntos:
- una clave o secreto privado está expuesto (código frontend, repositorio Git, build);
- un usuario puede leer o modificar los datos de otro;
- falta HTTPS o está roto;
- falta RLS (o equivalente) o está mal configurada para datos privados;
- los rastreadores sujetos a consentimiento se activan antes del acuerdo;
- hay costes ocultos o engañosos;
- el recorrido de compra o pago es defectuoso.
Método
- Identifica el tipo de proyecto (sitio escaparate, tienda, app con cuentas, SaaS con pago) e ignora los controles que no apliquen, indicándolo.
- Revisa los 5 bloques siguientes en orden. Para cada control: estado OK / A CORREGIR / NO APLICA / NO VERIFICABLE, con la prueba o test realizado.
- Cuando tengas acceso al código o base de datos (Supabase, Vercel, Shopify), verifica tú mismo; en caso contrario, proporciona al usuario la prueba exacta que debe hacer.
- Termina con el informe (formato al final).
Bloque 1 — Seguridad técnica
- HTTPS en todo el dominio, HTTP redirigido, sin contenido mixto; HSTS solo tras validación. Prueba: http:// redirige.
- Cabeceras de seguridad: CSP adecuada, nosniff, Referrer-Policy, protección de iframes. Prueba: SecurityHeaders.com.
- Secretos solo del lado servidor (claves privadas, tokens de pago, claves API secretas). Prueba: build JS y repositorio Git sin secretos.
- Validación del lado servidor (tipo, tamaño, campos); la validación frontend sola se puede eludir. Prueba: una solicitud modificada es rechazada.
- Permisos en cada recurso: identidad Y derecho de acceso a cada objeto. Prueba: la cuenta B no lee ni modifica nada de A.
- Inyección SQL / XSS: consultas parametrizadas, escape del framework, nunca HTML de usuario en bruto. Prueba: el texto HTML se muestra sin ejecutarse.
- CSRF y cookies: Secure, HttpOnly, SameSite, protección anti-CSRF si autenticación por cookies.
- Dependencias actualizadas, sin alertas críticas, paquetes innecesarios eliminados.
- CORS limitado a los orígenes necesarios (no es una barrera de acceso).
- Subida controlada: tamaño, formato real, extensiones, renombrado, almacenamiento aislado.
- Anti-abusos: rate limiting en inicio de sesión, correos electrónicos y formularios; Turnstile o CAPTCHA si es necesario.
- Cuentas admin: MFA, accesos limitados, ningún panel interno visible.
- Modo producción: sin debug, sin .env publicado, sin logs verbosos.
- Correos electrónicos enviados con el dominio: SPF, DKIM, DMARC.
Bloque 2 — Datos (Supabase o equivalente)
- Clave publishable/anon solo en el navegador si RLS es correcta; clave service_role solo del lado servidor.
- RLS activada en todas las tablas expuestas, permisos innecesarios retirados para anon/authenticated.
- Políticas por acción (SELECT, INSERT, UPDATE, DELETE) vinculadas a auth.uid(); pruebas positivas Y negativas con tres perfiles: visitante, usuario A, usuario B.
- Buckets Storage con reglas adecuadas (un avatar público no tiene los mismos permisos que una factura).
- Auth: URLs de redirección autorizadas, expiración de sesiones, restablecimiento y cierre de sesión probados.
- Security Advisor: ninguna alerta crítica sin tratar.
- Copias de seguridad: opciones reales verificadas, restauración probada.
- Logs y alertas (errores 5xx, cuotas) sin registrar nunca contraseñas o tokens.
- Entornos separados (local, preproducción, producción) y rollback preparado.
Bloque 3 — Derecho y confianza (Francia / UE, a verificar según la actividad)
- Aviso legal (identidad, datos de contacto), política de privacidad (datos, finalidades, base legal, conservación, derechos, contacto).
- Términos y condiciones (CGU); condiciones generales de venta (CGV) si hay venta; reembolsos y derecho de desistimiento (funcionalidad de desistimiento en línea desde el 19/06/2026 para los contratos afectados); mediador de consumo.
- Cookies: política, banner donde rechazar sea tan fácil como aceptar, ningún rastreador antes del consentimiento, elección modificable en cada página.
- Formularios: información en la recogida, casillas desmarcadas, minimización de datos, plazos de borrado.
- Inventario de herramientas de terceros (analytics, píxeles, chat, CAPTCHA, IA) y de transferencias fuera de la UE.
- Ningún dark pattern, ninguna urgencia falsa, ningún coste oculto (IVA incluido, envío, suscripción mostrados antes del pago).
- Ninguna reseña falsa, ninguna promesa o cifra no demostrable.
- Licencias de imágenes, iconos, vídeos, fuentes.
- Menores: en Francia, consentimiento conjunto para menores de 15 años si el tratamiento se basa en el consentimiento.
- Enlace de baja funcional en correos promocionales; procedimiento de eliminación de cuenta.
- Procedimiento de fuga de datos (notificación a la CNIL en 72 horas si hay riesgo).
Bloque 4 — UX, SEO y conversión
- Un CTA principal claro, utilizable con el pulgar en móvil.
- Title único y meta descripción útil por página; og:image probada; favicon.
- sitemap.xml, robots.txt, canónico, noindex en páginas privadas; Search Console.
- Página 404 personalizada que devuelve el estado 404 correcto; enlaces rotos verificados.
- FAQ sobre objeciones reales; plazos prometidos cumplibles; página de agradecimiento tras la acción.
- Accesibilidad: contraste, navegación por teclado, foco visible, textos alternativos, zoom al 200%.
- Rendimiento: LCP ≤ 2,5 s, INP ≤ 200 ms, CLS ≤ 0,1 (PageSpeed móvil y escritorio); imágenes comprimidas.
Bloque 5 — Pruebas reales antes de la publicación
- Formularios: vacío, inválido, demasiado largo, error de servidor, doble clic, éxito, recepción, móvil.
- Compra en modo test y luego reembolso; IVA incluido, total, factura correctos.
- Correos electrónicos realmente recibidos (registro, restablecimiento, factura, soporte).
- Webhooks: firma verificada, repetición sin duplicado.
- Navegación privada: ningún rastreador depositado antes del consentimiento.
- Dominio y DNS protegidos con MFA; posible volver a la versión estable.
Formato del informe
- Veredicto en una línea: PRESTO PARA PUBLICAR / A CORREGIR ANTES DE PUBLICAR / BLOQUEADO (punto bloqueante citado).
- Puntos bloqueantes, luego puntos a corregir clasificados por gravedad, cada uno con la corrección exacta y dónde hacerla.
- Puntos no verificables y la prueba que el usuario debe realizar.
- Recordatorio: el usuario publica por sí mismo. Para lo legal, este control no reemplaza a un profesional.