Prerender para bots
Los bots de búsqueda, los scrapers de vistas previas en redes sociales y muchos rastreadores antiguos siguen sin ejecutar JavaScript, y un div vacío es peor que no tener página. La API Prerender carga su URL en un motor de renderizado real, espera a que la aplicación termine de pintar el contenido y devuelve el HTML final tal como lo vería una persona. Actívela cuando detecte un user-agent de bot y deje de adivinar si Googlebot realmente vio su contenido.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
La distancia entre lo que construyó y lo que se indexa
Las aplicaciones de página única hechas con frameworks modernos se ven perfectas en un navegador, pero muchas veces llegan a los motores de búsqueda y rastreadores como una cáscara vacía, porque el HTML que reciben nunca ejecuta el JavaScript que llena el contenido. Esto afecta a las SPA, a catálogos de comercio electrónico muy hidratados y a cualquier sitio donde el contenido depende de peticiones de datos en el cliente. La API Prerender existe justamente para equipos que no pueden reescribir todo su front end a renderizado en servidor solo para satisfacer a un puñado de bots.
Qué ocurre exactamente en cada llamada
Envía una URL a POST /web/prerender, nuestra infraestructura la abre en un motor de renderizado real, espera a que la actividad de red y la ejecución clave de JavaScript se estabilicen, y captura el DOM resultante como HTML estático. Ese HTML es lo que se devuelve, completo con etiquetas meta, datos estructurados inyectados y cualquier contenido que solo apareció después de que terminó una llamada del lado del cliente. Se comporta igual que una pestaña de navegador que se dejó abierta hasta que todo cargó.
Una historia breve de un problema persistente
Los motores de búsqueda han mejorado su ejecución de JavaScript con los años, pero los presupuestos de renderizado siguen siendo limitados y desiguales entre rastreadores. Mientras tanto, los bots de vista previa social y muchas herramientas de auditoría SEO nunca evolucionaron más allá de leer el HTML crudo. El prerenderizado como técnica es anterior a la mayoría de los frameworks modernos, precisamente porque esa asimetría nunca se cerró del todo.
Cómo encaja en un flujo automatizado, no en una pestaña abierta
Como el endpoint es asíncrono, encola una petición, recibe un task_id de inmediato y obtiene el HTML terminado por webhook firmado o por un enlace válido por 24 horas, sin conexiones abiertas dentro de su ruta crítica. Un middleware que detecte user-agents de bots puede llamar a este endpoint bajo demanda, o puede precalentar una caché de sus URL importantes de forma programada.
Dónde deja de ser su problema
Una vez que tiene el HTML renderizado, lo que haga con él es enteramente suyo: guardarlo en el borde de su red, almacenarlo como respaldo estático o pasarlo directo a otro paso automatizado como una revisión de meta tags o una auditoría SEO. No conservamos el contenido de la página más allá de la ventana de retención, y nada de lo renderizado aquí se usa para entrenar nada.
Qué puede hacer con ella
Servirle a Googlebot una página completa
Detecte el user-agent del rastreador en su borde de red, llame a la API Prerender para esa URL y sirva el HTML renderizado en lugar de la cáscara vacía de su aplicación.
Corregir vistas previas rotas en redes sociales
Los bots que expanden enlaces en apps de mensajería suelen ignorar el JavaScript por completo; el prerenderizado garantiza que sus etiquetas Open Graph y la imagen de vista previa realmente estén en el HTML que ellos leen.
Alimentar con HTML correcto a otras herramientas de SEO
Pase una página primero por prerenderizado y luego envíe el resultado a una auditoría de encabezados o de meta tags, para que el análisis refleje lo que realmente contiene la página renderizada.
Precalentar una caché estática durante la noche
Recorra su sitemap por lotes de forma programada, guarde el HTML renderizado de cada URL y sirva a los bots desde esa caché sin ninguna latencia de renderizado durante el día.
Preguntas frecuentes
Qué devuelve exactamente la API Prerender?
El HTML final ya renderizado de la URL que envía, capturado después de que la ejecución de JavaScript se estabiliza: el mismo marcado que mostraría un navegador, no el código fuente original.
Hay un plan gratuito para probar?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
Cómo recibo el resultado?
La llamada a POST /web/prerender es asíncrona y devuelve un task_id de inmediato; el HTML terminado llega por webhook firmado o por un enlace firmado válido durante 24 horas.
Qué pasa si falla el renderizado?
La tarea se reintenta automáticamente hasta tres veces; si sigue fallando recibe un error claro y nunca se le cobra por una tarea fallida.
Cuánto cuesta este servicio?
Cuesta 0.040 dólares por petición más 0.001 dólares por URL, un precio publicado y predecible para que calcule el costo de un lote antes de encolarlo.
Puedo usarla en páginas protegidas por autenticación?
El endpoint renderiza la URL que envíe, así que cualquier autenticación debe manejarse mediante parámetros de URL, cookies o encabezados que su propia configuración ya soporte.
El prerenderizado también ayuda con la velocidad de la página?
De forma indirecta sí: servir HTML ya renderizado a bots y visitantes en caché elimina por completo el tiempo de renderizado en el cliente.
Se guarda mi contenido a largo plazo?
No. Los resultados se eliminan al terminar la ventana de retención y jamás se usan para entrenar ningún modelo.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/prerender \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/prerender", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/prerender",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/prerender", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/prerender", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://ejemplo.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.prerender",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |