HTML5 + CSS3 + JS vanilla
CSS con tokens (--sp-*, --text-*, --w-*) y un único stylesheet sin @import. JS modular sin dependencias para banner de cookies, drawer móvil y reveal animations.
Nuestra propia web es el primer caso de éxito que enseñamos. Stack vanilla sin frameworks, build automatizado con Node, animación scroll-driven con un robot mascota, SEO técnico y local optimizado para Cantabria y España, accesibilidad WCAG 2.1 AA y Lighthouse 100/100/100/100. Todo desplegado en GitHub Pages tras CI con minificación, generación de blog estático y reescritura de sitemap.
Si nos dedicamos a construir webs y software a medida, nuestra propia web no podía ser una plantilla genérica con tres íconos y un formulario. Tenía que ser la prueba viva: rápida, accesible, indexable y diferente.
Nos pusimos cuatro objetivos no negociables:
La decisión técnica más importante fue la primera: nada de React, Vue, Next, Astro ni bundlers. HTML semántico, CSS con variables y JavaScript vanilla. Build con Node solo para resolver partials, compilar Markdown del blog y minificar. El resultado: zero JS shipping coste, cero hidratación, cache friendly por naturaleza.
CSS con tokens (--sp-*, --text-*, --w-*) y un único stylesheet sin @import. JS modular sin dependencias para banner de cookies, drawer móvil y reveal animations.
Build script en Node (build-pages.mjs) con sintaxis <!-- @include nombre clave="valor" -->. Anidación recursiva, indentación heredada y placeholders {{clave}}. Cero deuda framework.
Posts en blog/src/posts/*.md con frontmatter YAML. Generación de páginas, paginación, filtrado por etiquetas, RSS y reescritura del sitemap en cada build.
Pipeline npm run minify que comprime styles.css y main.js. Cache-busting por query string (?v=YYYYMMDDx) en cada release.
Workflow automático en cada push a main: build:blog → minify → reescritura de paths → upload artifact → deploy a GitHub Pages. Despliegue continuo sin servidor.
Hosting estático servido global, HTTPS automático, CDN edge y headers de seguridad personalizados vía _headers. Coste de infraestructura: cero.
Nuestro robot mascota no es un sticker decorativo. Es la pieza central del hero: una secuencia de frames pre-renderizados que se anima según el progreso de scroll del usuario. Cada movimiento del cursor por la página avanza un frame del robot, creando un efecto cinematográfico sin recurrir a vídeo (que rompería los Core Web Vitals).
frames-mobile/) para no penalizar el LCP en 4G.<link rel="preload" as="image"> con media queries para servir solo el set adecuado al dispositivo.
La web no se publicó con un plugin de SEO instalado a posteriori: cada página se construyó con su <title>, meta description, canonical, OG y Twitter Cards específicos. Sin contenido duplicado, sin noindex accidentales, sin nofollow heredados. Un sitemap.xml regenerado en cada build con todas las URLs estáticas + posts + páginas + tags.
Schema markup en JSON-LD (WebSite, Organization, BreadcrumbList, Service, FAQPage, CreativeWork), sitemap dinámico, robots.txt, Open Graph, Twitter Cards y canonicals únicos.
Schema ProfessionalService con dirección postal, coordenadas geográficas, horario, área servida, NIF y datos de contacto. Optimizado para "agencia diseño web Santander" y términos locales.
Geo-coordenadas explícitas, areaServed con Cantabria + España, hreflang/inLanguage en es-ES. Diferenciamos términos locales y nacionales sin canibalizar.
Cada post genera HTML estático con OG propio, breadcrumbs, headings con id automáticos, anchor links y tiempo de lectura. RSS y sitemap actualizados al instante.
Google Analytics 4 con consent mode, integración con Search Console, eventos personalizados de scroll y CTAs. Saber qué keywords entran y qué páginas convierten.
Headers de cache largos para assets versionados (?v=YYYYMMDDx), lastmod real en cada URL del sitemap, contenido siempre fresco para crawlers sin invalidaciones manuales.
La web sirve menos de 50 KB de JavaScript total en home y bajo 30 KB en el resto de páginas. Sin frameworks, sin runtime de hidratación, sin código muerto importado por accidente. El render crítico se completa antes de que la mayoría de webs hayan terminado de descargar su bundler.
loading="lazy" salvo above-the-fold (fetchpriority="high").media="print" onload="this.media='all'" para no bloquear el render.@import chain: un único stylesheet minificado, crítico inline cuando aplica.media="(min-width: 640px)").La accesibilidad no es un parche que se aplica al final. Cada componente nace pensado para teclado, lectores de pantalla y usuarios con visión reducida. La auditoría WCAG es parte del producto, no un certificado adicional.
h1 → h2 → h3).aria-current, aria-label, aria-labelledby, aria-hidden donde aplica.prefers-reduced-motion.
Una web estática también puede filtrar datos si no se configura bien. El archivo _headers aplica una capa de protección a nivel edge sin penalizar la velocidad.
CSP estricta limitando orígenes de scripts, estilos y conexiones. Bloqueo de unsafe-inline donde es posible y nonce para scripts críticos.
Strict-Transport-Security con preload, X-Content-Type-Options, Referrer-Policy, Permissions-Policy y X-Frame-Options.
Banner propio sin tracking previo al consentimiento. GA4 en consent mode v2, cookies categorizadas y política linkada en cada paso.
El blog se gestiona escribiendo archivos .md en una carpeta. No hay panel, no hay base de datos, no hay editor WYSIWYG con vulnerabilidades latentes. Solo Markdown con frontmatter YAML y un script que lo convierte en HTML estático perfectamente indexable.
<figure> + lazy + decoding async automáticos.---
title: 'Cómo elegir agencia web en Cantabria'
description: 'Criterios reales más allá del precio'
date: 2026-04-09
author: 'Pindia Software'
tags:
- SEO & Crecimiento
- Negocio & Estrategia Digital
cover: /assets/img/blog/agencia-web/cover.webp
coverAlt: 'Equipo trabajando en una web'
---
## Lo que de verdad importa
Cuando una empresa busca agencia...
Cuatro fases iterativas con commits en español, demos reales y cero deuda técnica oculta.
Definición de buyer personas, mapa de keywords (locales + nacionales), arquitectura de la información y objetivos medibles de conversión.
Wireframes en baja fidelidad, sistema de tokens (color, tipografía, spacing), componentes reutilizables y prototipo del scroll-driven hero.
Build de partials Node, integración del canvas con secuencia de frames, blog Markdown, schemas JSON-LD, sitemap dinámico y minificación.
CI con GitHub Actions, deploy a Pages, validación Lighthouse, indexación en Search Console y monitorización continua de Core Web Vitals.
La web cumple lo que vende. Auditorías Lighthouse y PageSpeed Insights al 100, indexación rápida en Google, presencia en búsquedas locales de Santander, Bezana y Cantabria, y tiempos de carga que dejan en evidencia a la mayoría de competidores que dependen de un CMS pesado.
¿Quieres una web así para tu empresa?
Presupuesto personalizado en menos de 48 horas. Sin compromiso, sin letra pequeña, sin atajos.