SEO Técnico & Performance

Speculation Rules API no WordPress: Como Implementar Prerender e Prefetching Nativo do Chrome para LCP Próximo de Zero

SEO Técnico & Performance
Speculation Rules no WordPress
Cayo Galotti Especialista Google

A busca por tempos de carregamento instantâneos no WordPress sempre esbarrou em limites físicos da rede. Mesmo após otimizar o tempo de resposta inicial do servidor, compactar folhas de estilo e aplicar formatos modernos de imagem, a transição entre duas páginas em uma arquitetura multipágina ainda consome centenas de milissegundos. O navegador precisa resolver a rota, requisitar o arquivo HTML, interpretar o documento, disparar a busca de fontes e executar scripts antes de pintar o elemento principal na tela.

Em termos práticos, esse ciclo tradicional mantém o Largest Contentful Paint, métrica central dos Core Web Vitals do Google, frequentemente acima de 800 milissegundos nas melhores configurações de hospedagem. Para portais de conteúdo, blogs de alto tráfego e lojas virtuais, essa fricção custa posições no ranking orgânico e reduz a conversão de leitores.

A Speculation Rules API altera esse fluxo de forma estrutural. Desenvolvida pela equipe do Chromium e adotada pelo Google Chrome e pelo Microsoft Edge, a especificação permite que o navegador realize prefetch do HTML ou prerender completo de páginas internas antes que o visitante clique no link. Quando configurada no ecossistema WordPress com as devidas travas de segurança e cache, a navegação ocorre de maneira imperceptível ao olhar humano. O novo documento surge na tela com LCP variando entre 0 e 50 milissegundos, entregando a sensação de transição instantânea sem a sobrecarga operacional de migrar o site para um modelo desvinculado, como analisamos em nosso estudo sobre SEO para WordPress headless e Next.js.

O que é a Speculation Rules API e por que ela supera o prefetch legado

A Speculation Rules API é uma especificação declarativa em formato JSON que instrui o navegador a antecipar navegações futuras com base em regras flexíveis de correspondência de URLs e seletores de elementos. Ela foi criada para substituir abordagens antigas que apresentavam falhas estruturais de desempenho, consumo de dados e falta de controle programático.

Durante anos, desenvolvedores recorreram a tags como <link rel="prefetch"> ou <link rel="prerender">. A primeira apenas colocava o arquivo HTML no cache HTTP simples do navegador, sem carregar sub-recursos fundamentais como fontes ou folhas de estilo críticas. A segunda foi descontinuada pelos navegadores devido ao desperdício extremo de memória, pois iniciava o processamento indiscriminado de páginas secundárias sem qualquer mecanismo de proteção contra abusos de rede.

Diante dessas limitações, surgiram bibliotecas baseadas em JavaScript como Quicklink, InstantClick e Flying Pages. Essas soluções escutam eventos de cursor ou visibilidade na janela de exibição para disparar chamadas fetch dinâmicas. O problema dessas ferramentas reside no custo de execução. Elas adicionam peso em kilobytes ao pacote principal de JavaScript, disputam tempo na thread principal com os scripts analíticos da página e não conseguem executar a renderização prévia da página em segundo plano.

A Speculation Rules API resolve essas lacunas operando diretamente no motor interno do navegador. Ela não exige scripts externos pesados em execução contínua. Em vez disso, o desenvolvedor declara as regras em um único bloco de configuração. O motor do Chrome avalia a integridade da rede, o uso de memória do dispositivo, o estado da bateria e a probabilidade de interação do usuário para decidir quando e como executar a especulação com total segurança.

Diferença entre prefetch e prerender nativo no Chrome

A especificação do Chrome oferece duas ações distintas de especulação, cada uma com objetivos técnicos e impactos diferentes na infraestrutura do site.

O modo prefetch realiza apenas o download antecipado do documento HTML de destino via requisição HTTP de baixa prioridade. O navegador armazena a resposta diretamente no cache de navegação rápida em memória. Nenhum sub-recurso referenciado no corpo da página é baixado, e nenhum script é executado. Essa abordagem reduz expressivamente o Time to First Byte da navegação futura, economizando banda e processamento no dispositivo móvel.

O modo prerender vai muito além do prefetch. O navegador cria uma instância invisível em segundo plano, semelhante a uma aba oculta de renderização. O documento HTML é processado, o Modelo de Objeto do Documento é montado, o CSS é aplicado, as fontes e imagens da primeira dobra são baixadas e o código JavaScript é executado até o ponto de prontidão visual. Quando o usuário clica no link correspondente, o Chrome simplesmente substitui a página atual pela página já renderizada.

A transição acontece de forma imediata. O conteúdo já está completamente pintado na tela, o que derruba o LCP para marcas virtualmente nulas. Durante esse processo de segundo plano, o navegador aplica restrições estritas de segurança. Ele suspende reproduções de áudio e vídeo, bloqueia alertas e impede o download de arquivos pesados até que o usuário efetivamente conclua a ação de navegação.

Recurso ou ComportamentoTag <link rel="prefetch">Bibliotecas JS como Quicklink ou InstantClickSpeculation Rules: PrefetchSpeculation Rules: Prerender
Nível de execuçãoCache HTTP rasoThread principal via JSCache nativo de navegaçãoRenderizador isolado em background
Download de CSS e fontesNão realizaNão realizaNão realizaRealiza para recursos da página
Execução prévia de JavaScriptBloqueadaBloqueadaBloqueadaExecutada sob restrições
Redução típica de LCP10% a 25%15% a 30%30% a 50%85% a 98%, atingindo LCP próximo a 0 ms
Impacto na CPU do clienteMuito baixoMédio, por disputa de listenersPraticamente nuloBaixo a moderado
Respeito automático ao modo de economiaInexistenteRequer código customizadoAutomático via ChromeAutomático via Chrome

Níveis de agressividade e gatilhos de disparo

Um dos avanços mais refinados da Speculation Rules API é o atributo de agressividade, denominado eagerness. Ele define em que momento exato o navegador deve iniciar a especulação, permitindo dosar com precisão o equilíbrio entre velocidade percebida e consumo de dados do servidor.

O Chrome disponibiliza quatro níveis de agressividade:

  1. Immediate. O navegador inicia a especulação assim que a regra é lida e validada no código da página. Esse nível é agressivo e deve ser reservado para fluxos determinísticos, como a próxima etapa obrigatória de um processo guiado.
  2. Eager. O navegador executa a ação quase imediatamente, aproveitando momentos em que a rede e o processador do dispositivo estejam ociosos.
  3. Moderate. O navegador aguarda o usuário posicionar o cursor sobre o link por cerca de 200 milissegundos ou iniciar um toque na tela em dispositivos táteis. Esse pequeno intervalo confirma a intenção real de navegação e evita disparos acidentais provocados por movimentos casuais do mouse.
  4. Conservative. O navegador aguarda o evento de clique inicial, disparando a especulação no momento em que o botão do mouse é pressionado, antes de ser solto. Esse comportamento ganha entre 100 e 150 milissegundos de vantagem em relação ao clique final, com desperdício zero de requisições.

Para a ampla maioria dos projetos WordPress, o nível moderado representa a configuração ideal. Ele concede tempo hábil para que o prefetch ou o prerender finalize a preparação dos recursos antes do clique, descartando conexões desnecessárias que sobrecarregariam o servidor de hospedagem.

Sintaxe de regras baseadas em documentos no WordPress

A declaração das regras pode ocorrer por listas estáticas de URLs ou por regras baseadas em documentos. Enquanto listas fixas exigem que o desenvolvedor mapeie cada link manualmente, as regras baseadas no documento instruem o navegador a inspecionar os elementos de hiperlink já presentes na estrutura HTML atual.

No WordPress, essa abordagem é a mais eficiente. Em vez de alimentar listas intermináveis de posts a cada publicação, você define padrões de correspondência de rota e seletores de estilo CSS.

Veja a estrutura declarativa recomendada para um portal WordPress:

<script type="speculationrules">
{
  "prerender": [
    {
      "source": "document",
      "where": {
        "and": [
          { "href_matches": "/*" },
          { "not": { "href_matches": "/wp-admin/*" } },
          { "not": { "href_matches": "/wp-login.php*" } },
          { "not": { "href_matches": "/carrinho/*" } },
          { "not": { "href_matches": "/checkout/*" } },
          { "not": { "href_matches": "/minha-conta/*" } },
          { "not": { "href_matches": "*\\\\?*add-to-cart=*" } },
          { "not": { "href_matches": "*\\\\?*action=logout*" } },
          { "not": { "selector_matches": ".no-prerender, #wpadminbar a, .logout-link" } }
        ]
      },
      "eagerness": "moderate"
    }
  ],
  "prefetch": [
    {
      "source": "document",
      "where": {
        "and": [
          { "href_matches": "/categoria/*" },
          { "href_matches": "/tag/*" },
          { "not": { "selector_matches": ".no-prefetch" } }
        ]
      },
      "eagerness": "conservative"
    }
  ]
}
</script>

Nesse modelo declarativo, links de artigos e páginas institucionais recebem prerender sob o gatilho moderado, enquanto arquivos de listagem de categorias e tags operam em prefetch com gatilho conservador. Rotas de administração, autenticação e transações do e-commerce ficam rigorosamente excluídas da especulação.

Como implementar a Speculation Rules API no WordPress

Existem três formas consolidadas de colocar a Speculation Rules API em produção no WordPress. Você pode utilizar o plugin oficial desenvolvido pelo time de performance, inserir código direto no tema filho ou plugin utilitário, ou realizar a injeção na camada de borda.

Implementação com o plugin oficial do WordPress Performance Lab

A equipe oficial de performance do WordPress desenvolveu o plugin independente Speculation Rules, integrado à iniciativa do Performance Lab do ecossistema central do CMS. Essa é a alternativa mais rápida para administradores que preferem gerenciar configurações pelo painel administrativo sem tocar em código PHP.

Após instalar e ativar o plugin pelo repositório oficial, o painel disponibiliza opções diretas de configuração:

  1. Acesse o menu de Configurações e selecione a seção de Leitura ou a aba específica de Carregamento Especulativo.
  2. Defina o modo operacional desejado, escolhendo entre prefetch ou prerender. Em sites com boa infraestrutura de cache, selecione a opção de prerender.
  3. Escolha o nível de agressividade. O plugin recomenda a configuração moderada como padrão de equilíbrio.
  4. Adicione regras de exclusão para páginas específicas ou classes CSS que não devem receber renderização prévia.

O plugin cuida de injetar a tag script no cabeçalho ou no rodapé do documento de forma limpa e em conformidade com os padrões da W3C.

Implementação nativa via código no functions.php

Para engenheiros de software e especialistas de SEO técnico que exigem controle absoluto sobre as condições de disparo e parâmetros de cabeçalho, a inserção manual via código PHP é a abordagem recomendada. Essa prática dispensa plugins adicionais e permite desacoplar regras conforme o tipo de post ou permissão do usuário.

Insira o código estruturado abaixo no arquivo de funções do seu tema filho ou em um plugin exclusivo de desempenho:

<?php
/**
 * Implementação nativa da Speculation Rules API no WordPress
 * Autor: Cayo Galotti
 */

if (!defined('ABSPATH')) {
    exit;
}

function cg_inject_speculation_rules() {
    // Nunca aplicar regras para usuários logados ou administradores
    if (is_user_logged_in() || is_admin()) {
        return;
    }

    // Não disparar em requisições de feed, REST ou busca interna
    if (is_feed() || is_search() || is_404()) {
        return;
    }

    $site_url = esc_url(home_url('/'));
    
    $rules = array(
        'prerender' => array(
            array(
                'source' => 'document',
                'where' => array(
                    'and' => array(
                        array('href_matches' => '/*'),
                        array('not' => array('href_matches' => '/wp-admin/*')),
                        array('not' => array('href_matches' => '/wp-login.php*')),
                        array('not' => array('href_matches' => '/carrinho/*')),
                        array('not' => array('href_matches' => '/checkout/*')),
                        array('not' => array('href_matches' => '/minha-conta/*')),
                        array('not' => array('href_matches' => '*\\?*add-to-cart=*')),
                        array('not' => array('href_matches' => '*\\?*action=logout*')),
                        array('not' => array('selector_matches' => '.no-prerender, #wpadminbar a, .logout-button'))
                    )
                ),
                'eagerness' => 'moderate'
            )
        ),
        'prefetch' => array(
            array(
                'source' => 'document',
                'where' => array(
                    'and' => array(
                        array('href_matches' => '/categoria/*'),
                        array('href_matches' => '/tag/*'),
                        array('not' => array('selector_matches' => '.no-prefetch'))
                    )
                ),
                'eagerness' => 'conservative'
            )
        )
    );

    $json_rules = wp_json_encode($rules, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);

    echo "\n" . '<script type="speculationrules">' . "\n" . $json_rules . "\n" . '</script>' . "\n";
}
add_action('wp_head', 'cg_inject_speculation_rules', 1);

Esse código assegura que a tag seja adicionada no topo do documento HTML, com exclusão automática para usuários conectados ao painel do WordPress e bloqueio preventivo em páginas de busca ou erro 404.

Injeção na camada de borda com Cloudflare Workers

Outra via de alta performance consiste em delegar a injeção do cabeçalho ou do bloco de regras para a borda da rede de distribuição de conteúdo. Em vez de consumir ciclos de processamento do PHP no servidor de origem, você pode utilizar rotinas na CDN conforme detalhamos em nosso artigo sobre Edge SEO com Cloudflare Workers.

A especificação da Speculation Rules API suporta a entrega das instruções através de um cabeçalho HTTP oficial:

Speculation-Rules: "/speculation-rules.json"

No Cloudflare Worker, basta interceptar a resposta HTML e adicionar o cabeçalho direcionando o navegador para o arquivo JSON hospedado estaticamente no armazenamento da CDN:

export default {
  async fetch(request, env, ctx) {
    const response = await fetch(request);
    const contentType = response.headers.get("content-type") || "";

    // Aplicar apenas em respostas HTML
    if (contentType.includes("text/html")) {
      const newHeaders = new Headers(response.headers);
      newHeaders.set("Speculation-Rules", "\"/speculation-rules.json\"");

      return new Response(response.body, {
        status: response.status,
        statusText: response.statusText,
        headers: newHeaders
      });
    }

    return response;
  }
};

O arquivo servido na raiz do domínio precisa conter o cabeçalho de tipo de mídia específico Content-Type: application/speculationrules+json para que o navegador processe a instrução corretamente.

Riscos de sobrecarga no servidor e regras de exclusão para WooCommerce

Embora a aceleração de velocidade seja expressiva, a implementação inadequada de carregamentos especulativos pode gerar consequências desfavoráveis para a infraestrutura de hospedagem e para a consistência transacional do site.

O perigo da multiplicação de requisições em servidores sem cache

Se você ativar prerender com gatilho imediato em uma página inicial com 50 links internos, cada visitante único fará o navegador disparar 50 requisições simultâneas de páginas completas. Em um ambiente com 1.000 acessos simultâneos, isso representa 50.000 requisições direcionadas ao servidor em poucos segundos.

Se o WordPress não contar com uma camada agressiva de cache de página inteira operando em memória, como FastCGI Cache no Nginx, Redis Page Cache, LiteSpeed Cache ou cache de borda na CDN, cada uma dessas requisições executará a pilha inteira do PHP e realizará dezenas de consultas ao banco de dados MySQL. O resultado inevitável será o esgotamento do pool de processos do PHP-FPM, pico de uso de CPU em 100% e queda total do servidor por erro 504 Gateway Timeout.

Por essa razão, a Speculation Rules API exige como pré-requisito indispensável um sistema de cache configurado para entregar páginas HTML com status de acerto de cache superior a 95%. Além disso, é recomendável monitorar o tráfego de requisições nos arquivos de acesso para calibrar o volume de solicitações, como explicamos em nosso guia de análise de logs de servidor para SEO.

Proteção rigorosa em lojas virtuais com WooCommerce

No WooCommerce, o perigo vai além da capacidade do servidor. Ele toca diretamente na integridade financeira da loja e na sessão do consumidor.

Se o navegador executar o prerender de URLs que realizam mutação de dados via métodos GET, como links com o parâmetro ?add-to-cart=123 ou URLs de remoção de itens do carrinho, o carrinho de compras do cliente será modificado silenciosamente em segundo plano sem que ele tenha clicado no botão. Pior ainda, links de encerramento de sessão deslogarão o usuário instantaneamente durante a navegação.

Para blindar lojas virtuais, certifique-se de que as seguintes diretrizes sejam atendidas:

  1. Exclusão de rotas dinâmicas. Jamais inclua páginas de carrinho, finalização de compra, login, cadastro e painel de conta em regras de prerender ou prefetch.
  2. Eliminação de mutações via GET. Toda alteração de estado no WooCommerce deve ocorrer via requisições POST ou chamadas AJAX seguras acompanhadas de verificação de nonce.
  3. Uso de classes bloqueadoras. Adicione a classe CSS no-prerender em botões de adicionar ao carrinho, filtros facetados com URLs parametrizadas e links de carrinho rápido flutuante.

Proteção de métricas de análise e prevenção de pageviews fantasmas no GA4

Um dos problemas técnicos mais sérios na adoção de prerender é a contaminação dos relatórios de tráfego. Se o navegador carrega uma página completa em segundo plano e essa página nunca é acessada pelo usuário, disparar um evento de visualização gerará métricas artificiais de audiência, taxas de rejeição incorretas e cálculos imprecisos de conversão.

O comportamento nativo da tag gtag.js do Google Analytics 4

O Google preparou a biblioteca oficial gtag.js para lidar com a Speculation Rules API. Por padrão, em versões recentes, o script monitora o estado de renderização da página através da propriedade document.prerendering.

Quando uma página é carregada em modo invisível de segundo plano, a propriedade document.prerendering retorna o valor verdadeiro. Nessa situação, o gtag.js retém o envio do evento page_view. Assim que o usuário clica no link e o Chrome promove a página oculta para o primeiro plano, o navegador dispara o evento prerenderingchange no objeto document, e o Analytics libera o envio da visualização com a marcação temporal exata da ativação.

Como proteger contêineres do Google Tag Manager e pixels de terceiros

Embora o código base do GA4 esteja protegido, contêineres customizados do Google Tag Manager, tags de mídia paga, pixels de redes sociais, scripts de rastreamento de afiliados e ferramentas de gravação de sessão como Hotjar e Microsoft Clarity frequentemente não possuem essa proteção nativa. Se esses códigos forem acionados no evento padrão de inicialização do contêiner, eles dispararão visualizações fantasmas.

Para resolver essa falha, é necessário criar uma rotina utilitária de inicialização que condicione os disparos do Tag Manager à ativação real do documento. Essa proteção é especialmente relevante quando você opera arquiteturas avançadas de mensuração, como as discutidas em nosso guia sobre Server-Side GTM no WordPress.

Veja como implementar essa camada de proteção em JavaScript puro:

/**
 * Utilitário para postergar scripts analíticos até a ativação da página
 * Autor: Cayo Galotti
 */
(function() {
  function inicializarTagsAposAtivacao() {
    // Disparar evento personalizado no dataLayer para acionar tags do GTM
    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
      event: "pagina_ativada_com_sucesso",
      tempoAtivacao: performance.now()
    });
  }

  if (document.prerendering) {
    // A página está sendo pré-renderizada em segundo plano
    document.addEventListener("prerenderingchange", function() {
      inicializarTagsAposAtivacao();
    }, { once: true });
  } else {
    // A página foi carregada de forma direta pelo usuário
    inicializarTagsAposAtivacao();
  }
})();

No painel do Google Tag Manager, altere o acionador principal das suas tags de mídia e ferramentas de terceiros do evento padrão Page View para o acionador de Evento Personalizado com o nome pagina_ativada_com_sucesso. Dessa forma, nenhuma tag de terceiros será executada enquanto a página estiver apenas em modo especulativo de segundo plano.

Como auditar e debugar carregamentos especulativos no Chrome DevTools

O Chrome disponibiliza um conjunto completo de ferramentas nativas no DevTools para inspecionar, depurar e validar se as regras de especulação estão funcionando corretamente.

