Gere JSON-LD FAQ
Transforme uma lista aprovada de perguntas e respostas em marcação FAQPage do schema.org sem escrever JSON aninhado manualmente.
Executar grátis
O gerador valida cada par, preserva a ordem escolhida e entrega um objeto estruturado e um bloco script completo para a página correspondente. Ele não inventa afirmações nem reescreve seu conteúdo, portanto os dados estruturados continuam alinhados ao texto realmente visível para os visitantes.
Prepare primeiro perguntas e respostas visíveis
Comece pelo conteúdo de perguntas frequentes que os visitantes realmente conseguem ver na página. Cada linha precisa de uma pergunta completa e da resposta correspondente; nenhuma delas pode estar vazia ou conter somente espaços. O gerador não redige, amplia nem verifica esse material. Essa separação é importante porque dados estruturados devem representar a página, e não criar uma segunda versão oculta. Revise afirmações, políticas, preços, datas e critérios com as pessoas responsáveis antes de gerar o bloco. Use uma redação clara e específica, compreensível sem menus ou texto promocional. Caso duas perguntas tratem do mesmo assunto, resolva a duplicidade na FAQ visível. Organize os pares na ordem desejada: a lista mainEntity preserva exatamente essa sequência. Sempre que uma resposta mudar, mantenha o conteúdo visível e os dados estruturados sincronizados.
Gere uma marcação segura e padronizada
Para cada par fornecido, o gerador cria uma Question do schema.org e armazena a pergunta em name. Em seguida, aninha uma Answer em acceptedAnswer e coloca a resposta em text. Esses registros formam o array mainEntity de um objeto FAQPage com o contexto do schema.org. O retorno inclui esse objeto para automações e um bloco application/ld+json formatado para inserção direta no HTML. Espaços externos são removidos, enquanto pontuação, maiúsculas e formatação interna permanecem sob seu controle. A serialização é determinística: entradas idênticas sempre produzem saídas idênticas, sem rede, aleatoriedade, modelo ou horário. Caracteres que poderiam interferir no elemento script do HTML são codificados com segurança. O JSON ainda recupera o texto original, mas o bloco não pode encerrar seu próprio script antes da hora.
Publique, confira e mantenha o resultado
Coloque o bloco script retornado no HTML da página cuja FAQ visível contém as mesmas perguntas e respostas. Em geral, JSON-LD pode ficar no head ou no body, mas seu gerenciador de conteúdo talvez ofereça um campo específico para dados estruturados. Evite distribuir o bloco por um modelo global em páginas sem relação: a marcação descreve uma página específica e deve acompanhar seu conteúdo. Depois da publicação, inspecione o código renderizado para confirmar que o elemento application/ld+json está presente e não foi exibido como texto comum. Teste então a URL pública com as ferramentas de validação dos mecanismos de busca relevantes. Sintaxe válida não promete uma aparência especial, pois cada serviço define seus próprios critérios. Trate o bloco como conteúdo mantido: quando uma resposta visível for alterada, removida ou reordenada, gere novamente o JSON-LD e publique as duas mudanças juntas.
Casos de uso
Publique uma FAQ de suporte
Converta perguntas revisadas da central de ajuda em marcação FAQPage consistente para o mesmo artigo público.
Automatize páginas de destino
Gere JSON-LD determinístico a partir de registros de FAQ no gerenciador de conteúdo em cada compilação.
Substitua esquemas manuais
Remova aninhamento e aspas frágeis do fluxo editorial sem alterar o texto aprovado.
Perguntas frequentes
O que o gerador retorna?
Ele retorna um objeto de esquema e um bloco script application/ld+json completo com os mesmos dados FAQPage.
Ele escreve perguntas ou respostas para você?
Não. Ele apenas valida e estrutura o texto fornecido; não gera, reescreve nem verifica afirmações.
O que acontece se uma pergunta ou resposta estiver vazia?
A solicitação falha com um erro de entrada inválida que identifica a posição do campo vazio.
É seguro colar o bloco script no HTML?
Sim. Caracteres sensíveis ao HTML são escapados durante a serialização JSON, impedindo o fechamento antecipado do script.
Uma marcação FAQPage válida garante resultado enriquecido?
Não. O gerador cria uma estrutura válida, mas cada buscador decide elegibilidade e apresentação segundo suas políticas.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. A ferramenta web pode executar localmente a mesma lógica determinística.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"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."
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.faq_schema_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |