AstrolUI AstrolUI
Amarillo Naranja Rojo Verde Azul Morado Color propio
Modo claro
Jazui

Prerender y SEO para SPA: que te vean en buscadores, en la IA y en redes.

Que te vean en buscadores, en la IA y en redes.

Jazui es un servicio de prerender y SEO para SPA (Angular, React, Vue, Blazor, Svelte...). Sirve a Google, a los bots de IA (ChatGPT, Claude, Perplexity...) y a las redes sociales el HTML ya renderizado de su web, sin tocar su código. Además le dice quién le visita y qué falla, y difunde su contenido con un blog, IA con su propia clave y métricas. Las personas nunca pasan por Jazui: siguen usando su aplicación de siempre. Jazui está hecho con AstrolUI.

1. El problema de las SPA

En una SPA el HTML inicial está casi vacío y el contenido lo genera JavaScript en el navegador (en Blazor WebAssembly, además, primero se descarga el runtime de .NET). Muchos bots no ejecutan JavaScript o lo hacen tarde y con límites: el resultado es una indexación incompleta, títulos y descripciones genéricos, vistas previas vacías al compartir un enlace y respuestas de IA que no citan su web.

El prerender entrega a cada bot una versión HTML ya renderizada de la página, con su contenido, sus etiquetas meta y Open Graph y el código de estado real (200, 404, redirección...), sin cambiar nada de la aplicación.

2. Cómo funciona

  1. 1 Un bot pide una página Google, un bot de IA o una red social piden una URL de su web.
  2. 2 Su integración lo reconoce En el CDN, el servidor o un middleware se reconoce el bot por su user agent y, en vez de servir la SPA, se pide la página a la API de Jazui con su token.
  3. 3 Jazui la renderiza o la saca de caché Comprueba el token, el plan, las reglas y que el sitio esté verificado. Si la página está en caché la devuelve al instante; si no, la abre con Chrome, la guarda y la devuelve.
  4. 4 El bot recibe el HTML completo Con el código real (200, 404, redirección...). Si Jazui tarda o falla, la integración sirve la web normal.

Para empezar: cree la cuenta, añada el sitio, verifique el dominio (DNS o etiqueta meta) y conecte la integración.

3. Qué incluye

Render y caché

Render con Chrome Abre su página como una persona, espera a que termine su JavaScript y guarda el HTML: escritorio o móvil, selector de «página lista» y cabeceras extra.
Caché y recaché Respuesta instantánea desde caché, recaché automático por días (cuenta, sitio o regla), recaché manual, API para recachear o purgar al desplegar y comparación de la caché con la web en vivo.
Reglas Condiciones sobre la URL o el bot con acciones: excluir, días de caché, ajustes de render, ignorar parámetros, quitar elementos (cookies, chats), inyectar meta, Open Graph o JSON-LD, forzar el código (301, 404, 410) o bloquear bots. Con plantillas y probador.

SEO e IA

Nota SEO por página De 0 a 100, con «Corrige primero», vista previa en Google y al compartir, e histórico.
Bots de IA Política por bot (permitir, bloquear, solo búsqueda o sin entrenamiento) que genera robots.txt y llms.txt, y medición de las visitas que llegan desde la IA.
Cómo le ve la IA Escáner que compara lo que ve un bot sin JavaScript con lo que ve una persona.
Sugerencias con IA Propuestas de arreglos para cada página que se aplican como una regla.
Enlaces rotos y redirecciones Revisión de los enlaces que fallan y de las cadenas de redirección.

Contenido

Blog alojado Artículos, categorías, etiquetas, traducciones, versiones y programación; SEO de cada artículo, Markdown para IA, RSS, sitemap y llms.txt. Su web lo lee por la API.
Escribir con IA Temas propuestos, borradores y piloto automático.
Difusión Publicación en redes (Bluesky, Mastodon, Telegram, Discord...) e IndexNow.
Archivos del sitio Sitemaps, robots.txt y llms.txt alojados en Jazui.

Métricas y cuenta

Tráfico de bots Bots verificados frente a falsos, páginas más pedidas, visitas desde IA y consumo del plan.
Google Search Console Clics, impresiones e indexación dentro del panel.
Avisos y alertas Errores de render, caída de Googlebot o bajada de la nota, por email y webhook, e informe semanal.
Equipos y seguridad Roles por sitio, verificación en dos pasos y planes con Stripe.
La IA con su clave Anthropic, OpenAI, Gemini, Mistral, DeepSeek o compatibles: Jazui no cobra la IA.

4. Integraciones

Elija dónde se reconoce a los bots. Cada tarjeta lleva a su guía en la documentación de Jazui.

5. Jazui en una aplicación Blazor con AstrolUI

Blazor servido por ASP.NET Core (WebAssembly hospedado o Blazor Web App): instale Jazui.AspNetCore desde el mismo feed de AstrolUI y añada el middleware antes de los archivos estáticos y del fallback. Es la opción más robusta: si Jazui tarda o falla, el bot recibe la página normal. El token va en la variable de entorno Jazui__Token.

dotnet nuget add source https://nuget.astrolui.com/v3/index.json --name AstrolUI
dotnet add package Jazui.AspNetCore
// Program.cs of the ASP.NET Core app that serves the Blazor WebAssembly client
builder.Services.AddJazui(builder.Configuration);   // section "Jazui": Token, SiteUrl, Timeout...
 
