---
title: "Schema para custom post types com ACF e Rank Math"
description: "Schema para custom post types com ACF e Rank Math é o processo de gerar dados estruturados em JSON-LD para conteúdos fora do padrão post e página."
url: https://full.services/schema-custom-post-types-acf-rank-math/
date: 2026-06-18
author: "Clayton Margiotti"
---

# Schema para custom post types com ACF e Rank Math

Adicionar **schema para custom post types com ACF e Rank Math** é definir um @type do Schema.org por post type e mapear cada campo ACF para uma propriedade do JSON-LD. Segundo a [WordPress Developer Docs](https://developer.wordpress.org/reference/functions/register_post_type/) (2026), um CPT registrado com `show_in_rest` true expõe os dados que o Rank Math lê. O risco está no campo ACF vazio: ele gera JSON-LD inválido. Mapeie só os campos sempre preenchidos.

Schema para custom post types com ACF e Rank Math é o processo de gerar dados estruturados em JSON-LD para conteúdos fora do padrão post e página, ligando campos do Advanced Custom Fields às propriedades do Schema.org via Rank Math. Um CPT como "Imóvel", "Receita" ou "Curso" não herda o schema certo automaticamente: o Rank Math aplica Article por padrão, que não descreve um produto nem um evento. Definir o @type correto por post type e mapear os campos ACF certos faz o Google entender a entidade. Este guia faz parte do hub de [SEO WordPress da FULL](https://full.services/seo-wordpress/) e mostra o passo a passo real, do registro do CPT ao teste no Rich Results Test.

---

## O que é um custom post type e por que ele precisa de Schema próprio

Um custom post type precisa de schema próprio porque o @type genérico Article descreve mal entidades como imóvel, curso ou receita, e sem dados estruturados o Google trata um anúncio de imóvel como artigo de blog. Um CPT é registrado fora dos padrões post e página, e ao herdar Article perde campos como preço, área e localização. Mapear o schema correto recupera esses campos na busca.

A diferença prática aparece nos rich results. Um CPT "Receita" com schema `Recipe` pode exibir tempo de preparo, calorias e nota de avaliação direto na SERP; o mesmo conteúdo sem schema vira um link azul comum. Nos tickets que chegam à FULL sobre Rank Math, a confusão mais comum é o CPT com ACF PRO que nasce com o @type errado herdado da configuração global. O [custom post type](https://full.services/glossario/custom-post-type/) só vira entidade rica quando o JSON-LD descreve o que ele realmente é.

<p class="wp-caption-text">Legenda: o teste confirma que cada campo ACF mapeado chegou ao JSON-LD final.</p>

## Quando vale a pena adicionar Schema a um CPT

Vale adicionar schema a um custom post type quando ele representa uma entidade que o Google sabe destacar (produto, receita, curso, evento, imóvel) e tem campos ACF que viram rich results. Não vale quando o CPT é só um agrupamento interno sem dado estruturado, já coberto por Article ou WebPage. O critério é simples: existe um @type do Schema.org que descreve melhor que Article?

Use este teste de decisão antes de investir o tempo. Diga SIM ao schema se o CPT tem campos de preço, avaliação, data ou ingrediente que aparecem em rich results, e se você publica vários itens do mesmo tipo. Diga NÃO se o CPT tem um ou dois itens fixos, sem campos estruturados, ou se nenhum @type do Schema.org descreve a entidade melhor que o padrão. Forçar um `Product` num CPT sem preço só polui o JSON-LD e atrai aviso no Rich Results Test, sem ganho de SERP.

## Pré-requisitos: O que ter antes do passo 1

Antes de configurar o schema para custom post types com ACF e Rank Math você precisa de três peças funcionando juntas, e a ausência de qualquer uma trava o JSON-LD na metade. O ACF PRO entrega o `get_field` e os grupos de campos; o Rank Math emite o JSON-LD; e o CPT precisa existir com `show_in_rest` ativo. Sem o REST exposto, o Rank Math não enxerga os valores dos campos.

Checklist de prontidão antes de começar:

- ACF PRO instalado e ativo (o `get_field` é a fonte dos valores).
- Rank Math instalado, com o módulo Schema habilitado no painel.
- Um CPT registrado via `register_post_type` com `show_in_rest` true.
- Pelo menos um grupo de campos ACF associado ao CPT.
- Conteúdo real publicado no CPT (campos preenchidos, não rascunho vazio).
- Acesso ao [Rich Results Test](https://search.google.com/test/rich-results) do Google para validar.
- Permissão de administrador para editar o schema por post type.

Pense no conjunto como uma linha de montagem: o CPT é a esteira, o ACF coloca as peças e o Rank Math monta o pacote final que o Google lê. Se a esteira não estiver ligada ao REST, as peças nunca chegam ao pacote.

## Como configurar o Schema do custom post type em 5 passos

Configurar o schema para custom post types com ACF e Rank Math segue cinco passos, do registro do CPT ao teste no Google, e respeitar a ordem evita o erro mais comum: mapear um campo que ainda não existe. Cada passo isola uma etapa, do `register_post_type` ao Rich Results Test. Publique antes um item com todos os campos preenchidos, porque o teste depende de dados reais.

<table id="etapas-schema-cpt-acf-rank-math">
  <caption>Schema para CPT com ACF e Rank Math: etapas, objetivo e validação</caption>
  <thead>
    <tr>
      <th scope="col">Etapa</th>
      <th scope="col">Objetivo</th>
      <th scope="col">Check de validação</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Registrar o CPT</th>
      <td>Expor o post type no REST</td>
      <td>show_in_rest true no register_post_type</td>
    </tr>
    <tr>
      <th scope="row">Mapear campos ACF</th>
      <td>Listar os campos por nome</td>
      <td>get_field retorna valor não vazio</td>
    </tr>
    <tr>
      <th scope="row">Escolher o @type</th>
      <td>Definir schema por post type</td>
      <td>@type compatível com a entidade</td>
    </tr>
    <tr>
      <th scope="row">Mapear ACF para propriedades</th>
      <td>Ligar campo a propriedade</td>
      <td>Variável do Rank Math resolve o campo</td>
    </tr>
    <tr>
      <th scope="row">Testar no Google</th>
      <td>Confirmar JSON-LD válido</td>
      <td>Rich Results Test sem erros</td>
    </tr>
  </tbody>
</table>

### Passo 1: Registre o CPT com suporte a REST

Confirme que o `register_post_type` do seu CPT tem `'show_in_rest' => true`, porque sem o REST exposto o Rank Math não lê os campos ACF ao montar o schema. Esse argumento já é padrão em CPTs criados pelo editor de blocos, mas costuma faltar em registros antigos feitos via código. Abra o arquivo do tema ou plugin onde o CPT é registrado e cheque o array de argumentos. A referência completa está nas [WordPress Developer Docs](https://developer.wordpress.org/reference/functions/register_post_type/). Se o CPT veio de um plugin de terceiros, use o filtro `register_post_type_args` antes de editar o core do plugin.

### Passo 2: Mapeie os campos ACF do post type

Liste o nome exato (o "Field Name", não o rótulo) de cada campo ACF do CPT, porque é esse nome que o Rank Math usa nas variáveis. Um CPT "Imóvel" típico tem campos como `preco`, `area_m2`, `quartos` e `endereco`. Anote quais estão SEMPRE preenchidos e quais são opcionais: só os obrigatórios devem virar propriedades do schema, senão o JSON-LD quebra quando o campo vier vazio. O `get_field('preco')` retorna o valor no PHP, e o Rank Math expõe o mesmo dado pela variável de campo. Padronize os nomes em snake_case sem acento para evitar conflito na variável.

### Passo 3: Escolha o @type de Schema por post type

Defina, nas configurações de schema do Rank Math, um @type padrão para o post type inteiro, em vez de configurar artigo por artigo. O Rank Math permite atribuir um schema default por post type nas opções de titles e schema: um CPT "Receita" recebe `Recipe`, um "Curso" recebe `Course` e um "Imóvel" pode usar `Product` ou `RealEstateListing`. Consulte o vocabulário em [Schema.org](https://schema.org/docs/full.html) para confirmar qual @type descreve sua entidade. Se nenhum tipo encaixa 100%, escolha o mais próximo e complemente com propriedades extras, em vez de forçar Article.

### Passo 4: Mapeie cada campo ACF para uma propriedade

Ligue cada campo ACF a uma propriedade do @type escolhido usando as variáveis do Rank Math, que aceitam referência a campos personalizados no formato de variável de custom field. Na propriedade `price` do schema `Product`, em vez de digitar um valor fixo, você insere a variável que aponta para o campo ACF `preco`; o Rank Math resolve o valor em cada post na renderização. Faça o mesmo para `name`, `description` e demais propriedades obrigatórias. Esse mapeamento é o coração do schema de CPT: é onde o dado dinâmico vira JSON-LD. Mapeie primeiro as propriedades requeridas pelo Schema.org e só depois as recomendadas.

### Passo 5: Teste no rich results test do Google

Cole a URL de um post do CPT no Rich Results Test e confirme que o @type aparece com todas as propriedades preenchidas e zero erro. A ferramenta mostra o JSON-LD renderizado e sinaliza propriedade obrigatória ausente em vermelho; o aviso amarelo costuma ser propriedade recomendada faltando, que não bloqueia o rich result. Se um valor sair vazio, volte ao passo 2 e cheque se o campo ACF estava preenchido naquele post. Depois de validar, registre a URL no [Rank Math](https://full.services/glossario/rank-math/) e acompanhe a indexação no Search Console. Teste pelo menos dois posts, porque um campo opcional vazio só aparece em alguns.

<p class="wp-caption-text">Legenda: cada passo alimenta o seguinte, e um campo vazio no início quebra o JSON-LD no fim.</p>

## Resumo técnico: Do campo ACF ao json-ld

O fluxo completo do schema de CPT vai do campo ACF preenchido até o JSON-LD que o Google lê, em uma cadeia de cinco elos onde o elo fraco derruba tudo. O dado nasce no `get_field`, passa pela variável do Rank Math, é colado na propriedade do @type escolhido e sai renderizado no `<head>` da página, onde o Rich Results Test o valida. Cada etapa depende da anterior estar correta.

Em ordem direta, a cadeia é esta: o CPT registrado com `show_in_rest` true expõe o post type; o ACF PRO grava os valores nos campos; o nome exato do campo vira a variável; o @type por post type define quais propriedades existem; o mapeamento liga campo a propriedade; e o Rich Results Test confirma o JSON-LD. Se um campo obrigatório vier vazio, o elo quebra e a propriedade sai em branco. Por isso a regra de ouro é mapear só campos sempre preenchidos para propriedades requeridas.

## Erros comuns ao gerar Schema de CPT com ACF e Rank Math

Os três erros mais comuns no schema de CPT com ACF e Rank Math são o JSON-LD que não renderiza, o campo ACF vazio que invalida o bloco e o @type errado herdado da configuração global. O primeiro quase sempre é cache: o Rank Math gerou o schema, mas o CDN serviu a versão antiga. Limpe o cache do site e do CDN antes de concluir.

O segundo erro é o mais traiçoeiro. Quando você mapeia um campo ACF opcional para uma propriedade obrigatória e ele vem vazio num post específico, o Rank Math emite a propriedade em branco e o Rich Results Test reprova só naquele item. A correção é mapear apenas campos sempre preenchidos, ou definir um valor padrão. O terceiro erro, o @type errado, acontece quando o CPT herda o schema default global (Article): o post valida como artigo, mas perde os campos ricos da entidade real. Confira o @type no Rich Results Test, não só no painel.

## Como validar o Schema do CPT no Search Console

Validar o schema de CPT em produção exige cruzar o Rich Results Test com o relatório de aprimoramentos do Search Console, porque o teste vê uma URL e o Search Console vê o site inteiro com o tempo. O Rich Results Test confirma que o JSON-LD de um post está correto; o Search Console mostra quantas URLs do CPT o Google reconheceu e quais têm erro.

No relatório de aprimoramentos, o Google agrupa os resultados pelo tipo de rich result detectado, então um CPT "Receita" aparece sob o item de receitas, com a contagem de itens válidos e com erro. Uma queda súbita de itens válidos costuma indicar campo ACF que parou de ser preenchido numa atualização de template, ou um campo renomeado que esvaziou o mapeamento. Por isso, depois de qualquer mudança em campos, revalide pelo menos um post no Rich Results Test. Para aprofundar a configuração geral, o [guia de SEO para WordPress da FULL](https://full.services/guias/guia-de-seo-para-wordpress) reúne os passos de base.

## Como a FULL faz isso em escala

A FULL padroniza esse stack de schema porque gerencia mais de 150 mil sites WordPress, e os CPTs com ACF aparecem muito em sites de agência, onde repetir o mapeamento campo a campo em dezenas de instalações vira gargalo. Em vez de licença avulsa, o ACF PRO e o Rank Math PRO entram no bundle e o padrão por post type fica replicável entre sites.

No plano PRO da FULL, por [R$849](https://full.services/planos), o ACF PRO e o Rank Math PRO já vêm no pacote para até dez sites, o que dá R$85 por site em vez de pagar cada licença separada. Para uma agência que mantém vários CPTs com schema, isso troca um custo recorrente espalhado por um padrão único, e o mesmo mapeamento de campo para propriedade pode ser reusado de um site para outro sem refazer a configuração do zero a cada projeto.

## Checklist final do Schema de CPT

O checklist final do schema de CPT confirma, em uma passada, que cada elo da cadeia está fechado antes de você dar o trabalho por concluído. Rode esta lista depois do passo 5 e de qualquer alteração futura nos grupos de campos ACF, porque é justamente após uma edição de campo que o schema costuma esvaziar em silêncio.

Antes de declarar pronto, confirme:

- O `register_post_type` tem `show_in_rest` true.
- O @type escolhido descreve a entidade melhor que Article.
- Só campos sempre preenchidos viram propriedades obrigatórias.
- O nome do campo ACF bate com a variável do Rank Math.
- O cache do site e do CDN foi limpo após gerar o schema.
- O Rich Results Test passou em dois posts diferentes, sem erro.
- O relatório de aprimoramentos do Search Console está sendo acompanhado.

Se qualquer item falhar, volte ao passo correspondente antes de publicar mais itens do CPT.

## Perguntas frequentes sobre Schema para custom post types com ACF e Rank Math

<details>
  <summary>Por que o schema do meu CPT não aparece no Rich Results Test?</summary>
  <p>O schema some quase sempre por cache: o Rank Math gerou o JSON-LD, mas o plugin de cache ou o CDN entregou a versão antiga da página, sem o bloco novo. Limpe o cache do site e do CDN, depois recarregue o teste. Se ainda não aparecer, confirme que o módulo Schema do Rank Math está ativo e que o CPT tem show_in_rest true no register_post_type, sem o qual os campos ACF nunca chegam ao schema.</p>
</details>

<details>
  <summary>É possível gerar schema para um CPT sem o ACF PRO instalado?</summary>
  <p>Sim, é possível, mas com limite claro: o Rank Math gera schema básico para qualquer post type usando os campos nativos do WordPress, como título e conteúdo. O ACF PRO é o que entrega os campos personalizados (preço, área, nota) que viram propriedades ricas do Schema.org. Sem ele, você não tem de onde puxar esses dados, e o schema fica restrito às propriedades genéricas. Para um CPT com dados estruturados próprios, o ACF PRO é o pré-requisito que abre o mapeamento campo a campo.</p>
</details>

<details>
  <summary>Por que um campo ACF vazio quebra o JSON-LD do schema?</summary>
  <p>O campo vazio quebra porque o Rank Math monta o JSON-LD com a propriedade declarada, mas sem valor, e o Rich Results Test reprova propriedade obrigatória em branco. Acontece quando você mapeia um campo opcional para uma propriedade requerida do @type. A solução é mapear só campos sempre preenchidos para propriedades obrigatórias, ou definir um valor padrão no ACF. Teste mais de um post do CPT, porque o campo opcional vazio só aparece em alguns itens e passa despercebido no resto.</p>
</details>

<details>
  <summary>Como confirmar que o Google indexou o schema do meu custom post type?</summary>
  <p>Confirme cruzando duas fontes: o Rich Results Test valida uma URL na hora, e o relatório de aprimoramentos do Search Console mostra, com alguns dias de atraso, quantas URLs do CPT o Google reconheceu e quais têm erro. O Search Console agrupa os itens pelo tipo de rich result, então o CPT aparece sob a entidade detectada, com a contagem de válidos. Uma queda de itens válidos costuma sinalizar campo ACF renomeado que esvaziou o mapeamento do Rank Math.</p>
</details>

## Próximos passos para estruturar seus cpts

Adicionar schema para custom post types com ACF e Rank Math é, no fundo, traduzir os campos que você já tem em uma linguagem que o Google entende: registre o CPT com REST ativo, mapeie só os campos sempre preenchidos, escolha o @type que descreve a entidade de verdade e teste cada mudança no Rich Results Test antes de comemorar. O erro do campo vazio é o que mais derruba schema em produção, então revalide depois de qualquer alteração nos grupos de campos. Para padronizar o ACF PRO e o Rank Math em vários sites sem licença avulsa, conheça os [planos da FULL](https://full.services/planos), e para continuar aprendendo, o [FULL Academy](https://full.services/academy/) reúne os tutoriais de WordPress em um só lugar.


---

## Metadados Estruturados (Schema.org)

```json-ld
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#article",
      "headline": "Schema para custom post types com ACF e Rank Math",
      "description": "Schema para custom post types com ACF e Rank Math é o processo de gerar dados estruturados em JSON-LD para conteúdos fora do padrão post e página, ligando campos do Advanced Custom Fields às proprieda",
      "url": "https://full.services/schema-custom-post-types-acf-rank-math/",
      "datePublished": "2026-06-18T09:00:00-03:00",
      "dateModified": "2026-06-18T09:00:00-03:00",
      "inLanguage": "pt-BR",
      "articleSection": "SEO WordPress",
      "keywords": [
        "schema para custom post types com ACF e Rank Math",
        "WordPress",
        "Web Development"
      ],
      "author": {
        "@id": "https://full.services/#person-clayton"
      },
      "publisher": {
        "@id": "https://full.services/#org"
      },
      "about": [
        {
          "@type": "Thing",
          "name": "WordPress",
          "@id": "https://www.wikidata.org/wiki/Q13166",
          "sameAs": "https://www.wikidata.org/wiki/Q13166"
        },
        {
          "@type": "Thing",
          "name": "Web Development"
        }
      ],
      "mentions": [
        {
          "@type": "Organization",
          "name": "WordPress",
          "url": "https://wordpress.org/",
          "@id": "https://www.wikidata.org/wiki/Q13166",
          "sameAs": "https://www.wikidata.org/wiki/Q13166"
        }
      ],
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://full.services/schema-custom-post-types-acf-rank-math/"
      },
      "wordCount": 2947,
      "citation": [
        {
          "@type": "CreativeWork",
          "name": "Schema.org",
          "url": "https://schema.org/docs/full.html",
          "publisher": {
            "@type": "Organization",
            "name": "Schema.org"
          }
        },
        {
          "@type": "CreativeWork",
          "name": "WordPress Developer Docs",
          "url": "https://developer.wordpress.org/reference/functions/register_post_type/",
          "publisher": {
            "@type": "Organization",
            "name": "WordPress Developer Docs"
          }
        },
        {
          "@type": "CreativeWork",
          "name": "Google Rich Results Test",
          "url": "https://search.google.com/test/rich-results",
          "publisher": {
            "@type": "Organization",
            "name": "Google Rich Results Test"
          }
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#faq",
      "isPartOf": {
        "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#article"
      },
      "mainEntity": [
        {
          "@type": "Question",
          "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#faq-q1",
          "name": "Por que o schema do meu CPT não aparece no Rich Results Test?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "O schema some quase sempre por cache: o Rank Math gerou o JSON-LD, mas o plugin de cache ou o CDN entregou a versão antiga da página, sem o bloco novo. Limpe o cache do site e do CDN, depois recarregue o teste. Se ainda não aparecer, confirme que o módulo Schema do Rank Math está ativo e que o CPT tem show_in_rest true no register_post_type, sem o qual os campos ACF nunca chegam ao schema.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#faq-q2",
          "name": "É possível gerar schema para um CPT sem o ACF PRO instalado?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sim, é possível, mas com limite claro: o Rank Math gera schema básico para qualquer post type usando os campos nativos do WordPress, como título e conteúdo. O ACF PRO é o que entrega os campos personalizados (preço, área, nota) que viram propriedades ricas do Schema.org. Sem ele, você não tem de onde puxar esses dados, e o schema fica restrito às propriedades genéricas. Para um CPT com dados estruturados próprios, o ACF PRO é o pré-requisito que abre o mapeamento campo a campo.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#faq-q3",
          "name": "Por que um campo ACF vazio quebra o JSON-LD do schema?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "O campo vazio quebra porque o Rank Math monta o JSON-LD com a propriedade declarada, mas sem valor, e o Rich Results Test reprova propriedade obrigatória em branco. Acontece quando você mapeia um campo opcional para uma propriedade requerida do @type. A solução é mapear só campos sempre preenchidos para propriedades obrigatórias, ou definir um valor padrão no ACF. Teste mais de um post do CPT, porque o campo opcional vazio só aparece em alguns itens e passa despercebido no resto.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        },
        {
          "@type": "Question",
          "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#faq-q4",
          "name": "Como confirmar que o Google indexou o schema do meu custom post type?",
          "inLanguage": "pt-BR",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Confirme cruzando duas fontes: o Rich Results Test valida uma URL na hora, e o relatório de aprimoramentos do Search Console mostra, com alguns dias de atraso, quantas URLs do CPT o Google reconheceu e quais têm erro. O Search Console agrupa os itens pelo tipo de rich result, então o CPT aparece sob a entidade detectada, com a contagem de válidos. Uma queda de itens válidos costuma sinalizar campo ACF renomeado que esvaziou o mapeamento do Rank Math.",
            "author": {
              "@id": "https://full.services/#org"
            }
          }
        }
      ]
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://full.services/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "SEO WordPress",
          "item": "https://full.services/seo-wordpress/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Schema para custom post types com ACF e Rank Math",
          "item": "https://full.services/schema-custom-post-types-acf-rank-math/"
        }
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://full.services/#org",
      "name": "FULL Services",
      "url": "https://full.services",
      "logo": {
        "@type": "ImageObject",
        "url": "https://full.services/wp-content/uploads/full-services-logo.png",
        "width": 200,
        "height": 60
      },
      "sameAs": [
        "https://www.instagram.com/fullservicesbr",
        "https://www.facebook.com/fullservices.br",
        "https://www.linkedin.com/company/fullservicesbr/"
      ],
      "knowsAbout": [
        "WordPress",
        "WordPress Hosting",
        "Web Development",
        "Performance Optimization",
        "WordPress Security",
        "SEO para WordPress"
      ],
      "award": [
        "Gold Medal - The WP Weekly Awards 2023 (https://thewpweekly.com/awards-2023/)",
        "Gold Medal - The WP Weekly Awards 2024 (https://thewpweekly.com/awards-2024/)"
      ],
      "hasCredential": {
        "@type": "EducationalOccupationalCredential",
        "credentialCategory": "certification",
        "name": "CVE Numbering Authority (CNA)",
        "description": "Autoridade de numeração de vulnerabilidades (CVE) para o ecossistema WordPress, autorizada a atribuir IDs CVE. Certificação válida desde 2022-05-03, com abrangência global.",
        "url": "https://www.cve.org/PartnerInformation/ListofPartners/partner/FULL",
        "recognizedBy": {
          "@type": "Organization",
          "name": "CISA — Cybersecurity and Infrastructure Security Agency",
          "url": "https://www.cisa.gov/",
          "sameAs": "https://www.cisa.gov/"
        }
      }
    },
    {
      "@type": "Person",
      "@id": "https://full.services/#person-clayton",
      "name": "Clayton Margiotti",
      "givenName": "Clayton",
      "familyName": "Margiotti",
      "jobTitle": "Fundador e CEO da FULL Services",
      "description": "Fundador e CEO da FULL Services, plataforma WordPress SaaS com 50 mil clientes e 150 mil sites conectados, e anchor do ecossistema Elevor Global. Em 2024 conduziu a FULL a se tornar a primeira e unica empresa brasileira aprovada como CVE Numbering Authority sob a CISA (DHS/EUA). Mais de 20 anos construindo empresas digitais, com 13+ reconhecimentos internacionais (Facebook, GPTW, ONU, RD Summit).",
      "url": "https://full.services/sobre-nos/",
      "image": "https://full.services/wp-content/uploads/2026/05/clayton-margiotti.jpg",
      "sameAs": [
        "https://www.linkedin.com/in/cmargiotti/"
      ],
      "knowsAbout": [
        "Artificial Intelligence",
        "Cybersecurity",
        "CVE Program",
        "WordPress Enterprise",
        "SaaS Platforms",
        "Digital Infrastructure",
        "Technology Entrepreneurship",
        "Company Building",
        "Business Leadership",
        "Digital Growth"
      ],
      "hasOccupation": {
        "@type": "Occupation",
        "name": "Fundador e CEO",
        "occupationalCategory": "11-1011.00"
      },
      "knowsLanguage": [
        {
          "@type": "Language",
          "name": "Portuguese",
          "alternateName": "pt-BR"
        },
        {
          "@type": "Language",
          "name": "English",
          "alternateName": "en"
        }
      ],
      "memberOf": {
        "@type": "Organization",
        "name": "CVE Numbering Authorities",
        "url": "https://www.cve.org/",
        "sameAs": "https://www.cve.org/"
      },
      "alumniOf": [
        {
          "@type": "EducationalOrganization",
          "name": "Global Scaling Academy (Blitzscaling Program)",
          "url": "https://www.blitzscalingacademy.com"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Esade",
          "url": "https://www.esade.edu"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Business School Sao Paulo (BSP)",
          "url": "https://bsp.edu.br/"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Tera",
          "url": "https://somostera.com"
        },
        {
          "@type": "EducationalOrganization",
          "name": "Le Wagon",
          "url": "https://www.lewagon.com"
        },
        {
          "@type": "EducationalOrganization",
          "name": "FIAP",
          "url": "https://www.fiap.com.br"
        },
        {
          "@type": "EducationalOrganization",
          "name": "PUCRS",
          "url": "https://online.pucrs.br/"
        }
      ],
      "award": [
        "Digital Disruptor – Engaging Experiences Master (Globant, 2021)",
        "Maior ROI do e-commerce brasileiro – Letrissimas (Facebook, 2019)",
        "1º lugar – Melhores Empresas para Trabalhar no Brasil – Eleva Digital (Great Place to Work, 2018)",
        "Case global de educacao no Facebook – Metodo SUPERA (Facebook, 2017)",
        "Maquina de Geracao de Leads, Agencia do Ano (RD Summit / RD Station, 2015)",
        "Monthly Recurring Revenue, top performance (RD Summit / RD Station, 2015)",
        "Quality/Efficiency – Entrepreneurship Training (UNCTAD / PNUD-ONU, 2010)"
      ],
      "subjectOf": [
        {
          "@type": "NewsArticle",
          "url": "https://www.globant.com/news/globant-reveals-inaugural-digital-disruptors-award-winners",
          "publisher": {
            "@type": "Organization",
            "name": "Globant"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://www.prnewswire.com/news-releases/letrissimas-com-e-destaque-do-e-commerce-brasileiro-com-maior-roi-de-2018-877517801.html",
          "publisher": {
            "@type": "Organization",
            "name": "PR Newswire"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://www.segs.com.br/seguros/102599-gestao-de-pessoas-garante-mais-lucro-as-empresas",
          "publisher": {
            "@type": "Organization",
            "name": "Segs"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://franquiaeducacional.com/negocios-inovadores-facebook-elege-supera-case-mundial-de-educacao",
          "publisher": {
            "@type": "Organization",
            "name": "Franquia Educacional"
          }
        },
        {
          "@type": "NewsArticle",
          "url": "https://acontecendoaqui.com.br/marketing/resultados-digitais-divulga-vencedores-do-premio-agencias-de-resultados-2015-durante-o-rd",
          "publisher": {
            "@type": "Organization",
            "name": "Acontecendo Aqui"
          }
        }
      ],
      "worksFor": {
        "@type": "Organization",
        "@id": "https://full.services/#org"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#howto",
      "isPartOf": {
        "@id": "https://full.services/schema-custom-post-types-acf-rank-math/#article"
      },
      "name": "Passo a passo: schema para custom post types com ACF e Rank Math",
      "description": "Guia passo a passo sobre schema para custom post types com ACF e Rank Math para WordPress.",
      "url": "https://full.services/schema-custom-post-types-acf-rank-math/",
      "totalTime": "PT30M",
      "author": {
        "@type": "Organization",
        "@id": "https://full.services/#org"
      },
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Passo 1: Registre o CPT com suporte a REST",
          "text": "Confirme que o `register_post_type` do seu CPT tem `'show_in_rest' => true`, porque sem o REST exposto o Rank Math não lê os campos ACF ao montar o schema. Esse argumento já é padrão em CPTs criados pelo editor de blocos, mas costuma faltar em registros antigos feitos via código. Abra o arquivo do tema ou plugin onde o CPT é registrado e cheque o array de argumentos. A referência completa está nas <a href="https://developer.wordpress.org/reference/functions/register_post_type/" rel="noopener" target="_blank">WordPress Developer Docs</a>. Se o CPT veio de um plugin de terceiros, use o filtro `register_post_type_args` antes de editar o core do plugin."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Passo 2: Mapeie os campos ACF do post type",
          "text": "Liste o nome exato (o "Field Name", não o rótulo) de cada campo ACF do CPT, porque é esse nome que o Rank Math usa nas variáveis. Um CPT "Imóvel" típico tem campos como `preco`, `area_m2`, `quartos` e `endereco`. Anote quais estão SEMPRE preenchidos e quais são opcionais: só os obrigatórios devem virar propriedades do schema, senão o JSON-LD quebra quando o campo vier vazio. O `get_field('preco')` retorna o valor no PHP, e o Rank Math expõe o mesmo dado pela variável de campo. Padronize os nomes em snake_case sem acento para evitar conflito na variável."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Passo 3: Escolha o @type de Schema por post type",
          "text": "Defina, nas configurações de schema do Rank Math, um @type padrão para o post type inteiro, em vez de configurar artigo por artigo. O Rank Math permite atribuir um schema default por post type nas opções de titles e schema: um CPT "Receita" recebe `Recipe`, um "Curso" recebe `Course` e um "Imóvel" pode usar `Product` ou `RealEstateListing`. Consulte o vocabulário em <a href="https://schema.org/docs/full.html" rel="noopener" target="_blank">Schema.org</a> para confirmar qual @type descreve sua entidade. Se nenhum tipo encaixa 100%, escolha o mais próximo e complemente com propriedades extras, em vez de forçar Article."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Passo 4: Mapeie cada campo ACF para uma propriedade",
          "text": "Ligue cada campo ACF a uma propriedade do @type escolhido usando as variáveis do Rank Math, que aceitam referência a campos personalizados no formato de variável de custom field. Na propriedade `price` do schema `Product`, em vez de digitar um valor fixo, você insere a variável que aponta para o campo ACF `preco`; o Rank Math resolve o valor em cada post na renderização. Faça o mesmo para `name`, `description` e demais propriedades obrigatórias. Esse mapeamento é o coração do schema de CPT: é onde o dado dinâmico vira JSON-LD. Mapeie primeiro as propriedades requeridas pelo Schema.org e só depois as recomendadas."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Passo 5: Teste no rich results test do Google",
          "text": "Cole a URL de um post do CPT no Rich Results Test e confirme que o @type aparece com todas as propriedades preenchidas e zero erro. A ferramenta mostra o JSON-LD renderizado e sinaliza propriedade obrigatória ausente em vermelho; o aviso amarelo costuma ser propriedade recomendada faltando, que não bloqueia o rich result. Se um valor sair vazio, volte ao passo 2 e cheque se o campo ACF estava preenchido naquele post. Depois de validar, registre a URL no <a href="https://full.services/glossario/rank-math/">Rank Math</a> e acompanhe a indexação no Search Console. Teste pelo menos dois posts, porque um campo opcional vazio só aparece em alguns. <p class="wp-caption-text">Legenda: cada passo alimenta o seguinte, e um campo vazio no início quebra o JSON-LD no fim.</p> O fluxo completo do schema de CPT vai do campo ACF preenchido até o JSON-LD que o Google lê, em uma cadeia de cinco elos onde o elo fraco derruba tudo. O dado nasce no `get_field`, passa pela variável do Rank Math, é colado na propriedade do @type escolhido e sai renderizado no `<head>` da página, onde o Rich Results Test o valida. Cada etapa depende da anterior estar correta. Em ordem direta, a cadeia é esta: o CPT"
        }
      ]
    }
  ]
}
```
