Genere JSON-LD FAQ
Convierta una lista aprobada de preguntas y respuestas en marcado FAQPage de schema.org sin escribir JSON anidado manualmente.
Ejecutar — gratis
El generador valida cada pareja, conserva el orden elegido y entrega tanto un objeto estructurado como un bloque script completo para la página correspondiente. No inventa afirmaciones ni modifica sus textos, por lo que los datos estructurados permanecen fieles al contenido visible para sus visitantes.
Prepare primero las preguntas y respuestas visibles
Comience con el contenido de preguntas frecuentes que los visitantes puedan ver realmente en la página. Cada fila necesita una pregunta completa y su respuesta; ninguna puede estar vacía ni contener solo espacios. El generador no redacta, amplía ni verifica ese material. Esta separación es importante porque los datos estructurados deben describir la página, no crear una segunda versión oculta. Revise afirmaciones, políticas, precios, fechas y requisitos con las personas responsables antes de generar el bloque. Use una redacción clara y específica que se entienda sin navegación ni texto promocional. Si dos preguntas tratan el mismo asunto, resuelva la duplicación en la FAQ visible. Ordene las parejas como desee conservarlas: la lista mainEntity respetará exactamente esa secuencia. Cuando cambie una respuesta, mantenga sincronizados el contenido visible y sus datos estructurados.
Genere un marcado seguro y conforme al estándar
Para cada pareja, el generador crea una Question de schema.org y guarda la pregunta en name. Después anida una Answer bajo acceptedAnswer y coloca la respuesta en text. Los registros forman el array mainEntity de un objeto FAQPage con el contexto de schema.org. La respuesta incluye ese objeto para flujos automáticos y un bloque application/ld+json formateado para insertarlo directamente en HTML. Se eliminan los espacios exteriores, pero usted conserva la puntuación, las mayúsculas y el formato interno. La serialización es determinista: una entrada idéntica produce siempre la misma salida, sin consultas de red, aleatoriedad, modelos ni marcas temporales. Los caracteres que podrían interferir con un elemento script de HTML se codifican de forma segura. El JSON sigue recuperando el texto original, pero el bloque no puede cerrarse antes de tiempo.
Publique, compruebe y mantenga el resultado
Inserte el bloque script devuelto en el HTML de la página cuya FAQ visible contiene las mismas preguntas y respuestas. JSON-LD suele poder situarse en head o body, aunque su gestor de contenidos quizá ofrezca un campo específico para datos estructurados. No añada el bloque globalmente a páginas no relacionadas: describe una página concreta y debe acompañar a su contenido. Tras publicar, revise el código renderizado para confirmar que el elemento application/ld+json existe y no aparece escapado como texto visible. Pruebe después la URL pública con las herramientas de validación de los buscadores relevantes. Una sintaxis válida no garantiza una presentación especial, pues cada servicio mantiene sus propios requisitos. Considere el bloque contenido mantenido, no un artefacto único: si un editor modifica, elimina o reordena una respuesta visible, regenere el JSON-LD y publique ambos cambios juntos.
Qué puede hacer con ella
Publique una FAQ de soporte
Convierta preguntas revisadas del centro de ayuda en marcado FAQPage coherente para el mismo artículo público.
Automatice páginas de destino
Genere JSON-LD determinista desde registros de FAQ guardados en un gestor de contenidos durante cada compilación.
Sustituya esquemas escritos a mano
Elimine anidación y comillas frágiles del flujo editorial sin alterar el texto aprobado.
Preguntas frecuentes
¿Qué devuelve el generador?
Devuelve un objeto de esquema y un bloque script application/ld+json completo con los mismos datos FAQPage.
¿Redacta las preguntas o respuestas por mí?
No. Solo valida y estructura el texto proporcionado; no genera, reescribe ni comprueba afirmaciones.
¿Qué ocurre si una pregunta o respuesta está vacía?
La solicitud falla con un error de entrada no válida que identifica la posición del campo vacío.
¿Es seguro pegar el bloque script en HTML?
Sí. Los caracteres sensibles para HTML se escapan al serializar JSON para impedir el cierre prematuro del script.
¿Un FAQPage válido garantiza un resultado enriquecido?
No. El generador crea una estructura válida, pero cada buscador decide la elegibilidad y presentación según sus políticas.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. La herramienta web puede ejecutar localmente la misma lógica determinista.
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/faq-schema-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pairs":[{"question":"How long does delivery take?","answer":"Standard delivery takes three to five business days."},{"question":"Can I change my order?","answer":"Yes. Contact support before the order is dispatched."}]}'const res = await fetch("https://api.kit.forhosting.com/web/faq-schema-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pairs": [
{
"question": "How long does delivery take?",
"answer": "Standard delivery takes three to five business days."
},
{
"question": "Can I change my order?",
"answer": "Yes. Contact support before the order is dispatched."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/faq-schema-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pairs": [
{
"question": "How long does delivery take?",
"answer": "Standard delivery takes three to five business days."
},
{
"question": "Can I change my order?",
"answer": "Yes. Contact support before the order is dispatched."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/faq-schema-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pairs":[{"question":"How long does delivery take?","answer":"Standard delivery takes three to five business days."},{"question":"Can I change my order?","answer":"Yes. Contact support before the order is dispatched."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pairs":[{"question":"How long does delivery take?","answer":"Standard delivery takes three to five business days."},{"question":"Can I change my order?","answer":"Yes. Contact support before the order is dispatched."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/faq-schema-generate", 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
{
"pairs": [
{
"question": "How long does delivery take?",
"answer": "Standard delivery takes three to five business days."
},
{
"question": "Can I change my order?",
"answer": "Yes. Contact support before the order is dispatched."
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.faq_schema_generate",
"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. |