Criar custom fields WordPress para consultoria SEO em Recife gerenciar conteudo

Aprenda a criar custom fields WordPress para consultoria SEO em Recife gerenciar conteúdo com ACF e metaboxes nativos. Guia prático para desenvolvedores.

Uma consultoria SEO em Recife atende clientes de setores variados — imobiliárias no Boa Viagem, clínicas no Derby, e-commerces no Pina. Cada segmento exige dados estruturados diferentes: imóveis precisam de metragem e quartos; clínicas, de CRM e especialidades; lojas, de SKU e preço. O desafio não é criar campos, mas organizar um sistema que a equipe de conteúdo consiga operar sem suporte técnico constante.

O WordPress nativo oferece title, editor, excerpt e custom fields básicos. Para SEO profissional, isso é insuficiente. Precisamos de campos para schema markup, canonical personalizado, noindex seletivo, FAQ estruturado, breadcrumb customizado e dados de negócio local (NAP). A solução passa por custom fields bem arquitetados, seja via Advanced Custom Fields (ACF) ou metaboxes registrados via código.

Este guia mostra como estruturar, validar e manter custom fields para uma operação SEO escalável. Cobriremos decisão de ferramenta, modelagem de dados, integração com plugins SEO, performance e governança de conteúdo — tudo com foco em desenvolvedores que entregam sites para agências gerenciarem.

Escolha da ferramenta: ACF PRO vs metaboxes nativos

A decisão impacta manutenção, onboarding da equipe e custo de licença. O ACF PRO (249 reais/ano para sites ilimitados) acelera desenvolvimento com interface visual, field groups exportáveis em JSON, blocos Gutenberg nativos e API robusta. Metaboxes nativos exigem PHP puro, mas zeram dependências externas e reduzem superfície de ataque.

Para a consultoria de Recife, o ACF PRO costuma compensar: a equipe de conteúdo já conhece a interface, field groups versionados em JSON entram no Git, e blocos Gutenberg permitem editar schema FAQ direto no editor visual. Se o projeto for interno, sem equipe não-técnica, metaboxes nativos com add_meta_box e save_post são suficientes.

Critério prático: se houver campos repeater, gallery, flexible content ou relationship — use ACF. Se forem apenas text, textarea, select, checkbox, radio — metaboxes nativos resolvem. Muitos projetos híbridos usam ACF para campos complexos e metaboxes leves para flags simples (noindex, nofollow, canonical).

Modelagem de field groups por tipo de conteúdo

Organize field groups espelhando a arquitetura da informação do site. Não crie um grupo monolítico “SEO”. Separe por post type e necessidade:

  • Páginas institucionais: schema Organization/LocalBusiness, NAP, horário, redes sociais, logo, imagem de fallback og:image.
  • Posts de blog: schema Article/BlogPosting, author bio estendido, FAQ repeater, table of contents toggle, related posts manual.
  • Imóveis (CPT): schema Product/RealEstateListing, metragem, quartos, suítes, vagas, condomínio, IPTU, características repeater, galeria.
  • Serviços médicos (CPT): schema MedicalBusiness/Service, CRM, especialidades, convênios, telemedicina, agendamento online.
  • Produtos (WooCommerce): schema Product/Offer, GTIN, MPN, marca, disponibilidade, preço de oferta, FAQ por produto.
  • Opções globais (Options Page ACF): configurações de site: logo, favicon, Google Search Console, Bing Webmaster, redes sociais, scripts de head/body.

Cada grupo usa regras de localização (Location Rules) para aparecer apenas onde faz sentido. Exemplo: grupo “SEO Imóvel” só em post_type = imovel. Grupo “SEO Global” só na Options Page. Isso evita poluição na tela de edição e reduz erros de preenchimento.

Integração com plugins SEO: evitar conflitos de meta tags

Yoast SEO e Rank Math já escrevem title, meta description, canonical, og:, twitter: e schema padrão. Seus custom fields não devem duplicar — devem estender ou sobrescrever seletivamente.

Estratégia recomendada: use filtros dos plugins SEO para injetar valores dos seus custom fields. No Yoast, wpseo_title, wpseo_metadesc, wpseo_canonical, wpseo_opengraph_*. No Rank Math, rank_math/frontend/title, rank_math/frontend/description, rank_math/frontend/canonical.

