hasPart e Link Âncora

hasPart e Link Âncora

O plugin PSA Schema cria um identificador (@id) para cada elemento no array hasPart

Vamos entender como isso funciona:

1. O Que é getHasPartData?

A função getHasPartData analisa o conteúdo de um post para encontrar cabeçalhos (<h2> e <h3>) e criar elementos do tipo WebPageElement. Esses elementos são adicionados ao array hasPart, que faz parte do schema Article ou BlogPosting. Cada elemento representa uma seção do conteúdo marcada por um cabeçalho.

2. Como o Plugin Gera o Identificador (@id)?

A função usa ferramentas como DOMDocument e DOMXPath para localizar os cabeçalhos <h2> e <h3> no conteúdo.

Para cada cabeçalho encontrado:

  • Extrai o texto do cabeçalho ($text).
  • Verifica se o cabeçalho já possui um atributo id ($id), que é usado como âncora na página.

Se o cabeçalho tiver um id, o plugin cria um elemento no array hasPart com um identificador no formato:

$this->currentUrl . "#" . $id

$this->currentUrl é a URL do post (obtida via get_permalink($post)).

$id é o valor do atributo id do cabeçalho.

Estrutura dos Elementos em hasPart

Cada elemento no array hasPart segue a seguinte estrutura:

[
  "@type" => "WebPageElement",
  "name" => $text, // Texto do cabeçalho
  "url" => $this->currentUrl . "#" . $id, // Link âncora
  "position" => $position++ // Posição do cabeçalho no conteúdo
]

O campo url atua como o identificador (@id) implícito, referenciando a âncora específica na página (ex.: https://example.com/post#introducao). Embora o código não defina explicitamente uma chave @id, o campo url cumpre essa função, pois o Schema.org aceita url como identificador de recurso.

Origem do Atributo id nos Cabeçalhos

Se o cabeçalho já tiver um atributo id, o plugin o utiliza diretamente.

Se o cabeçalho não tiver um id, o plugin gera um automaticamente usando a função generateCleanAnchor:

  • Essa função translitera o texto do cabeçalho (ex.: “Minha Seção” → minha-secao).
  • O novo id é baseado no idioma do post e segue um formato limpo e legível.

5. Exemplo Prático

Suponha que o conteúdo do post seja:

<h2 id="introducao">Introdução</h2>
<p>Texto...</p>
<h2 id="conclusao">Conclusão</h2>
<p>Texto...</p>

O plugin gerará o seguinte array hasPart:

"hasPart": [
  {
    "@type": "WebPageElement",
    "name": "Introdução",
    "url": "https://example.com/post#introducao",
    "position": 1
  },
  {
    "@type": "WebPageElement",
    "name": "Conclusão",
    "url": "https://example.com/post#conclusao",
    "position": 2
  }
]

Observações Importantes

  • O campo url no hasPart funciona como um identificador único, vinculando cada WebPageElement a uma âncora específica na página.
  • Se o cabeçalho não tiver um id ou se o conteúdo não for processado corretamente, o elemento não será adicionado ao hasPart.
  • O plugin registra logs detalhados do conteúdo gerado para facilitar a depuração.

7. Conclusão

O plugin PSA Schema cria um identificador para cada elemento no hasPart, usando o formato post_url#anchor-id no campo url. Esse identificador é derivado do atributo id dos cabeçalhos <h2> e <h3>, que pode ser pré-existente ou gerado automaticamente pelo plugin. Isso ajuda a organizar o conteúdo e melhora o SEO ao fornecer links âncoras claros e únicos para cada seção da página.