var app = builder.Build();
app.UseForwardedHeaders();   // only behind a proxy or CDN
app.UseJazui();              // before the static files and the SPA fallback
app.UseStaticFiles();
app.MapFallbackToFile("index.html");
app.Run();
 
// Token: environment variable Jazui__Token (never in appsettings.json)

Blazor WebAssembly estático en IIS: añada la regla «Jazui» como primera regla del web.config que ya tiene el sitio (no lo sustituya: trae los tipos MIME y las reglas de Blazor) y active una vez por servidor el proxy de ARR y las variables del servidor. Detrás de Cloudflare, la IP del bot sale de {HTTP_CF_CONNECTING_IP}. Active la regla cuando el sitio ya esté verificado en Jazui: con ARR, si Jazui responde con error, el bot recibe ese error.

<!-- First rule of <rewrite><rules>, before the Blazor SPA fallback. Full bot list:
     https://docs.jazui.com/example_config/iis_web.xml -->
<rule name="Jazui" stopProcessing="true">
  <match url=".*" />
  <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_USER_AGENT}#{QUERY_STRING}" pattern="^[^#]*(?:googlebot|bingbot|gptbot|chatgpt|claudebot|perplexity|facebookexternalhit|linkedinbot|whatsapp|...)|#.*_escaped_fragment_" />
    <add input="{REQUEST_METHOD}" pattern="^(GET|HEAD)$" />
    <add input="{HTTP_X_JAZUI}" pattern=".+" negate="true" />
    <add input="{URL}" pattern="\.(js|mjs|css|map|json|xml|txt|ico|png|jpg|svg|woff|woff2|wasm|dll|dat|blat|br|gz|pdf)$" negate="true" />
  </conditions>
  <serverVariables>
    <set name="HTTP_AUTHORIZATION" value="Bearer [JAZUI_TOKEN]" />
    <set name="HTTP_X_JAZUI_URL" value="https://{HTTP_HOST}{UNENCODED_URL}" />
    <set name="HTTP_X_JAZUI_CLIENT_IP" value="{REMOTE_ADDR}" />  <!-- behind Cloudflare: {HTTP_CF_CONNECTING_IP} -->
    <set name="HTTP_COOKIE" value="" />
  </serverVariables>
  <action type="Rewrite" url="https://api.jazui.com/Render" appendQueryString="false" />
</rule>
rem Once per server, as administrator: ARR proxy and the server variables the rule writes
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy /enabled:"True" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/rewrite/allowedServerVariables /+"[name='HTTP_AUTHORIZATION']" /+"[name='HTTP_X_JAZUI_URL']" /+"[name='HTTP_X_JAZUI_CLIENT_IP']" /+"[name='HTTP_COOKIE']" /commit:apphost

En cada página, para que la nota SEO suba y las vistas previas salgan bien:

  • Un <PageTitle> y un <HeadContent> con description, canonical y Open Graph (AstrolTitle acepta HeadContent): Jazui los conserva en el HTML renderizado.
  • Una URL propia para cada contenido y cada idioma (como /jazui y /jazui/es en este documentador), en el sitemap. Jazui puede alojar el sitemap, robots.txt y llms.txt, y gestionar los bots de IA.
  • Que el contenido principal no dependa de un clic o de un scroll: lo que no se pinta al cargar no se indexa.
  • Tras publicar cambios importantes, recachee desde el panel o con la API de caché.
<PageTitle>Product X | MyStore</PageTitle>
<AstrolTitle Icon="astrol-basket" Text="Product X">
    <HeadContent>
        <meta name="description" content="Short description that will appear in Google" />
        <meta property="og:title" content="Product X" />
        <meta property="og:description" content="Preview text for WhatsApp, LinkedIn, X..." />
        <meta property="og:image" content="https://mystore.com/img/product-x.jpg" />
        <link rel="canonical" href="https://mystore.com/product/x" />
    </HeadContent>
</AstrolTitle>

6. API

Todas las integraciones llaman a GET https://api.jazui.com/Render?url= con la URL completa codificada (o en la cabecera X-Jazui-Url) y Authorization: Bearer con el token de render de la cuenta o el de un sitio, que por convención va en la variable JAZUI_TOKEN (o Jazui__Token en .NET). Opcionales: botAgent, X-Jazui-Client-IP (la IP del bot) e If-None-Match. La respuesta solo se entrega al bot si trae X-Jazui: true; con X-Jazui-Blocked el bot está bloqueado (403) y en cualquier otro caso se sirve la web normal. Para no entrar en bucle, las integraciones dejan pasar las peticiones que ya traen la cabecera X-Jazui. Nunca exponga el token en el cliente.

Hay además APIs de caché (recachear, purgar), webhooks firmados, blog y archivos del sitio: ver docs.jazui.com/api.

curl "https://api.jazui.com/Render?url=https%3A%2F%2Fexample.com%2F&botAgent=integration-test" \
     -H "Authorization: Bearer $JAZUI_TOKEN" -i
 
# Deliver the response to the bot only if it carries  X-Jazui: true  (any status: 200, 301, 404...).
# X-Jazui-Blocked = blocked bot (403). Anything else, or a timeout: serve the normal site.

7. Planes

Jazui tiene un plan gratuito y planes de pago mensuales o anuales con prueba gratuita. Los precios y los límites de cada plan están siempre al día en jazui.com/plan.

8. Enlaces

Markdown para IA © 2026 AstrolUI v10.0.13