Exemplo prático: campo seo_canonical_custom no ACF. No functions.php:

add_filter( 'wpseo_canonical', function( $canonical ) {
    $custom = get_field( 'seo_canonical_custom' );
    return $custom ? esc_url( $custom ) : $canonical;
} );

Para schema markup, o ACF PRO permite criar blocos Gutenberg que geram JSON-LD válido. Alternativamente, use o filtro wpseo_schema_graph (Yoast) ou rank_math/snippet/rich_snippet_*_entity (Rank Math) para injetar dados dos seus campos repeater (FAQ, Breadcrumb, HowTo).

Regra de ouro: nunca desative o schema nativo do plugin SEO. Complemente. Conflitos geram erros no Search Console e Rich Results Test.

Performance: consultas meta_query e cache inteligente

Campos personalizados viram linhas na tabela wp_postmeta. Consultas meta_query em loops (ex: listar imóveis com 3 quartos e condomínio < 2000) são lentas em escala. Soluções:

  1. Índices customizados: crie tabela auxiliar com colunas indexadas (quartos, valor_condominio) sincronizada via save_post. Consulte essa tabela via $wpdb em vez de meta_query.
  2. Transients para listagens: cacheie o HTML do loop por 5-15 minutos com set_transient( 'imoveis_lista_' . $args_hash, $html, 900 ). Invalide no save_post do CPT imovel.
  3. ACF load_field condicional: carregue choices de select/relationship via AJAX só quando o campo for expandido, não no load da página.
  4. Evite get_field() em loops: use get_post_meta( $post->ID, 'chave', true ) direto — evita overhead do ACF.

Para a consultoria de Recife, com ~500 imóveis e 200 posts/mês, transients + invalidação no save_post resolvem 90% dos gargalos. Índices customizados entram quando a listagem passa de 2s no TTFB.

Governança de conteúdo: documentação e versionamento

A equipe de conteúdo da consultoria não é técnica. Eles precisam saber: qual campo preencher, formato esperado, limite de caracteres, impacto no SEO.

