HTML CSS JavaScript

Guía de Sitios Web
para la Agencia

Cómo funcionan, cómo se editan y cómo reutilizarlos
para nuevos clientes con rapidez y calidad

Usa ← → o las teclas del teclado para navegar

¿Qué vamos a ver?

⚙️

01 — Cómo funcionan los sitios

HTML, CSS y JS. Qué hace cada archivo y cómo se conectan.

📁

02 — Estructura de archivos

Carpetas, nombres y por qué el orden importa.

✏️

03 — Cómo editar el sitio

Textos, imágenes, colores, fuentes y secciones completas.

🚀

04 — Reutilizar para clientes

Sistema de plantillas, checklist y flujo de entrega.

WordPress/Elementor vs HTML puro

🟦

WordPress + Elementor

✅ Panel visual, sin tocar código
✅ Blog, tienda, usuarios, plugins
✅ Cliente puede editar solo
⚠️ Hosting de pago (~$5–15/mes)
⚠️ Más lento, más pesado
⚠️ Actualizaciones y seguridad constante

HTML + CSS + JS puro

✅ Hosting gratis (Cloudflare Pages)
✅ Ultrarrápido — sin base de datos
✅ Sin actualizaciones ni plugins
✅ Control total del diseño
⚠️ El cliente NO puede editar solo
⚠️ Sin blog ni tienda (sin backend)

🎯 Regla práctica: Sitio de presentación / landing / portafolio → HTML puro  |  Blog, tienda o panel de cliente → WordPress

VS Code + Live Server

VS Code es tu "Elementor" pero para código. Live Server hace que el navegador se actualice solo cada vez que guardas el archivo — igual que la vista previa en Elementor.

01
Descarga VS Code en code.visualstudio.com Es gratis. Instálalo como cualquier programa.
02
Instala la extensión Live Server Clic en el ícono de extensiones (cuadraditos) → busca "Live Server" → Instalar
03
Abre la carpeta del proyecto con Archivo → Abrir carpeta Siempre abre la carpeta completa, no solo el archivo
04
Clic derecho sobre index.html → Open with Live Server Se abre el navegador en localhost:5500. Cada vez que guardes (Ctrl+S) la página se recarga sola.

❌ No abras el archivo directo

Si abres el HTML haciendo doble clic, la URL dice file:// y algunas cosas no funcionan. Siempre usa Live Server.

✅ URL correcta en Live Server

Cuando Live Server está activo verás: localhost:5500 en la barra del navegador.

⌨️ Atajos clave en VS Code

Ctrl+S — Guardar (y recarga Live Server)
Ctrl+F — Buscar texto en el archivo
Ctrl+Z — Deshacer
Alt+Z — Activar/desactivar ajuste de línea

Inspeccionar con F12 — tu nueva superpotencia

En Elementor hacías clic en el elemento y lo editabas visualmente. En HTML, el Inspector de Chrome (F12) es el equivalente — te muestra exactamente qué código controla cada cosa.

01
Presiona F12 en Chrome (o clic derecho → Inspeccionar) Se abre el panel de DevTools a la derecha o abajo
02
Haz clic en el ícono de cursor con cuadro (arriba izquierda del panel) Modo selector — igual que hacer clic en un elemento en Elementor
03
Haz clic en cualquier elemento del sitio El panel muestra el HTML del elemento y el CSS que lo estiliza
04
Edita el CSS directamente en el panel para probar cambios Los cambios son temporales — desaparecen al recargar. Cuando encuentres el valor correcto, cópialo al archivo CSS.

📱 Ver cómo se ve en móvil

En el panel DevTools, clic en el ícono de teléfono/tablet (arriba izquierda). Puedes simular cualquier tamaño de pantalla sin necesitar el celular.

🎨 Cambiar colores visualmente

En el panel CSS del inspector, haz clic en el cuadrado de color junto a un valor hexadecimal. Se abre un selector de color igual al de Elementor.

🔍 Encontrar la clase CSS

Cuando algo no se ve bien y no sabes qué archivo editarlo, el inspector te dice exactamente el nombre de la clase y el archivo CSS donde está definida.

