Tu sitio carga bien. El código fuente está vacío.
Este sitio publicaba toda su portada como un blob en base64 que solo JavaScript podía leer. Las personas veían una página normal; los crawlers y las vistas previas de enlaces no veían nada. Así se detecta y así se arregla.
Durante un tiempo, la página donde estás leyendo esto tenía un defecto real, y era nuestro. La portada, los términos y la política de privacidad se publicaban como bundles de Design Components. Lo que realmente llegaba al navegador era un shell de carga más un payload grande en base64 dentro de un script. JavaScript decodificaba ese payload y escribía la página en el DOM.
En el navegador se veía perfecto. Titulares, secciones, meta tags, todo presente después de unos cientos de milisegundos. Pero el HTML que servíamos no contenía ningún titular, ningún texto de cuerpo y ningún og: legible. Cada palabra del sitio vivía dentro de un string que solo un motor de JavaScript podía abrir.
Cómo revisar tu propio sitio en dos minutos
La trampa es que Inspeccionar elemento te miente para este propósito. Inspeccionar muestra el DOM después de que corrió el JavaScript, que es justamente lo que estás tratando de descartar. Necesitas ver los bytes que envió el servidor, antes de que se ejecute cualquier script. Cuatro pruebas, ninguna requiere un desarrollador:
- Usa Ver código fuente, no Inspeccionar. En Chrome y Firefox, view-source: seguido de tu URL. Luego busca el texto de tu propio titular. Si no aparece, no existe para ningún cliente HTTP simple.
- Desactiva JavaScript en la configuración del navegador y recarga. Un sitio de contenido debe seguir siendo legible. Una aplicación tipo dashboard no tiene que serlo, pero tus páginas de mercadeo sí.
- Pega tu URL en un chat de WhatsApp contigo mismo, y en un mensaje de Slack o LinkedIn. Si la vista previa sale en blanco o solo muestra el dominio, tus og: no están en el HTML servido.
- Corre curl contra la URL desde una terminal y cuenta las palabras. Una portada que devuelve dos kilobytes de shell es una portada sin contenido adentro.
Por qué falla en silencio y no a gritos
No aparece ningún error en ninguna parte. Tu equipo ve el sitio, tu cliente ve el sitio, el monitoreo devuelve 200. Los buscadores sí renderizan JavaScript en muchos casos, así que el tráfico puede no caerse de una forma que obligue a alguien a investigar. El daño es desigual y difícil de atribuir, que es el peor tipo.
Lo que falla de inmediato son las vistas previas de enlaces. Los scrapers detrás de las apps de mensajería y las redes sociales bajan tu HTML una vez y leen los meta tags de ahí. La mayoría no ejecuta tu JavaScript ni se queda esperando. Si tu título y tu descripción están dentro de un payload en base64, cada enlace que alguien comparta de tu trabajo llega como un rectángulo gris vacío. Para un estudio que se consigue por referencias y enlaces compartidos, eso no es un detalle estético.
La regla que aplicamos hoy a nuestras propias páginas: si el texto no se ve en el código fuente, asume que no existe.
Cómo se ve lo correcto
- Shell de carga + payload base64
- Texto escrito por JavaScript
- og: dentro de un string
- Fuente de verdad en el artefacto
- HTML estático servido completo
- Titulares en el código fuente
- og: en el HTML servido
- Plantillas editables en src
Las tres páginas empaquetadas ahora son HTML estático completo. Cada titular, párrafo y meta tag está en el código fuente. JavaScript sigue corriendo, pero solo para mejorar la experiencia: animación, interacciones pequeñas, nada de lo que dependa el contenido. La fuente editable vive en src como archivos de plantilla, y tools/prerender.py genera el HTML final. Editar es un solo comando, y lo que se despliega no tiene build step ni dependencias.
Mantuvimos la herramienta antigua, tools/dc-bundle.py, fuera del build pero dentro del repositorio. Todavía puede extraer una plantilla de un bundle viejo sacado del historial de git, que fue precisamente la forma en que se recuperó la carpeta src. Vale decirlo sin adornos: nuestra fuente de verdad estaba codificada dentro de un artefacto de build, y recuperarla exigió escribir un decodificador. Si tu contenido solo existe dentro de un blob compilado, no tienes contenido, tienes un rehén.
Si vas a contratar a alguien para hacerte un sitio, esta es una pregunta que puedes hacer sin saber programar. Pregunta si el texto de la página está en el HTML que envía el servidor, o si lo arma JavaScript en el navegador. Las dos opciones son válidas para sistemas interactivos donde el usuario ya inició sesión. Para cualquier cosa que quieras que se encuentre, se cite o se comparta, solo una funciona.