Implemente três camadas:

  1. Instruções no ACF: use “Instructions” em cada campo. Exemplo: “Título SEO (max 60 chars). Aparece no e og:title. Se vazio, usa título do post.”</li> <li><strong>Documentação viva no Notion/Confluence</strong>: guia com prints, exemplos preenchidos, checklist de publicação. Vincule no menu admin via <code>add_menu_page</code> ou plugin “Admin Menu Editor”.</li> <li><strong>Field groups em JSON versionado</strong>: ACF > Tools > Export > JSON. Commit no repo. Deploy via CI/CD sincroniza campo groups entre staging/prod. Nunca edite fields direto em produção.</li> </ol> <p>Checklist de publicação para a equipe:</p> <ul> <li><input disabled="" type="checkbox"> Título SEO preenchido (50-60 chars)</li> <li><input disabled="" type="checkbox"> Meta description preenchida (150-160 chars)</li> <li><input disabled="" type="checkbox"> Schema FAQ: mínimo 3 perguntas se houver FAQ no conteúdo</li> <li><input disabled="" type="checkbox"> Canonical customizado só se diferente da URL padrão</li> <li><input disabled="" type="checkbox"> Noindex marcado só para páginas de agradecimento, login, busca interna</li> <li><input disabled="" type="checkbox"> og:image definida (1200x630) se diferente da imagem destaque</li> </ul> <h2 id="secao-6">Validação e sanitização: proteger a integridade dos dados</h2> <p>Campos livres viram vetor de XSS e dados sujos no Search Console. Valide no backend, não só no frontend.</p> <p>No ACF, use filtro <code>acf/validate_value/name={field_name}</code>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">add_filter</span><span class="p">(</span> <span class="s1">'acf/validate_value/name=seo_meta_description'</span><span class="p">,</span> <span class="k">function</span><span class="p">(</span> <span class="nv">$valid</span><span class="p">,</span> <span class="nv">$value</span><span class="p">,</span> <span class="nv">$field</span><span class="p">,</span> <span class="nv">$input</span> <span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span> <span class="nx">mb_strlen</span><span class="p">(</span> <span class="nv">$value</span> <span class="p">)</span> <span class="o">></span> <span class="mi">160</span> <span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="s1">'Meta description deve ter no máximo 160 caracteres.'</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nv">$valid</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">},</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">4</span> <span class="p">);</span> </span></span></code></pre></div><p>Em metaboxes nativos, valide no <code>save_post</code>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">add_action</span><span class="p">(</span> <span class="s1">'save_post_imovel'</span><span class="p">,</span> <span class="k">function</span><span class="p">(</span> <span class="nv">$post_id</span> <span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">'imovel_nonce'</span><span class="p">]</span> <span class="p">)</span> <span class="o">||</span> <span class="o">!</span> <span class="nx">wp_verify_nonce</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">'imovel_nonce'</span><span class="p">],</span> <span class="s1">'imovel_save'</span> <span class="p">)</span> <span class="p">)</span> <span class="k">return</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span> <span class="nx">defined</span><span class="p">(</span> <span class="s1">'DOING_AUTOSAVE'</span> <span class="p">)</span> <span class="o">&&</span> <span class="nx">DOING_AUTOSAVE</span> <span class="p">)</span> <span class="k">return</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span> <span class="o">!</span> <span class="nx">current_user_can</span><span class="p">(</span> <span class="s1">'edit_post'</span><span class="p">,</span> <span class="nv">$post_id</span> <span class="p">)</span> <span class="p">)</span> <span class="k">return</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="nv">$quartos</span> <span class="o">=</span> <span class="nx">isset</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">'quartos'</span><span class="p">]</span> <span class="p">)</span> <span class="o">?</span> <span class="nx">absint</span><span class="p">(</span> <span class="nv">$_POST</span><span class="p">[</span><span class="s1">'quartos'</span><span class="p">]</span> <span class="p">)</span> <span class="o">:</span> <span class="mi">0</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span> <span class="nv">$quartos</span> <span class="o"><</span> <span class="mi">1</span> <span class="o">||</span> <span class="nv">$quartos</span> <span class="o">></span> <span class="mi">20</span> <span class="p">)</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nx">add_settings_error</span><span class="p">(</span> <span class="s1">'quartos'</span><span class="p">,</span> <span class="s1">'quartos_invalido'</span><span class="p">,</span> <span class="s1">'Quartos deve ser entre 1 e 20.'</span><span class="p">,</span> <span class="s1">'error'</span> <span class="p">);</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="nx">update_post_meta</span><span class="p">(</span> <span class="nv">$post_id</span><span class="p">,</span> <span class="s1">'quartos'</span><span class="p">,</span> <span class="nv">$quartos</span> <span class="p">);</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="p">);</span> </span></span></code></pre></div><p>Sanitize sempre: <code>sanitize_text_field</code>, <code>sanitize_url</code>, <code>sanitize_email</code>, <code>wp_kses_post</code> (para HTML permitido), <code>absint</code> (inteiros). Nunca salve <code>$_POST</code> direto.</p> <h2 id="secao-7">Fluxo de deploy e sincronização de fields</h2> <p>Field groups do ACF em JSON (pasta <code>acf-json</code> no tema ou plugin) entram no versionamento. No pipeline CI/CD:</p> <ol> <li><code>composer install</code> (se ACF PRO via Composer/private repo)</li> <li><code>wp acf import --file=acf-json/*.json</code> via WP-CLI no deploy</li> <li><code>wp cache flush</code> para limpar transients de field groups</li> <li>Testes de fumaça: criar post de cada CPT, preencher campos, publicar, verificar frontend</li> </ol> <p>Para metaboxes nativos, o código está no tema/plugin — deploy padrão resolve. Só atente para <code>register_meta</code> com <code>show_in_rest => true</code> se o campo precisar aparecer no endpoint REST (ex: app mobile, headless).</p> <p><a href="https://pagi.com.br/e/seo/gestor-de-trafego-petropolis-rj.html">times de gestão de tráfego em Petrópolis</a></p> <h2 id="secao-8">Conclusão prática</h2> <p>Custom fields bem estruturados transformam o WordPress em CMS adequado para SEO empresarial. A consultoria de Recife ganha autonomia: equipe de conteúdo preenche schema, canonical, FAQ e dados locais sem abrir ticket de dev. O desenvolvedor entrega field groups versionados, validação robusta, integração limpa com plugins SEO e performance previsível. Comece modelando os dados por tipo de conteúdo, escolha a ferramenta certa para cada complexidade e documente tudo para quem vai operar no dia a dia.</p> <h2 id="checklist">Checklist prático</h2> <div class="checklist" style="background:#fafaf8;border:1px solid #e3e3df;border-radius:8px;padding:14px 18px;margin:22px 0;"> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Definir quais dados SEO precisam de campos personalizados (títulos, descrições, schema, canonical)</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Escolher entre ACF PRO ou metaboxes nativos conforme complexidade e orçamento do projeto</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Criar field groups organizados por tipo de conteúdo: páginas, posts, taxonomias, opções globais</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Configurar regras de exibição condicional para mostrar campos apenas onde relevante</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Implementar sanitização e validação em todos os campos de entrada do usuário</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Testar integração com plugins SEO (Yoast, Rank Math) para evitar conflitos de meta tags</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Documentar chaves de meta fields e instruções de preenchimento para a equipe de conteúdo</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Configurar versionamento dos field groups em JSON para deploy contínuo</span></label> <label style="display:flex;gap:8px;align-items:flex-start;margin:6px 0;cursor:pointer;"><input type="checkbox" onchange="var d=this.closest('.checklist');var t=d.querySelectorAll('input[type=checkbox]').length;var c=d.querySelectorAll('input[type=checkbox]:checked').length;var p=d.querySelector('progress');if(p){p.value=c;}var s=d.querySelector('.check-cont');if(s){s.textContent=c+' de '+t+' concluídos';}"> <span>Monitorar performance de consultas meta_query em loops de listagem</span></label> <div style="margin-top:12px;display:flex;gap:10px;align-items:center;"><progress max="9" value="0" style="flex:1;"></progress> <span class="check-cont" style="font-size:0.9em;white-space:nowrap;">0 de 9 concluídos</span></div> </div> <h2 id="faq">Perguntas frequentes</h2> <details style="border:1px solid #e3e3df;border-radius:8px;padding:10px 14px;margin:8px 0;"> <summary style="cursor:pointer;font-weight:600;">Qual a diferença entre usar ACF e metaboxes nativos do WordPress?</summary> <p style="margin:10px 0 2px;">O ACF oferece interface visual e campos complexos como repeater e gallery sem escrever código PHP. Metaboxes nativos exigem programação manual, mas eliminam dependência de plugin externo e são mais leves para projetos simples.</p> </details> <details style="border:1px solid #e3e3df;border-radius:8px;padding:10px 14px;margin:8px 0;"> <summary style="cursor:pointer;font-weight:600;">Como garantir que os custom fields não atrapalhem o desempenho do site?</summary> <p style="margin:10px 0 2px;">Carregue scripts e estilos do ACF apenas nas telas de edição necessárias usando hooks condicionais. Evite campos repetidores excessivos em posts únicos e use transients para cachear consultas pesadas de meta_value.</p> </details> <details style="border:1px solid #e3e3df;border-radius:8px;padding:10px 14px;margin:8px 0;"> <summary style="cursor:pointer;font-weight:600;">É possível migrar dados de custom fields entre instalações WordPress?</summary> <p style="margin:10px 0 2px;">Sim, exporte as tabelas postmeta e usermeta via WP-CLI ou plugin de migração. Para ACF, use a ferramenta de importação/exportação de field groups em JSON, que preserva chaves e configurações entre ambientes.</p> </details> <details style="border:1px solid #e3e3df;border-radius:8px;padding:10px 14px;margin:8px 0;"> <summary style="cursor:pointer;font-weight:600;">Como validar dados salvos em custom fields antes de publicar?</summary> <p style="margin:10px 0 2px;">Use o filtro 'acf/validate_value' para regras personalizadas no ACF. Em metaboxes nativos, aplique 'save_post' com wp_verify_nonce e sanitize_text_field, retornando erro via admin_notices se a validação falhar.</p> </details> <details style="border:1px solid #e3e3df;border-radius:8px;padding:10px 14px;margin:8px 0;"> <summary style="cursor:pointer;font-weight:600;">Custom fields funcionam com o editor de blocos Gutenberg?</summary> <p style="margin:10px 0 2px;">Sim, o ACF PRO permite criar blocos Gutenberg nativos a partir de field groups. Metaboxes nativos aparecem na sidebar do editor. Para integração profunda, registre blocos via register_block_type com atributos mapeados para meta fields.</p> </details> <script type="application/ld+json">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Qual a diferença entre usar ACF e metaboxes nativos do WordPress?", "acceptedAnswer": {"@type": "Answer", "text": "O ACF oferece interface visual e campos complexos como repeater e gallery sem escrever código PHP. Metaboxes nativos exigem programação manual, mas eliminam dependência de plugin externo e são mais leves para projetos simples."}}, {"@type": "Question", "name": "Como garantir que os custom fields não atrapalhem o desempenho do site?", "acceptedAnswer": {"@type": "Answer", "text": "Carregue scripts e estilos do ACF apenas nas telas de edição necessárias usando hooks condicionais. Evite campos repetidores excessivos em posts únicos e use transients para cachear consultas pesadas de meta_value."}}, {"@type": "Question", "name": "É possível migrar dados de custom fields entre instalações WordPress?", "acceptedAnswer": {"@type": "Answer", "text": "Sim, exporte as tabelas postmeta e usermeta via WP-CLI ou plugin de migração. Para ACF, use a ferramenta de importação/exportação de field groups em JSON, que preserva chaves e configurações entre ambientes."}}, {"@type": "Question", "name": "Como validar dados salvos em custom fields antes de publicar?", "acceptedAnswer": {"@type": "Answer", "text": "Use o filtro 'acf/validate_value' para regras personalizadas no ACF. Em metaboxes nativos, aplique 'save_post' com wp_verify_nonce e sanitize_text_field, retornando erro via admin_notices se a validação falhar."}}, {"@type": "Question", "name": "Custom fields funcionam com o editor de blocos Gutenberg?", "acceptedAnswer": {"@type": "Answer", "text": "Sim, o ACF PRO permite criar blocos Gutenberg nativos a partir de field groups. Metaboxes nativos aparecem na sidebar do editor. Para integração profunda, registre blocos via register_block_type com atributos mapeados para meta fields."}}]}</script> <script type="application/ld+json">{"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Início", "item": "https://devwordpress.com.br/"}, {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://devwordpress.com.br/blog/"}, {"@type": "ListItem", "position": 3, "name": "Criar custom fields WordPress para consultoria SEO em Recife gerenciar conteudo", "item": "https://devwordpress.com.br/blog/criar-custom-fields-wordpress-para-consultoria-seo-em-recife-gerenciar-conteudo/"}]}</script> </div> <aside class="post-cta"> <p>Precisa de código WordPress sob medida? Vamos transformar seu requisito em plugin, tema ou integração documentada e testada.</p> <a class="btn" href="https://devwordpress.com.br/#contato">Solicitar proposta</a> </aside> <nav class="post-nav"> <a class="post-nav-item prev" href="/blog/integracao-whatsapp-business-para-emergencias-de-encanamento-em-santo-amaro/"><span>← Anterior</span><strong>Integração WhatsApp Business para emergências de encanamento em Santo Amaro</strong></a> <a class="post-nav-item next" href="/blog/seo-local-aplicado-a-site-de-desentupidoras-no-bairro-barra-funda/"><span>Próximo →</span><strong>SEO local aplicado a site de desentupidoras no bairro Barra Funda: guia prático</strong></a> </nav> </article> </main> <footer class="site-footer"> <div class="footer-inner"> <p>© 2026 DevWordPress. DevWordPress — Estúdio de desenvolvimento WordPress em Florianópolis/SC. Código versionado, documentado e entregue com responsabilidade..</p> <ul class="refs"> <li><a href="https://www.gov.br/pt-br" rel="nofollow" target="_blank" title="Portal oficial do Governo Federal brasileiro — padrões de identidade digital e acessibilidade">Portal Gov.br</a></li><li><a href="https://www.w3c.br/" rel="nofollow" target="_blank" title="Escritório do W3C no Brasil — padrões web, acessibilidade e boas práticas">W3C Brasil</a></li><li><a href="https://cetic.br/" rel="nofollow" target="_blank" title="Centro Regional de Estudos para o Desenvolvimento da Sociedade da Informação — pesquisas sobre TIC no Brasil">Cetic.br</a></li> </ul> </div> </footer> </body> </html>