Como corrigir o schema do Rank Math que não le custom fields do ACF PRO no WordPress
O que é schema do Rank Math sem custom fields do ACF?
O Rank Math schema ACF e a integração entre o Schema Generator do Rank Math e os campos personalizados do Advanced Custom Fields PRO. Em vez de digitar um valor fixo numa propriedade do schema (como preco, autor ou data de evento), você insere a variavel %customfield(nome-do-campo)% e o Rank Math busca esse valor no banco a cada carregamento da página, deixando o JSON-LD dinâmico e sempre atualizado por post.
O ponto que quase todo mundo erra e técnico: o ACF grava o valor de cada campo como um postmeta comum, onde a meta key e exatamente o nome do campo (field name), não o rotulo (label) que aparece no editor. A variavel %customfield(field-name)% do Rank Math le esse postmeta direto pela meta key. Quando o nome dentro da variavel não bate com a meta key real, ou quando o campo guarda um valor serializado (array, objeto, repeater), o Rank Math não consegue extrair um texto valido e a propriedade do schema sai vazia, derrubando a validação do Google.
Como identificar
- No Schema Markup Validator ou no teste de Resultados Aprimorados do Google a propriedade preenchida com %customfield(…)% aparece vazia ou com o valor literal da variavel, em vez do dado do campo.
- O bloco de schema (Article, Product, Event) e gerado, mas o campo que deveria vir do ACF some do JSON-LD final visto no código-fonte da página.
- Mensagem ‘Campo obrigatório ausente’ ou ‘Missing field’ no Search Console para a propriedade ligada ao ACF, mesmo com o campo preenchido no editor.
- Em campos do tipo Repeater, Group ou Relationship a propriedade do schema sai com um valor quebrado como ‘Array’ ou um id numerico em vez do texto esperado.
- Ao trocar o nome do grupo de campos ou do field no ACF, o schema que antes funcionava passa a sair vazio sem nenhum aviso no editor.
Como prevenir
- Padronize os field names do ACF em minusculas com underscore e documente cada um, para sempre usar o nome certo dentro de %customfield(field-name)% sem depender do rotulo.
- Antes de ligar um campo ao schema, confirme que ele guarda texto simples; para Repeater, Group, Relationship e Object, planeje um meta espelho desde o inicio.
- Evite renomear field names de campos já ligados ao schema; se precisar, atualize a variavel no Schema Generator no mesmo deploy para não deixar a propriedade vazia.
- Valide o JSON-LD no Schema Markup Validator a cada mudanca de campos ou de template de schema, antes de publicar, para pegar propriedade vazia cedo.
Causa
- A variavel usa o rotulo (label) do campo em vez do field name real do ACF: o Rank Math le a meta key, que corresponde ao field name, entao %customfield(Preco do Produto)% falha enquanto %customfield(preco_produto)% funciona.
- O campo ACF guarda um valor serializado (Repeater, Group, Relationship, ou Select múltiplo): o %customfield% le o postmeta cru e devolve um array serializado, que não vira texto valido na propriedade do schema.
- O field tem Return Format definido como Object ou Array (comum em Image, Post Object e Taxonomy): o postmeta guarda apenas o id, entao a variavel retorna um número em vez do valor legivel esperado pelo schema.
- O grupo de campos do ACF não casa com o post sendo renderizado por regra de localizacao, ou o campo esta vazio naquele post específico, fazendo o postmeta não existir e a variavel retornar string vazia.
- O campo pertence a uma options page do ACF (acf_add_options_page), cujos valores ficam em option e não em postmeta do post, fora do alcance da variavel %customfield% que so le meta keys do post atual.
Como resolver
- Descubra o field name real do campo no ACF: Abra o grupo de campos no ACF e copie o valor do campo Nome (Field Name), não o Rotulo (Label). E esse nome, em minusculas com underscore, que vira a meta key no banco e que o Rank Math precisa receber dentro da variavel.
Painel WP -> ACF -> Grupos de Campos -> abra o grupo Clique no campo e anote o valor do campo 'Nome do Campo' (Field Name) - Use a variavel customfield com o field name correto no Schema Generator: No editor do post, abra a aba Schema do Rank Math, edite o template e na propriedade desejada insira a variavel com o field name exato. Conforme a documentação do Rank Math, a sintaxe e %customfield(field-name)%, trocando field-name pelo nome real do campo.
Editor do post -> Rank Math -> Schema -> Editar o schema Na propriedade (ex.: author, price), insira: %customfield(field_name)% Substitua field_name pelo nome anotado no passo 1 - Confirme o valor cru gravado no postmeta: Para ter certeza de que a meta key existe e guarda texto simples, confira o valor cru do campo no post. Se o retorno for um array serializado (comeca com a:), o campo não serve direto para o schema e precisa ser exposto por um campo auxiliar.
Painel WP -> Ferramentas -> via plugin de inspecao de postmeta, busque a meta key do passo 1 Confirme que o valor e um texto simples, não algo iniciado por 'a:1:{' (array serializado) - Para campos serializados, exponha um meta espelho em texto: Repeater, Group, Relationship e campos com Return Format Object não saem como texto pela variavel. Crie um postmeta auxiliar simples com o valor já formatado via hook acf/save_post e aponte o %customfield% para essa meta key espelho.
Adicione o snippet PHP da seção de código ao functions.php do tema filho ou a um plugin próprio Salve o post para gerar a meta key espelho No Schema Generator, aponte a propriedade para %customfield(meta_espelho)% - Valide o JSON-LD no Schema Markup Validator: Depois do ajuste, rode a URL do post no validador para confirmar que a propriedade saiu preenchida com o dado do ACF. O próprio Rank Math recomenda validar o resultado antes de considerar o schema correto.
Abra o Schema Markup Validator (validator.schema.org) e cole a URL do post Confirme que a propriedade ligada ao ACF mostra o valor do campo, não a variavel literal
<?php
// Espelha um campo ACF serializado (Repeater/Group/Object) em um postmeta de texto
// simples, para o Rank Math ler via %customfield(rm_autor_nome)% no Schema Generator.
add_action( 'acf/save_post', 'full_acf_espelho_schema', 20 );
function full_acf_espelho_schema( $post_id ) {
if ( ! function_exists( 'get_field' ) ) {
return;
}
// 'autor' = field name do ACF; ajuste para o seu campo.
$valor = get_field( 'autor', $post_id );
// Se for array/objeto (Post Object, Relationship), extrai um texto legivel.
if ( is_array( $valor ) ) {
$valor = isset( $valor['post_title'] ) ? $valor['post_title'] : reset( $valor );
} elseif ( is_object( $valor ) && isset( $valor->post_title ) ) {
$valor = $valor->post_title;
}
// Grava a meta key espelho que o Rank Math vai consumir.
update_post_meta( $post_id, 'rm_autor_nome', sanitize_text_field( (string) $valor ) );
}














