# Como corrigir o erro de Heartbeat API ao controlar no WP Rocket no WordPress

O erro de Heartbeat API ao controlar no WP Rocket ocorre quando a opção Control Heartbeat reduz ou desativa a Heartbeat API e, com isso, quebra o autosave, o post-locking e plugins que dependem do sinal periodico do servidor.

## O que é erro de Heartbeat API no WP Rocket?

A Heartbeat API do WordPress e um mecanismo que troca dados em tempo real entre o navegador e o servidor em intervalos curtos. Segundo a documentação do WP Rocket, ela roda a cada 15 a 60 segundos e sustenta funções como autosave, post-locking (avisar que outra pessoa esta editando o post), notificações do painel e atualizações em tempo real. O WP Rocket oferece a opção Control Heartbeat justamente para reduzir essa atividade, porque cada batida e uma chamada ao admin-ajax.php que consome CPU no servidor.

O erro de Heartbeat API no WP Rocket aparece quando esse controle e agressivo demais. Ao escolher Disable em vez de Reduce activity, ou ao desligar a Heartbeat na área errada, o WP Rocket corta o sinal que esses recursos precisam. O resultado pratico e o rascunho que não salva sozinho, o aviso de quem esta editando que some, o Site Health que não carrega e plugins de tempo real (carrinho, pedidos, notificações) que param de atualizar. A página continua rápida, mas funções administrativas quebram em silencio.

## Como identificar

- O editor exibe 'A atualização automática esta desativada' ou para de mostrar 'Rascunho salvo' enquanto você escreve, indicando que o autosave parou.
- O aviso de post-locking ('Fulano esta editando este post') não aparece mais, e dois usuários sobrescrevem o trabalho um do outro sem alerta.
- Em Ferramentas -> Saude do site, a aba Status fica girando e nunca carrega os resultados dos testes.
- Plugins de tempo real (WooCommerce, notificações, contadores ao vivo) param de atualizar sozinhos e so mostram dados novos após recarregar a página.
- Na aba Network do navegador (F12), as chamadas periodicas para admin-ajax.php com 'action=heartbeat' desaparecem ou ficam muito espacadas.

**Antes de começar:** Antes de editar o functions.php ou desativar plugins de controle de Heartbeat em producao, faça um backup completo do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para poder reverter caso o editor ou um plugin de tempo real pare de funcionar.

## Como prevenir

- Prefira sempre Reduce activity a Disable no Control Heartbeat: a opção reduzida (de 60s para 120s) já corta a maior parte do consumo sem matar autosave, post-locking e Site Health.
- Documente quais plugins do site dependem de tempo real (carrinho, pedidos, notificações) antes de desativar a Heartbeat em qualquer área, para não quebrar um recurso ativo sem perceber.
- Use apenas um controlador de Heartbeat por site: escolha entre o Control Heartbeat do WP Rocket OU um plugin/snippet dedicado, nunca os dois somados.
- Após cada mudanca na aba Heartbeat, teste o autosave, o aviso de post-locking e o Site Health antes de subir a configuração para producao.

Erros relacionados

