
@id no JSON-LD para ligar entidades entre domínios
O @id dá a uma entidade um identificador global, e é ele que permite dizer que o autor de um post e a pessoa descrita em outro domínio são o mesmo nó. A regra que sigo é uma página-casa por entidade, com o nó completo só nela e um stub com tipo, nome e URL nas outras páginas. Em 23 de setembro de 2026, lucasferraz.com e lucasferrazseo.com passaram a usar o mesmo @id para a pessoa e para o livro, e no dia seguinte voltei atrás: cada domínio emite o nó com @id próprio e liga ao outro por sameAs e url. O Google não documenta a consolidação de @id entre domínios, e o @id cruzado fazia dois sites reivindicarem o mesmo identificador.
- A JSON-LD 1.1 virou recomendação do W3C em 16 de julho de 2020 e define o @id como identificador de nó por IRI ou por identificador de nó em branco;
- Na especificação, um objeto que contém apenas @id é uma referência de nó, que pode apontar para um nó descrito em outro ponto do documento;
- Uma IRI relativa como "#person" é resolvida contra a IRI base do documento, então gera um identificador diferente em cada página;
- Entre 23 e 24 de setembro de 2026, os dois domínios identificaram a mesma pessoa pelo @id https://lucasferraz.com/#person;
- Desde 24 de setembro de 2026, a agência identifica a pessoa por /autor-lucas-ferraz/#personLucasFerraz e este site por https://lucasferraz.com/#person, com sameAs recíproco.
O que o @id faz em um grafo JSON-LD?
O @id é o identificador global de um nó no JSON-LD, e dois nós com o mesmo @id são a mesma coisa. A JSON-LD 1.1, recomendação do W3C desde 16 de julho de 2020, define o @id como a palavra-chave que identifica objetos de nó por IRI ou por identificador de nó em branco. Quando o @id falta, o processador cria um nó em branco, como o _:b0 dos exemplos da especificação, que só existe dentro daquele documento e não pode ser citado de fora.
A mesma especificação define a referência de nó: um objeto que contém apenas o @id e aponta para um nó descrito em outro lugar. É esse mecanismo que deixa um BlogPosting dizer que o autor é {"@id": "https://lucasferraz.com/#person"} sem repetir nome, foto e perfis. Para a entidade ter um único endereço, o identificador precisa ser estável e igual em todo lugar em que ela aparece.
A mesma especificação define a referência de nó: um objeto que contém apenas o @id e aponta para um nó descrito em outro lugar.
Lucas Ferraz, especialista em SEO

A armadilha da IRI relativa
Uma IRI relativa no @id muda de valor a cada página em que aparece. A especificação resolve referências relativas contra a IRI base do documento, que normalmente é a URL da própria página. O exemplo de ProfilePage da documentação do Google usa "#main-author", o que funciona dentro de uma página só. Colado em outra URL, o mesmo "#main-author" vira outro identificador.
| @id escrito | Página onde aparece | IRI resolvida |
|---|---|---|
| #person | https://site.com/ | https://site.com/#person |
| #person | https://site.com/blog/post/ | https://site.com/blog/post/#person |
| https://site.com/#person | qualquer página | https://site.com/#person |
Para ligar a mesma entidade entre páginas, e mais ainda entre domínios, o @id precisa ser absoluto.
Página-casa e stub
A página-casa é a única URL que carrega o nó completo de uma entidade, e as outras páginas levam só um stub. A Schema App chama esse endereço de entity home e recomenda usar a URL canônica da entidade, ou um fragmento dela, como @id. Eu sigo a mesma lógica com uma regra extra: um @graph por página, nó completo só na casa, e em todas as outras um stub com quatro chaves.
{
"@type": "Person",
"@id": "https://lucasferraz.com/#person",
"name": "Lucas Ferraz",
"url": "https://lucasferraz.com/"
}
O stub resolve dois problemas. Cada página continua legível sozinha, com tipo e nome, mesmo para quem não segue o identificador. E os fatos que mudam, como sameAs, cargo e foto, ficam em um só lugar, o que elimina a divergência entre cópias.
A referência solta que vira nó fantasma
Uma referência solta é um @id citado no grafo sem nenhum nó que o descreva naquela página. Quem lê o grafo encontra só o identificador, sem tipo e sem nome, e passa a ter um nó fantasma que não diz o que é. O erro aparece quando um template aponta o author para um @id e esquece de incluir o stub, ou quando o identificador muda em um lugar e não no outro.
Entre as checagens do teste de deploy deste site, três tratam disso: nó sem @id, @id repetido dentro do mesmo grafo e referência solta. Referências para o domínio da agência e para DOI ficam liberadas, porque essas entidades têm casa fora daqui. Se o Googlebot visita a URL do @id para completar o grafo é algo que o Google não documenta. A Schema App relata ter observado esse rastreamento desde 2017, e trato isso como indício de fornecedor, sem base para depender dele.
Por que os dois domínios deixaram de dividir o @id?
A pessoa Lucas Ferraz tem, desde 24 de setembro de 2026, um @id em cada domínio, ligados por sameAs e url. Em 23 de setembro, a casa da pessoa passou a ser a Home deste site, marcada como ProfilePage, e o tema da agência trocou o identificador para https://lucasferraz.com/#person. No dia seguinte desfiz a troca. O Google processa o schema por página e usa o @id como cola interna do grafo, então dois domínios emitindo o mesmo identificador passam a reivindicar o mesmo nó, e qualquer diferença entre as duas cópias vira divergência.
A regra atual é uma entidade, um nó completo em cada site, com @id do próprio domínio. A agência identifica a pessoa por /autor-lucas-ferraz/#personLucasFerraz e este site por https://lucasferraz.com/#person, e os dois nós se apontam no sameAs, com os mesmos fatos. A exceção é o identificador neutro de registrador: o estudo com DOI usa o próprio DOI como @id nos dois domínios, porque nenhum dos dois é dono dele. É a parte do trabalho de entidade no Knowledge Graph que depende só do próprio código, e a mesma lógica vale para o knowsAbout ligado ao glossário.
O que a IA desdobra desta pergunta?
Quando alguém faz esta busca em uma IA, o sistema abre subperguntas antes de responder. Estas são as que apareceram na medição, e onde cada uma é respondida.
Perguntas frequentes
Não precisa, mas convém. A especificação aceita qualquer IRI, e o fragmento depois do # nem chega ao servidor. Prefiro um @id formado pela URL da página-casa mais um fragmento, porque quem seguir o identificador cai justamente na página que descreve a entidade por completo, com todas as propriedades e o sameAs.
Pode, mas cria risco de divergência. Se nome, foto ou sameAs mudarem em uma cópia e não nas outras, o mesmo @id passa a carregar fatos diferentes em URLs diferentes. Por isso deixo o nó completo só na página-casa e uso nas demais um stub com tipo, @id, nome e URL.
O Google não documenta esse comportamento. A especificação JSON-LD trata IRIs iguais como o mesmo nó, mas não obriga nenhum buscador a baixar outra página para completar o grafo. Na prática, cada página precisa se sustentar sozinha, e esse é o motivo de manter o stub com tipo e nome em todas elas.
Fontes citadas
Histórico deste texto
- : Correção da seção sobre os dois domínios. Desde 24 de setembro de 2026, cada site usa @id próprio para a pessoa, ligado ao outro por sameAs e url.
Versão em markdown para agentes de IA: https://lucasferraz.com/blog/id-no-json-ld-entre-dominios/md/


