JSON-LD explicado para sites pessoais
(hawksley.dev)- Mesmo sites pessoais podem melhorar a forma como rastreadores entendem a relação entre páginas, pessoas e textos ao incluir dados estruturados, o que pode aprimorar prévias de links e a qualidade da exibição nos resultados de busca
- A implementação consiste em definir
@contextcomo Schema.org dentro de<script type="application/ld+json">no<head>e organizar nós comoWebSite,PersoneBlogPostingem@graph - Ao usar o mesmo
@id, rastreadores da web podem mesclar propriedades de nós entre várias páginas, mas scrapers ou LLMs que leem apenas uma página não fazem essa mesclagem - Na página raiz, o básico é usar
WebSite,ProfilePageePerson; em páginas de blog, projetos ou listas, adicionam-seBlog,BlogPosting,SoftwareApplication,CollectionPageeBreadcrumbListconforme o caso - Os campos
sameAsdePerson,breadcrumbda página eimage,licensee datas do texto são usados diretamente para identificação da pessoa, caminho exibido nos resultados, prévia do conteúdo, condições de uso e avaliação de atualidade
Função do JSON-LD e estrutura básica
- JSON-LD é a sigla de JSON Linked Data, um formato para adicionar dados estruturados a páginas da web
- Ele ajuda rastreadores a entender a estrutura semântica do site e pode contribuir para prévias de links mais ricas e uma possível melhora no ranqueamento em buscas
- Para adicioná-lo a uma página, insere-se no
<head>um script no seguinte formato<script type="application/ld+json">declara o tipo MIME comoapplication/ld+json- Quando esse tipo é especificado, o mecanismo JavaScript do navegador não o executa
- Rastreadores especializados, como o Googlebot, localizam esse elemento e fazem o parsing do conteúdo
@context, @graph e IDs de nós
@contextdefine o contexto seguido pelos dados JSON-LD, e os rastreadores da web usam Schema.org como padrão- O Schema.org define pares chave-valor válidos que podem ser usados no JSON
- Um documento JSON-LD pode ser visto como um grafo direcionado com rótulos, e os dados ficam armazenados em
@graph - O grafo pode conter vários nós, conectados entre si por ligações direcionadas
- Cada nó é composto pelos seguintes elementos
@type: indica o que o nó representa. Ex.:WebSite,SoftwareApplication@id: identificador do nó, normalmente uma URL com um hash exclusivo no final- propriedades: pares chave-valor que descrevem as características do nó
- Rastreadores da web podem mesclar, entre várias páginas, as propriedades de nós que compartilham o mesmo
@id - Já scrapers ou LLMs que leem apenas uma página não mesclam propriedades, então essa diferença deve ser considerada ao reutilizar JSON-LD em várias páginas
- Para
@id, recomenda-se usar um hash ao final da URL para identificar o nó de forma única, como#website
Nós para descrever o site e as páginas
-
WebSiteWebSiteguarda os metadados do site e oferece pistas para que rastreadores decidam como ele deve ser exibido- Na página raiz, é possível usar uma versão detalhada com propriedades como
url,name,alternateName,description,inLanguage,publishereimage - Não é necessário colocar o nó
WebSitecompleto em todas as páginas - A página raiz do domínio pode ser detalhada, enquanto nas demais basta uma versão resumida com
@type,@id,urlename - Essa versão resumida fornece o contexto necessário para que rastreadores que leem apenas uma página identifiquem corretamente o nome do site
-
WebPageWebPagerepresenta a própria página atual, ou seja, a página física em HTML- Deve ser diferenciado de tipos de conteúdo como
BlogPosting;WebPagese refere à página que contém esse conteúdo - Entre as propriedades de exemplo estão
url,isPartOf,name,inLanguageebreadcrumb ProfilePageeCollectionPagesão subtipos mais específicos deWebPage- Subtipos menos comuns podem ser consultados na definição de WebPage do Schema.org
Identificação pessoal e página de perfil
-
Person- Recomenda-se incluir um nó
Personem todas as páginas de um site pessoal Personindica quem é o dono do site e é usado como parte de alguns sinais de qualidade de conteúdo do Google- Rastreadores de LLM também estão usando cada vez mais informações de
Personpara decidir quem citar nas respostas - Ao contrário de
WebSite,Personé um contexto importante o suficiente para estar presente em todas as páginas - As propriedades mais importantes são as seguintes
url: aponta para a página raiz e ancora o nóname,givenName,familyName: deixam o nome claramente definidoimage: sempre que possível, use uma foto da pessoa ou um logotipo relacionado para vincular uma imagem oficialsameAs: informa aos rastreadores outros perfis, ajudando na identificação da pessoa
sameAsé especialmente útil para distinguir homônimos quando o nome é comum, e também serve para construir uma representação em grafo de conhecimento distribuída por várias páginas- Outras propriedades de
Personajudam a adicionar detalhes, mas não são obrigatórias, e reduzi-las tende a ter pouco impacto
- Recomenda-se incluir um nó
-
ProfilePageProfilePagerepresenta uma página do site sobre uma pessoa específica- Se a página inicial apresenta você, ela pode ser usada ali; se houver uma página separada de about, pode ser mais apropriado colocá-lo nela
- É importante conectá-la ao nó mais amplo
WebSitepor meio deisPartOf mainEntityinforma aos rastreadores de quem aquela página tratadateCreatededateModifiedsão úteis como sinais de atualidade para rastreadores, mas não há grande motivo para se preocupar se o site não os fornecer facilmente
Projetos e indicação de caminho
-
SoftwareApplication- Se uma página apresenta um software, vale a pena usar um nó
SoftwareApplicationpara registrar os metadados desse software - Tipos mais específicos incluem
MobileApplication,WebApplicationeVideoGame - A propriedade
urldeve apontar para onde o projeto está publicado - Um exemplo seria uma página de distribuição como o crates.io
sameAsé usado para outras páginas ligadas ao projeto, como um repositório de código-fonte- Valores válidos para
applicationCategorypodem ser consultados na definição de SoftwareApplication do Google - Mesmo em projetos FOSS, é preciso incluir
offerse definir o preço como0
- Se uma página apresenta um software, vale a pena usar um nó
-
BreadcrumbListBreadcrumbListé amplamente útil em todas as páginas, exceto a página raiz- Ele representa o caminho de classificação da página, que não precisa ser igual ao caminho real da URL
- Pode ser usado para controlar como mecanismos de busca exibem o caminho de uma determinada página
- Se a estrutura de caminhos do site já for curta, o ganho desse nó é pequeno e ele pode ser omitido
- Em sites com caminhos longos,
BreadcrumbListé útil para encurtar o caminho mostrado nos resultados de busca
Páginas de lista, blog e posts
-
CollectionPageCollectionPageé um subtipo deWebPageusado principalmente em páginas que reúnem listas- Exemplos incluem uma página
/elsewhere/que reúne outros perfis ou uma página/blog/com a lista de posts do blog aboutpode ser usado para conectar o nóPersonrelacionadobreadcrumbdeve necessariamente apontar para oBreadcrumbListcorreto da página atual
-
Blog- O nó
Blogé adicionado à página de índice ou à home do blog - Ele atua como um nó intermediário entre
WebSitee cadaBlogPosting dateModifiedé útil como sinal de atualidade, mas pode ser omitido se não for fácil fornecê-lolicenseinforma aos rastreadores em que condições os textos podem ser usados- Em sites pessoais,
publisherpode ser definido comoPersonem vez deOrganization - A documentação do Google agora também aceita
Personcomo valor válido, o que pode ser mais preciso para sites pessoais
- O nó
-
BlogPostingBlogPostingdeve ser incluído em todos os posts de blog publicados- Ele fornece informações adicionais para que rastreadores representem o texto com mais precisão
- Pode ser usado para posicionamento mais preciso e detalhes mais ricos nos resultados de busca
- Em um site pessoal, não há problema em
authorepublisherapontarem para o mesmo nóPerson - É recomendável alinhar a propriedade
imagecom a imagem OG já usada na prévia de links do post licensepode ser usada para indicar as condições de uso do texto
Implementação mínima e critérios de adoção
- O JSON-LD necessário para um site pessoal pode ser montado seletivamente de acordo com o tipo de página
- Mesmo em um site estático sem etapa de build, já é possível obter benefícios adicionando pelo menos os seguintes nós à página raiz
WebSiteProfilePagePerson
- Se houver um blog, podem ser adicionados
BlogeBlogPosting, e em páginas de lista de posts ou de perfis externos pode-se usarCollectionPage - Em páginas de apresentação de projetos, pode-se usar
SoftwareApplication, e em páginas que não sejam a raiz vale considerarBreadcrumbList
1 comentários
Comentários no Hacker News
Fazendo uma analogia, parece lutar a guerra passada de novo
Do ponto de vista do meu site na WWW, o Google agora mostra lá em cima um resumo longo gerado por LLM e misturado com erros, em vez de mandar as pessoas para o meu texto de verdade
Conseguir um nome de exibição bonitinho em vez de um “breadcrumb” ou do domínio não resolve a realidade de que o Google está rebaixando a prioridade de mandar bem ou mal esses elementos
No fim, estamos gastando esforço demais em algo que quem visita o site diretamente nunca vai ver, e que para quem usa o Google fica difícil de achar, empurrado para baixo por uma versão cada vez mais moldada por LLM do próprio Google
Mesmo que o Google não use, se a internet como um todo adotar esse tipo de metadado, isso cria um terreno fértil para concorrentes oferecerem alternativas sem depender de raspagem por LLM
Ceder ao Google só fortalece o domínio dele, aumenta a barreira de entrada para concorrentes e empurra todos eles a usar a mesma tecnologia
empresa de TI sediada em $STATE, especializada em criar fluxos de trabalho práticos de IA e soluções de gestão da informação para empresas do meio-oeste. Opera com um modelo ágil de contratos de preço fixo, evitando o inchaço típico de empresas enterprise e focando em entregar resultados concretosEu nem sabia que agora oferecíamos fluxos de trabalho práticos de IA
E ainda mistura o nome de um concorrente com nome parecido, mas claramente diferente, e me coloca como executivo. A única sorte é que o concorrente esconde os contatos atrás de um formulário de “agendar consulta”, então só os nossos contatos aparecem
Neste momento ele não agrega mais nenhum valor e só cria mais problemas
No fim, isso só serviu para treinar a IA do Google e manter as pessoas sem sair do Google
Se você tem uma postura pragmática, eu recomendaria ler sobre JSON-LD na documentação do Google para sites
https://developers.google.com/search/docs/appearance/structu...
Você também vai notar que muita coisa ali só se aplica a alguns sites. Rotten Tomatoes pode publicar notas de críticos de filmes em JSON-LD, mas mesmo que eu escreva resenhas de filmes, isso não é muito relevante para mim
JSON-LD é fácil e os mecanismos de busca realmente usam, então tudo bem. Ele pode duplicar informações que já estão na página, mas eu vejo esse sonho de anotar tudo perfeitamente para que a informação apareça exatamente uma vez no documento como uma idealização tipo vaca esférica e corda sem massa
Criar uma página web exige trabalho humano, e ter um pouco de duplicação no resultado final não tem problema
No meu site eu uso em resenhas de livros, jogos e filmes, e parece que a maioria dos mecanismos de busca mostra coisas como a nota em estrelas
403. That’s an error.Diz que o cliente não tem permissão para buscar a URL
/search/docs/appearance/structured-data/intro-structured-dataneste servidorPara prévias ricas de links, OpenGraph tem suporte com muito mais frequência do que JSON-LD
Se o objetivo é otimização para mecanismos de busca, os tipos de JSON-LD suportados pelos buscadores são muito específicos e limitados. É muito melhor olhar a documentação do buscador de destino, ou seja, Google[1] ou Bing[2], e seguir aquilo ao pé da letra; fora isso, é quase perda de tempo
Fora do contexto de mecanismos de busca, se não houver um objetivo específico, JSON-LD em geral não serve para muita coisa. Se você tiver uma necessidade concreta que peça JSON-LD, vale colocar os dados que forem úteis para isso; colocar outros dados além disso é quase como gritar no vazio
O IndieWeb[3] usa dados estruturados, mas considera JSON-LD uma violação de DRY e usa Microformats[4] no lugar
0: https://ogp.me
1: https://developers.google.com/search/docs/appearance/structu...
2: https://www.bing.com/webmasters/help/marking-up-your-site-wi...
3: https://indieweb.org/
4: https://microformats.org/
O que você realmente quer implementar em qualquer site são dados estruturados usando o vocabulário do Schema.org
JSON-LD é uma das formas de fazer isso, e também existem RDFa e Microdata
Quando comecei a aprender, usei este texto como referência e vale a recomendação: https://neilpatel.com/blog/get-started-using-schema/
Você pode ver que tipo de dados adicionar com esta ferramenta: https://technicalseo.com/tools/schema-markup-generator/
A lista completa pode ser vista no site do schema.org: https://schema.org/docs/schemas.html
Alguns anos atrás descobri que todos aqueles recursos sofisticados de e-mail como passagem aérea embutida ou informações de rastreamento de entrega sendo exibidas são implementados com JSON-LD dentro do e-mail
Mas, pelo que eu sei, só o Gmail oferece suporte
Mais informações: https://www.emailonacid.com/blog/article/email-development/s...
Fico me perguntando se essas propriedades realmente ajudam na visibilidade na busca, ou se só facilitam para os mecanismos de busca manterem o usuário preso na página de resultados
Coisas como endereço, horário de funcionamento, telefone e cardápio
Já existe HTML semântico, mas por algum motivo ainda precisamos expressar de novo o significado do site em um JSON esquisito e customizado dentro de uma tag
script, que o navegador nem processaHTML semântico define o que o navegador processa, como títulos e cabeçalhos. Os dados em JSON-LD são metadados, como data de criação, data de modificação, tags e autor
Essas coisas também podem ser expressas como microdata dentro do HTML, mas JSON-LD é mais fácil, então parei de usar microdata
Eu preencho o JSON-LD a partir dos mesmos dados usados para gerar o site, e com esses metadados também crio páginas de índice, como uma lista de posts do blog de 2024 ou todos os posts sobre o tema X. O principal consumidor do JSON-LD são os mecanismos de busca
Se quiser ficar ainda mais irritado, pense que eu também incluo metadados OpenGraph na mesma página. Ou seja, há dois formatos diferentes de metadados na mesma página
Mas o JSON-LD vem sendo o padrão de fato há algum tempo, meio como fomos largando REST e indo para RPC. Não sei se os parsers importantes ainda suportam microdata de forma ampla, e especialmente ao criar sites para clientes, como e-commerce que quer destaque na busca do Google, normalmente usei LD por padrão
Também há um ponto importante na comparação com HTML semântico. HTML semântico ajuda a definir a estrutura da marcação, mas não chega a expressar contexto do mundo real, como “isto é um produto à venda” ou “isto é uma tabela de horários de trem”
Dá para usar ontologias como Schema.org/FOAF/WikiData dentro do HTML sem JSON-LD nem tag
scriptSó pelos exemplos do texto, já dá para perguntar quais seriam os elementos semânticos para representar pessoas, trilha de navegação, aplicativos de software, blogs e posts de blog
HTML semântico serve para ajudar quem usa leitor de tela a navegar por elementos gerais como “navegação” ou “artigo”
Isso não é simplesmente OpenGraph escrito em JSON? Qual é a vantagem?
Desde 2024, o tráfego das nossas páginas de marketing baseadas em conteúdo caiu cerca de 85%
O que não entendo é: com o aumento das páginas de resultados sem clique, o Google também não deveria ter sido bastante afetado?
A receita de anúncios da página de resultados, que é baseada em clique, também deveria ter despencado de forma parecida, mas não encontrei números públicos para refutar ou confirmar essa hipótese
Existe um equilíbrio delicado em que, depois de certo ponto, simbiose vira exploração
A relação em que sites ganhavam visibilidade com a ajuda dos mecanismos de busca era, em boa parte, mutuamente benéfica
Mas agora isso está indo totalmente para um lado em que o dono do site não recebe nada pelo trabalho suado que produziu