- [Como resolver cache que não limpa no WordPress](https://full.services/wp-fixer/corrigir-cache-nao-limpa-wordpress/)
- [Como corrigir INP alto (Interaction to Next Paint) no WordPress](https://full.services/wp-fixer/corrigir-inp-alto-wordpress/)
- [Como otimizar o wp_options para reduzir queries lentas](https://full.services/wp-fixer/otimizar-wp-options-queries-lentas/)

## Causa

- A opção Control Heartbeat do WP Rocket esta marcada como Disable (em vez de Reduce activity) para o Post editor, cortando o sinal que mantem o autosave e o post-locking ativos durante a edição.
- O Control Heartbeat esta com Disable aplicado ao Backend (Dashboard): a documentação do WP Rocket avisa que, nesse caso, o Site Health não consegue carregar os resultados dos testes.
- A Heartbeat foi reduzida para uma batida a cada 2 minutos (Reduce activity baixa de 60s para 120s) e um plugin de tempo real esperava o intervalo padrão, ficando com dados defasados até o recarregamento.
- A Heartbeat foi desativada no Frontend, mas um plugin (como carrinho do WooCommerce ou notificações ao vivo) dependia da batida no frontend para sincronizar e parou de atualizar.
- Existe um segundo controlador de Heartbeat ativo ao mesmo tempo (plugin Heartbeat Control ou snippet no functions.php) somando-se ao WP Rocket e desligando a API além do esperado.

## Como resolver

1. Abra a aba Heartbeat do WP Rocket: No painel, va até as configurações do WP Rocket e abra a aba Heartbeat, onde fica a opção Control Heartbeat. E aqui que você define o nível de atividade para cada área do site.

```
Painel WP -> Configurações -> WP Rocket -> aba Heartbeat
Confirme se a caixa 'Control Heartbeat' esta marcada
```

2. Troque Disable por Reduce activity no Post editor: Para a área Post editor (Specify how often the Heartbeat API can run when editing posts), escolha Reduce activity em vez de Disable. Isso baixa o intervalo de 60 para 120 segundos sem cortar o autosave nem o post-locking, segundo a doc oficial do WP Rocket.

```
Behavior in backend (Post editor) -> selecione 'Reduce activity'
Salve as alterações e abra um post para confirmar o aviso 'Rascunho salvo'
```

3. Use Reduce activity (não Disable) no Backend para o Site Health: Se você precisa do Site Health e das notificações do painel, não deixe o Backend (Dashboard) como Disable. A documentação avisa que desativar a Heartbeat no backend impede o Site Health de carregar os resultados. Prefira Reduce activity.

```
Behavior in backend (Dashboard) -> selecione 'Reduce activity'
Painel WP -> Ferramentas -> Saude do site -> confirme que a aba Status carrega
```

4. Reative a Heartbeat no Frontend se um plugin depende dela: Se um plugin de tempo real (carrinho, notificações ao vivo) parou de atualizar, mude a área Frontend de Disable para Reduce activity ou Do not limit. So mantenha o Frontend desativado quando nenhum plugin precisar de AJAX em tempo real ali.

```
Behavior in frontend -> selecione 'Reduce activity' ou 'Do not limit'
Recarregue a página onde o plugin de tempo real roda e confirme a atualização
```

5. Limpe o cache e remova controladores de Heartbeat duplicados: Limpe o cache do WP Rocket para aplicar as mudancas e verifique se ha um segundo controle ativo. Se houver o plugin Heartbeat Control ou um snippet no functions.php somando-se ao WP Rocket, mantenha apenas um deles para não desligar a API duas vezes.

```
Painel WP -> WP Rocket -> Clear and preload cache
Painel WP -> Plugins -> desative outro plugin de 'Heartbeat Control' se existir
Revise o functions.php em busca de 'heartbeat_settings' ou 'wp_deregister_script("heartbeat")' duplicado
```


## Código

```php
<?php
/**
 * Ajuste fino da Heartbeat API por area.
 * Mantem o autosave/post-locking no editor (intervalo seguro)
 * e so reduz a frequencia, em vez de desativar a API.
 */
add_filter( 'heartbeat_settings', 'full_ajusta_heartbeat' );
function full_ajusta_heartbeat( $settings ) {
    // Intervalo em segundos: minimo 15, maximo 120 (WordPress aceita 15-120).
    $settings['interval'] = 120;
    return $settings;
}

// Mantem a Heartbeat viva no editor de posts (autosave e post-locking).
add_action( 'admin_enqueue_scripts', 'full_garante_heartbeat_editor' );
function full_garante_heartbeat_editor( $hook ) {
    if ( in_array( $hook, array( 'post.php', 'post-new.php' ), true ) ) {
        wp_enqueue_script( 'heartbeat' );
    }
}
```

## Perguntas frequentes

### Por que o autosave parou depois que ativei o Control Heartbeat do WP Rocket

Quase sempre porque a área Post editor foi configurada como Disable. O autosave depende da Heartbeat para salvar o rascunho sozinho. Troque Disable por Reduce activity na aba Heartbeat do WP Rocket que o autosave volta a funcionar.

### Qual a diferenca entre Reduce activity e Disable no WP Rocket

Reduce activity mantem a Heartbeat ativa, mas baixa o intervalo de 60 para 120 segundos, preservando autosave e post-locking. Disable corta a Heartbeat por completo naquela área, quebrando funções que dependem dela. A doc do WP Rocket recomenda reduzir, não desativar, quando você precisa dessas funções.

### Por que o Site Health não carrega depois que controlei a Heartbeat

A documentação do WP Rocket avisa que, se você desativar a Heartbeat no backend (Dashboard), a ferramenta Saude do site não consegue carregar os resultados dos testes. Mude o backend de Disable para Reduce activity para o Site Health voltar a funcionar.

### Desativar a Heartbeat quebra meus plugins de tempo real

Pode quebrar. Plugins que atualizam em tempo real (carrinho do WooCommerce, notificações, contadores ao vivo) dependem do sinal periodico da Heartbeat. Se um deles parou de atualizar, reative a Heartbeat na área correspondente (Frontend ou Backend) usando Reduce activity ou Do not limit.

### Com que frequencia a Heartbeat API roda por padrão no WordPress

Segundo a documentação do WP Rocket, a Heartbeat API opera em intervalos de 15 a 60 segundos, dependendo da tela. O modo Reduce activity do WP Rocket espaca esse intervalo para uma batida a cada 2 minutos (120 segundos).

### Controlar a Heartbeat realmente melhora a performance do site

Sim, em parte. Cada batida e uma chamada ao admin-ajax.php que consome CPU, entao reduzir a frequencia alivia o servidor em paineis muito abertos. O ganho e maior em hospedagem compartilhada, mas deve ser equilibrado para não desligar funções essenciais.

### Posso desativar a Heartbeat so no frontend com segurança

Na maioria dos sites sim, porque poucos temas usam Heartbeat no frontend. Mas se você roda um plugin que faz AJAX em tempo real no frontend, como atualização de carrinho, desativar ali quebra esse recurso. Teste antes e prefira Reduce activity se houver duvida.

**Fonte:** [WP Rocket Knowledge Base — Control WordPress Heartbeat API](https://docs.wp-rocket.me/article/1119-control-wordpress-heartbeat-api)
