Além de exemplos estáticos, é comum precisar gerar JSON-LD dinamicamente a partir do banco de dados. Isso é essencial em sites de notícias, onde cada página possui conteúdo único.
O Problema
Manter JSON-LD fixo não escala em sistemas dinâmicos. Em portais de notícias, os dados como título, descrição, data e perguntas frequentes vêm do banco.
Sem automatizar isso:
- O conteúdo fica desatualizado
- Há retrabalho manual
- Perde-se consistência
A Solução
Gerar o JSON-LD dinamicamente com PHP, utilizando dados vindos do banco de dados.
Exemplo de tabela (faq_noticia)
CREATE TABLE faq_noticia (
id INT AUTO_INCREMENT PRIMARY KEY,
noticia_id INT,
pergunta VARCHAR(255),
resposta TEXT
);
Consulta no banco
$noticia_id = 10;
$sql = "SELECT pergunta, resposta FROM faq_noticia WHERE noticia_id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$noticia_id]);
$faqs = $stmt->fetchAll(PDO::FETCH_ASSOC);
Gerando JSON-LD com PHP
$faqSchema = [
"@context" => "https://schema.org",
"@type" => "FAQPage",
"mainEntity" => []
];
foreach ($faqs as $faq) {
$faqSchema["mainEntity"][] = [
"@type" => "Question",
"name" => $faq['pergunta'],
"acceptedAnswer" => [
"@type" => "Answer",
"text" => $faq['resposta']
]
];
}
$jsonLd = json_encode($faqSchema, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
Saída no HTML
echo '';
echo $jsonLd;
echo '';
Boas práticas
- Usar json_encode para evitar erros de formatação
- Garantir que os dados estejam limpos (sem HTML quebrado)
- Evitar duplicidade de FAQs na página
- Gerar o JSON-LD apenas quando houver conteúdo
Conclusão
Integrar JSON-LD com o banco de dados via PHP é o caminho natural para qualquer sistema dinâmico. Isso garante escalabilidade, consistência e melhora direta na forma como o Google entende seu conteúdo.
Em projetos reais, essa abordagem é praticamente obrigatória.