Para iniciar a auditoria, abra o site no Chrome, pressione F12 para abrir as Ferramentas do Desenvolvedor e selecione a aba Application. No menu lateral esquerdo, localize a seção Speculative loads.

Essa interface é dividida em duas áreas principais:

1. Aba Speculation rules

Exibe todas as regras declaradas no documento atual, apontando se o código JSON foi interpretado com sucesso pelo navegador ou se contém erros de formatação. Caso você tenha esquecido uma vírgula ou utilizado uma sintaxe inválida de correspondência de padrões, o painel indicará a linha exata e a mensagem de falha na validação.

2. Aba Speculations

Lista em tempo real todas as URLs candidatas que o Chrome identificou na página. Para cada endereço, o DevTools informa:

  • URL. O caminho completo do link identificado no DOM.
  • Action. Indica se o navegador definiu a ação como prefetch ou prerender.
  • Rule set. Qual bloco de regras originou a instrução de carregamento.
  • Status. Informa o estado atual do processo, indicando Not triggered quando aguarda interação, Ready para carregamento concluído em segundo plano com sucesso, Success quando o usuário clica e a página é ativada, ou Failure quando ocorre um erro que cancela a especulação.

Ao clicar sobre uma URL com status de falha, o painel exibe o motivo técnico do descarte. Entre os motivos mais frequentes estão o uso de conexões inseguras sem certificado HTTPS, respostas do servidor com códigos diferentes de 200 OK, cabeçalhos proibitivos de cache ou o acionamento de APIs restritas de segundo plano.

Alternância de contexto para depuração de JavaScript

Se a sua página pré-renderizada apresentar erros de script enquanto estiver oculta, esses erros não aparecerão no console principal da aba atual. Para inspecioná-los, acesse a aba Console do DevTools. No topo do painel, localize o menu suspenso de seleção de contexto de execução e mude da opção padrão para a instância correspondente à página em prerender. Dessa forma, você visualiza mensagens de erro, requisições de rede e avisos de JavaScript gerados exclusivamente durante a renderização em segundo plano.

Checklist de produção para alcançar LCP próximo de zero

A aplicação da Speculation Rules API no WordPress entrega ganhos expressivos de experiência de navegação, mas requer método e disciplina técnica antes de ser liberada para todo o tráfego público.

Siga o roteiro operacional abaixo para colocar a tecnologia em produção com segurança:

  1. Audite a camada de cache. Verifique se o servidor de hospedagem ou a CDN está respondendo com cache de página inteira ativo e taxas de acerto acima de 90%. Nunca habilite prerender imediato contra um servidor sem cache.
  2. Defina o nível de agressividade moderado. Adote o gatilho moderado como padrão para links de conteúdo editorial e o gatilho conservador para seções densas de listagem de categorias ou arquivos.
  3. Mapeie as rotas de exclusão. Bloqueie explicitamente URLs de login, administração, parâmetros de busca, links de logout e páginas transacionais do WooCommerce.
  4. Isole scripts de mensuração. Verifique se o Google Analytics 4 está aguardando o evento de ativação e configure acionadores customizados no Tag Manager para impedir disparos de pixels de terceiros durante o prerender.
  5. Teste em conexões móveis. Valide o comportamento em dispositivos reais navegando em redes 4G ou 5G e confirme se o navegador suspende a especulação quando o modo de economia de dados está ligado.
  6. Acompanhe métricas reais de campo. Monitore a evolução dos percentis de LCP no relatório Core Web Vitals do Google Search Console e nos dados do Chrome User Experience Report, o CrUX, ao longo das quatro semanas seguintes à ativação.

Ao alinhar regras declarativas nativas do navegador a uma arquitetura de cache bem projetada, seu portal WordPress elimina os gargalos históricos de transição de tela. A navegação passa a responder de maneira instantânea, retendo o público leitor e fortalecendo os indicadores de Core Web Vitals no ranking do Google. Se você busca acelerar seu portal corporativo ou e-commerce com soluções de ponta em performance e engenharia web, conheça nossos serviços de SEO técnico e performance ou entre em contato para desenharmos uma estratégia personalizada para o seu ambiente.