Un sitio web es como una casa

🧱

HTML

La estructura
Paredes, pisos, puertas.
El esqueleto del sitio.

index.html
🎨

CSS

La apariencia
Pintura, muebles, luces.
Todo lo visual.

styles.css

JavaScript

La interacción
Puertas que abren, alarmas.
Animaciones y lógica.

main.js

💡 Regla de oro: Nunca mezcles CSS dentro del HTML ni JavaScript en el CSS. Cada archivo tiene su propósito.

¿Qué pasa cuando alguien abre el sitio?

01
El navegador descarga el archivo index.html Es la puerta de entrada. Siempre se llama index.html.
02
El HTML llama al archivo styles.css Mediante <link rel="stylesheet"> en el <head>. Define colores, tipografía y layout.
03
Carga las imágenes y fuentes Los archivos de la carpeta /img y las fuentes de Google Fonts o locales.
04
Ejecuta el archivo main.js Añade animaciones, el menú hamburguesa, formularios y cualquier interacción.

Así están organizados los sitios

📁 mi-cliente/
├─📄 index.html
├─📁 css/
│ └─🎨 styles.css
├─📁 js/
│ └─⚡ main.js
├─📁 img/
│ ├─🖼 logo.png
│ ├─🖼 hero.jpg
│ └─🖼 servicios.jpg
└─📄 gracias.html

📄 index.html

La página principal. Toda la estructura y el contenido visible.

🎨 css/styles.css

Colores, tamaños, fuentes, espaciado. Todo lo visual.

⚡ js/main.js

Menú móvil, animaciones al hacer scroll, formularios.

📁 img/

Todas las imágenes. Usa nombres sin espacios ni acentos.

Cambiar textos en el HTML

Abre index.html con VS Code y busca el texto que quieres cambiar. Solo edita lo que está entre las etiquetas.

<!-- ✅ Editar esto: --> <h1>Tu Negocio Aquí</h1> <p>Descripción del servicio</p> <!-- ⚠️ No tocar las etiquetas: --> <h1 class="hero-title"> Texto aquí </h1>

🔍 Tip: Usar Ctrl+F

Busca directamente el texto que ves en el navegador. VS Code lo encontrará en el HTML al instante.

⚠️ No cambies

Las palabras dentro de class="" o id="". Son identificadores internos.

✅ Sí puedes cambiar

Títulos, párrafos, listas, botones, links de menú, textos del footer.

Cambiar imágenes

01
Prepara la imagen nueva con el mismo nombre y formato que la original Ejemplo: si el sitio usa hero.jpg, guarda tu nueva imagen también como hero.jpg
02
Colócala en la carpeta /img y reemplaza el archivo anterior Si el nombre es igual, el sitio la cargará automáticamente sin editar el HTML
03
Si el nombre es diferente, edita el atributo src="" en el HTML <img src="img/nueva-foto.jpg" alt="Descripción">
🖼

Hero / Banner

1920×1080 px
JPG, máx 300KB

🏢

Logo

Fondo transparente
PNG o SVG

📸

Galería / Servicios

800×600 px
JPG, máx 150KB

Cambiar colores y tipografía

Todos los colores del sitio están centralizados al inicio del archivo CSS en :root {}. Cambiarlos ahí los actualiza en todo el sitio.

