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 '<script type="application/ld+json"/>'; echo $jsonLd; echo '</script>'; |
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.