/* css/styles.css */ :root { /* 🎨 Cambia solo estos valores */ --color-primary: #6C63FF; --color-secondary: #00D9A3; --color-text: #1A1A2E; --color-bg: #FFFFFF; --color-accent: #FF6B6B; /* 🔤 Fuente principal */ --font-heading: 'Montserrat'; --font-body: 'Inter'; }

¿Cómo elegir el color del cliente?

  • Pídele el código HEX de su logo o branding
  • Usa coolors.co para generar paleta complementaria
  • Reemplaza los valores en :root y refresca el navegador

¿Cómo cambiar la fuente?

  • Ve a fonts.google.com y elige la fuente
  • Copia el <link> y pégalo en el <head> del HTML
  • Actualiza --font-heading en el CSS

Agregar o quitar secciones

Cada sección del sitio está en un bloque <section>. Puedes copiar, pegar o eliminar secciones completas.

<!-- ESTRUCTURA DEL SITIO --> <header>...</header> <section id="hero"> <!-- Banner principal --> </section> <section id="servicios"> <!-- Tarjetas de servicios --> </section> <section id="contacto"> <!-- Formulario --> </section> <footer>...</footer>

➕ Agregar sección

Copia un bloque <section>...</section> de otra parte del sitio y pégalo donde quieras. Luego edita el contenido.

➖ Quitar sección

Selecciona todo el bloque desde <section> hasta su </section> y bórralo.

💡 Tip en VS Code

Haz clic en el número de línea de la etiqueta de apertura. VS Code resalta automáticamente el bloque completo.

Del template al sitio del cliente

01
Duplica la carpeta del template Copia toda la carpeta base y renómbrala con el nombre del cliente: "restaurante-don-pedro"
02
Actualiza colores, tipografía, textos e imágenes Edita :root en CSS para colores y fuentes. Reemplaza fotos en /img y textos en index.html
03
Crea un repositorio en GitHub con el nombre del cliente github.com → New repository → sube todos los archivos del sitio
04
Conecta el repo a Cloudflare Pages Cloudflare Pages → Create project → Connect to Git → selecciona el repositorio del cliente
05
Conecta el dominio del cliente en Cloudflare Custom domains → agrega el dominio → Cloudflare configura los DNS automáticamente

GitHub + Cloudflare Pages

🐙

GitHub — Control de versiones

01
Cada cliente tiene su repositorio propio Historial de cambios, posibilidad de revertir errores
02
Para actualizar el sitio: edita el archivo → sube a GitHub Arrastra los archivos al repo o usa GitHub Desktop
03
El cambio se publica solo en segundos Cloudflare Pages detecta el push y redespliega automáticamente
☁️

Cloudflare Pages — Hosting

✅ Gratis y sin límites de sitios

Plan gratuito soporta sitios estáticos ilimitados y ancho de banda sin restricciones.

⚡ CDN global automático

Los archivos se sirven desde el servidor más cercano al visitante. Sitios ultra-rápidos.

🔒 HTTPS automático

Certificado SSL gratis incluido. No se necesita configurar nada extra.

Flujo de actualización:  Editas el archivo → lo subes a GitHub → Cloudflare Pages lo publica en ~30 segundos

Checklist antes de entregar

Logo del cliente subido en /img
Colores actualizados en :root { }
Tipografía del branding aplicada
Textos reemplazados (sin Lorem Ipsum)
Imágenes del cliente en todas las secciones
Número de teléfono actualizado
Email del formulario de contacto configurado
Links de redes sociales del cliente
<title> con el nombre del negocio
Meta descripción para SEO actualizada
Sitio probado en móvil y escritorio
Favicon del negocio configurado

Lo que necesitas para trabajar

💻

VS Code

Editor de código. Instala la extensión Live Server para ver cambios en tiempo real.

🌐

Google Chrome

Usa F12 para inspeccionar elementos, ver el CSS y probar cambios al instante.

🗂

Explorador de archivos

Para duplicar carpetas de plantillas y organizar proyectos de cada cliente.

🎨

Coolors.co

Genera paletas de colores. Ingresa el color del logo y obtén combinaciones perfectas.

🖼

Squoosh.app

Comprime imágenes sin perder calidad antes de subirlas al sitio.

🐙

GitHub

Repositorio por cliente. Historial de cambios y origen del despliegue automático.

☁️

Cloudflare Pages

Hosting gratis conectado a GitHub. Cada push publica el sitio en ~30 segundos con HTTPS y CDN global.

Dudas Frecuentes

12 preguntas reales que surgieron al compartir
esta guía con el equipo

📝 Blog y funcionalidades
🌐 Dominio, correos y SEO
💼 Acceso, costos y migración

¿Y si el cliente pide un blog después?

El sitio HTML no bloquea agregar un blog después. Hay 3 caminos según qué tan profundo lo quiera el cliente:

01
Subdominio independiente blog.cliente.com con Ghost (gratis) o WordPress — el sitio principal no se toca. Se instala aparte.
02
Embed de Substack o Beehiiv Si el cliente ya tiene newsletter, se incrusta una sección de artículos recientes con un iframe. Gratis y sin mantenimiento.
03
Migración completa a WordPress Si quieren blog + tienda + panel propio. Se cobra como proyecto nuevo — no es una actualización.

💡 Recomendación práctica

Aclara desde el inicio qué incluye el sitio. Usa una propuesta que diga explícitamente: "Sitio de presentación estático — sin blog, sin tienda, sin panel de cliente."

Si después lo piden, es un proyecto nuevo con su propio costo.

🚀 Opción más común en la práctica

La mayoría de negocios locales (restaurantes, clínicas, estudios) no necesitan blog. Con la opción 01 (subdominio) se resuelve sin tocar el sitio principal.

El cliente me pasa 50 fotos. ¿Cómo no volverte loco?

La clave: nombres genéricos en la plantilla

La plantilla ya usa nombres fijos predefinidos. El cliente no renombra archivos — tú le dices exactamente cómo se deben llamar.

<!-- La plantilla ya dice: --> <img src="img/hero.jpg"> <img src="img/servicio-1.jpg"> <img src="img/servicio-2.jpg"> <img src="img/galeria-1.jpg"> <!-- Tú solo reemplazas los archivos en /img con esos mismos nombres -->

Si el cliente manda fotos con nombres aleatorios ("IMG_4872.jpg"), tienes 3 opciones:

A
Bulk Rename Utility (Windows gratis) Seleccionas todas las fotos, las renombras en lote en 10 segundos con un patrón: galeria-1, galeria-2, galeria-3…
B
Ctrl+H en VS Code (buscar y reemplazar) Si decides mantener los nombres originales, cambias todos los src="" del código en segundos con buscar/reemplazar global.
C
Lista de entrega al cliente Envíale un documento que diga: "Envíame una foto para hero.jpg, una para logo.png, 3 fotos para servicio-1/2/3.jpg". Ellos organizan.

¿Qué pasa con los plugins que usamos?

💬

WhatsApp flotante

3 líneas de HTML + CSS. Gratis, no depende de ningún plugin. Se agrega directo al código.

📅

Citas y reservas

Calendly o Cal.com (gratis). Se pega el embed como iframe en cualquier sección del HTML.

📸

Feed de Instagram

SnapWidget (gratis limitado) o Elfsight (~$5/mes). Pegan un script en el HTML y listo.

🤖

Chat flotante / IA

Tidio o Crisp — se pega 1 script antes del </body>. Plan gratuito disponible en ambos.

🌍

Multilenguaje

Dos archivos: index.html y index-en.html. O Google Translate widget: 1 línea de script, gratis.

🗓

Reservas avanzadas

SimplyBook.me o Setmore tienen plan gratis con embed. Se incrusta en una sección del sitio.

🔑 Regla universal: Si la herramienta ofrece un "embed code" o "widget script" — se puede pegar en el HTML y funciona.

Secciones personalizadas y variables globales

¿Sección fuera de la estructura del template?

01
Copia cualquier <section>...</section> como base y edita su contenido interior
02
Formularios sin backend: usa Formspree.io — HTML normal, los envíos llegan al email. Gratis hasta 50 envíos/mes.
03
El CSS de la sección nueva puede ir al final del archivo styles.css

¿Se pueden cambiar los botones globalmente desde :root?

✅ Sí — todo puede ir en :root

:root { /* Colores (ya existían) */ --color-primary: #6C63FF; /* Botones globales — nuevo */ --btn-radius: 30px; --btn-padding: 14px 32px; --btn-shadow: 0 4px 20px rgba(108,99,255,0.4); --btn-font-size: 16px; } /* En el CSS del botón: */ .btn { border-radius: var(--btn-radius); padding: var(--btn-padding); box-shadow: var(--btn-shadow); }

Cambias --btn-radius una vez → todos los botones del sitio se actualizan.

Correos corporativos y dominio sin Cloudflare

📧

Correos corporativos

✅ Son 100% independientes del hosting
✅ Se configuran con registros MX del dominio
✅ Google Workspace, Zoho Mail o Titan
✅ Cloudflare Pages no los afecta ni bloquea

Si el cliente ya tiene correos con su proveedor actual, no hay que cambiar nada — solo los registros MX se dejan apuntando al mismo lugar.

🌐

Dominio sin acceso directo a Cloudflare

A
Opción ideal: cliente delega los nameservers a Cloudflare — Cloudflare maneja todo automáticamente
B
Sin acceso: cliente agrega un registro A o CNAME apuntando a Cloudflare Pages desde su panel de dominio
C
Sin Cloudflare Pages: se usa GitHub Pages, Netlify o cualquier hosting estático — la lógica es idéntica

SEO, metadescripciones y Google

¿Se pueden personalizar las metadescripciones?

✅ Sí — y es más fácil que en Yoast SEO

<!-- En el <head> de index.html --> <title>Nombre del Negocio | Ciudad</title> <meta name="description" content="Tu descripción personalizada de hasta 160 caracteres aquí"> <!-- Para redes sociales (OG tags) --> <meta property="og:title" content="Título para Facebook/LinkedIn"> <meta property="og:description" content="Descripción al compartir link"> <meta property="og:image" content="img/og-preview.jpg">

Google Workspace, Reseñas y Schema

⭐ Reseñas de Google

Widget embed de Elfsight o enlace directo al perfil de Google Business. Independiente del hosting.

🏷 Schema para testimonios

Se agrega un bloque JSON-LD dentro del <head>. Google lo genera automáticamente en schema.org/Review.

🗂 Google Business Profile

Se vincula igual que siempre — apuntas la URL del sitio en el perfil. Es independiente del tipo de hosting.

¿Cómo se vinculan los agentes IA y otras integraciones?

Cualquier herramienta externa se integra pegando su "embed code" en uno de estos 2 lugares del HTML:

📋 En el <head>

Para scripts de seguimiento y analítica:

📊 Google Analytics 4
📣 Meta Pixel (Facebook Ads)
🔥 Hotjar (mapas de calor)
🏷 Google Tag Manager

🤖 Antes del </body>

Para chats, agentes y widgets flotantes:

🤖 Agente IA (Tidio, Intercom, Crisp)
💬 Custom GPT widget
📅 Calendly (popup flotante)
📸 Feed Instagram (SnapWidget)

La plataforma siempre dice dónde pegarlo. Si dice "coloca esto en el <head>" — va en el <head>. Sin más configuración.

Acceso, migración y costos para siempre

🔑

Acceso y modificaciones

Opción A: Dar acceso de colaborador en GitHub — ven el código pero los archivos viven en el repositorio de la agencia.

Recomendado: Aclarar en el contrato que las modificaciones las hace la agencia y cobrarlas como mantenimiento mensual.

Nunca dar acceso directo al panel de Cloudflare.

📦

Migrar a otro hosting

El sitio es HTML puro — 100% portable.

Migrar = copiar la carpeta a cualquier hosting (cPanel, Vercel, Netlify, otro servidor).

No hay base de datos. No hay exportación. No hay plugins que reinstalar. Es solo copiar archivos.

El cliente puede llevarse su sitio en cualquier momento.

♾️

¿Hay renovación de hosting?

✅ Cloudflare Pages: gratis para siempre
✅ Sin límite de sitios ni ancho de banda
💳 Solo se paga el dominio: ~$12–15 USD/año
🏆 Si el cliente tiene dominio propio: costo de hosting para la agencia = $0

3 reglas para trabajar rápido y bien

📂

Nunca edites
el template original

Siempre duplica la carpeta antes de empezar. El original es tu punto de partida limpio.

🎨

Todos los colores
en :root

Centraliza variables de colores y fuentes. Un cambio actualiza todo el sitio sin buscar uno por uno.

📋

Usa el checklist
antes de entregar

12 puntos que garantizan que no se te escapó el logo anterior, el Lorem Ipsum ni el email malo.

Con este sistema, un sitio nuevo toma 2-4 horas en lugar de días.

navegar  ·  Space siguiente