Filtro de página · guia de instalação

Instalar o Filtro de página num domínio

Quem for aprovado vê a página real, quem for reprovado vê a isca — os dois no mesmo endereço. Leva cerca de 30 minutos, mais o tempo do certificado.

~30 min7 passosApache, LiteSpeed ou nginxWordPress ou HTML puro
Quem chegaVisitanteClica no anúncio e abre promo.sualoja.com.
Domínio públicoA borda GoatAdsO endereço do anúncio aponta pra cá, não pra sua hospedagem. Aqui se decide quem vê o quê.
OrigemSeu siteFica em origem.sualoja.com, um endereço diferente, que só a borda consegue abrir.

A página real não é configurada em lugar nenhum: a borda busca na origem o mesmo caminho que o visitante pediu. Só a isca é um destino fixo, e é a única página que você aponta.

01

Criar o subdomínio da origem

Na sua hospedagem, crie um subdomínio origem apontando para a mesma pasta do site que já existe — não deixe criar pasta nova. Na Hostinger: Domínios → Subdomínios, marcando “Usar diretório public_html”.

Depois de criar, abra origem.seudominio.com no navegador. Tem que aparecer o seu site normalmente.

Cuidado com IPv6

Se a hospedagem criar o subdomínio como ALIAS ou CNAME, ele pode arrastar endereços IPv6 que não respondem. O sintoma engana: o site funciona, mas cada visita leva 20 segundos. Prefira um registro A apontando direto para o IP do seu plano.

02

Ajustar o WordPress

Só se o site for WordPress. Ele guarda o próprio endereço no banco e monta todos os links a partir dele — sem este ajuste a página abre pelo domínio público, mas o código-fonte entrega o endereço da origem.

No wp-config.php, logo acima da linha /* That's all, stop editing! */:

wp-config.php
$guard_host = $_SERVER['HTTP_X_GUARD_HOST'] ?? '';
if ($guard_host && preg_match('/^[a-z0-9.-]+$/i', $guard_host)) {
    $_SERVER['HTTP_HOST'] = $guard_host;
    define('WP_HOME',    'https://' . $guard_host);
    define('WP_SITEURL', 'https://' . $guard_host);
    define('DISABLE_WP_CRON', true);
}
Este é o passo que mais custa caro

O DISABLE_WP_CRON não é opcional. Sem ele o WordPress chama a si mesmo através da borda a cada visita, com o PHP esperando o ciclo inteiro. São 20 segundos por visita, e nada acusa erro: o site simplesmente fica lento demais para vender.

Ele está dentro do if de propósito: o cron só é desligado nas visitas que chegam pela borda, e as tarefas agendadas do seu site principal continuam rodando.

Se você usa Elementor ou outro construtor

Este ajuste conserta os links que o WordPress monta na hora. O que você já inseriu pelo construtor — principalmente imagens — fica com o endereço da origem gravado no conteúdo. Não precisa caçar essas URLs: a regra 0 do passo 5 deixa imagem, css e js passarem sempre. Se as imagens somem na aba anônima mas aparecem logado, falta a regra 0.

03

Cadastrar o site no painel

No painel, em Filtro de página, crie um site novo:

CampoO que preencher
NomeSó para você identificar
Domínios públicospromo.seudominio.com
Onde o conteúdo real ficaorigem.seudominio.com
Página isca/paginaisca/ — só o caminho, com barra no começo e no fim
A barra no fim importa

O WordPress usa barra no final dos endereços. Escrevendo /paginaisca sem ela, a origem responde um redirecionamento a cada visita reprovada — e quando ele falha, o visitante recebe a página padrão em vez da sua isca.

04

Apontar o DNS

Depois de salvar, o painel mostra o bloco Domínios na borda com os registros a criar. Copie os valores daquela tela, naquele momento — eles mudam toda vez que o domínio é registrado de novo.

TipoNomeValorTTL
CNAMEpromoo endereço da borda que o painel mostra300
TXT_acme-challenge.promoum registro para cada valor que o painel listar300
Duas armadilhas, e as duas travam por horas

Crie exatamente os TXT que o painel listar — pode ser um, podem ser dois. Quando são dois, têm o mesmo nome e conteúdos diferentes: não é duplicata. Criando só um, o certificado fica pendente para sempre, sem mensagem de erro. O segundo pode aparecer depois do primeiro: clique em Atualizar estado e confira se a lista cresceu.

Use TTL 300 desde o começo. Os provedores sugerem 14400, que são 4 horas — e se você precisar corrigir um valor, o antigo fica preso nesse tempo no mundo inteiro.

Se o nome promo já tiver registros A ou AAAA, apague antes: um CNAME não convive com eles. Se o subdomínio existir na hospedagem, remova lá também, senão ela recria os registros.

O painel passa a mostrar Ativo em poucos minutos. O certificado sai em seguida.

05

Trancar as páginas de oferta

Este passo é o que faz o filtro valer alguma coisa. Sem ele, qualquer um digita o endereço e vê a página real — e nada do resto importa. Pegue o segredo do site no painel (botão de copiar, no cadastro).

Primeiro: qual servidor a sua origem usa?

Os blocos não são intercambiáveis. Rode isto e veja o que aparece depois de server:

terminal
curl -sI https://origem.SEUDOMINIO.com/ | grep -i server

LiteSpeed, Apache ou hcdn → um dos dois primeiros. nginx → o terceiro.

Vai no .htaccess da pasta do site, antes da linha # BEGIN WordPress. Traz as exceções de wp-login/wp-admin e do cookie de login — sem elas você tranca a si mesmo pra fora do painel.

.htaccess · WordPress
RewriteEngine On

# 0. Arquivos estáticos passam sempre (imagem/css/js não são o segredo)
RewriteRule \.(jpe?g|png|gif|webp|avif|svg|ico|css|js|mjs|woff2?|ttf|otf|eot|mp4|webm|map)$ - [L]

# 1. Fora estáticos, só a borda (com o segredo) ou o admin logado passam
RewriteCond %{REQUEST_URI} !^/(wp-login\.php|wp-admin) [NC]
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in [NC]
RewriteCond %{HTTP:x-guard-auth} !^SEU_SEGREDO_AQUI$
RewriteRule ^ - [F,L]

# 2. Documento NUNCA cacheia; estático cacheia forte (senão vira 429)
<IfModule mod_headers.c>
  SetEnvIf Request_URI "\.(jpe?g|png|gif|webp|avif|svg|ico|css|js|mjs|woff2?|ttf|otf|eot|mp4|webm|map)$" ESTATICO=1
  Header always set Cache-Control "private, no-store" env=!ESTATICO
  Header always set Cache-Control "public, max-age=31536000, immutable" env=ESTATICO
</IfModule>

Há um lugar para trocar: o SEU_SEGREDO_AQUI pelo segredo do painel. Nenhum endereço para digitar, nenhuma lista de páginas para manter.

Por que a regra 1 tranca tudo, e não só a oferta

Trancando só os nomes das páginas, toda oferta nova que você esquecesse de acrescentar nasceria aberta — com o sitemap do WordPress entregando o nome de graça. Trancando tudo, a oferta some de todos os endereços, e qualquer página futura já nasce protegida.

Por que existem as exceções

O cookie de login deixa passar quem já entrou (o editor carrega numa pré-visualização que não passa pela borda). O wp-login/wp-admin deixa a tela de login abrir. Nenhuma abre brecha na oferta: o cookie só nasce depois do login com senha.

Com Cloudflare na frente? A mesma trava

A origem fica em nuvem cinza (Somente DNS): quem serve é a hospedagem, e é ela que lê a trava. A borda busca a origem direto, com o segredo.

06

Conferir e testar

No painel do site, clique em Conferir instalação. São oito checagens — todas de coisas que, quando estão erradas, não geram mensagem de erro nenhuma:

  • 01A origem recusa quem vem de forasem isso o filtro é decorativo
  • 02A origem responde para a bordao segredo está certo dos dois lados
  • 03O documento não fica em cache públicoo vazamento por CDN
  • 04O domínio público passa pela bordaum raspador recebe coisa diferente
  • 05A validação de certificado passa livrea renovação não vai quebrar
  • 06A borda não atrasa a páginacompara com a origem sozinha
  • 07A página isca abre diretosem redirecionamento no caminho
  • 08Imagem, CSS e JS podem ir pro cachese estiverem como no-store, a hospedagem corta com 429

O teste de dez segundos

Com a regra “só quem vem de anúncio” ligada, abra os dois endereços no seu navegador:

dois endereços, mesma URL na barra
https://promo.seudominio.com/paginareal/?gclid=teste   →  página real
https://promo.seudominio.com/paginareal/               →  página isca

A barra continua mostrando /paginareal/ nos dois casos. É proxy, não redirecionamento — quem foi reprovado não tem como perceber que foi filtrado.

07

Fazer a conversão do Google Ads marcar

Não tem nada a ver com o filtro, mas é onde a campanha silenciosamente deixa de dar retorno: a venda acontece e o Google nunca fica sabendo de qual anúncio ela veio.

Por que quebra

O clique chega com um gclid, que o Google guarda num cookie do domínio da sua página. O checkout está em outro domínio e não enxerga esse cookie. Se o gclid não for junto na URL, a conversão fica órfã.

A correção

Um script que copia os parâmetros da URL para os links de saída. Cole no <head> da página de oferta:

<head> da oferta
<script>!function(){document.addEventListener("DOMContentLoaded",function(){
  var q = new URLSearchParams(window.location.search);
  var pular = ["k", "_verificar"];
  document.querySelectorAll("a").forEach(function(a){
    try {
      var u = new URL(a.href);
      q.forEach(function(v,k){
        if (pular.indexOf(k) < 0 && !u.searchParams.has(k)) u.searchParams.set(k, v);
      });
      a.href = u.toString();
    } catch(e) {}
  });
});}()</script>
A lista pular é obrigatória aqui

Todo tutorial de repasse de parâmetro copia tudo. Na sua página não pode: sem a lista, a chave de URL iria junto para o checkout — na URL dele, no referrer e no painel da plataforma. Se o seu parâmetro tiver outro nome, troque "k" pelo nome configurado no painel.

Ainda não marcou?

O checkout precisa ter a tag de conversão na página de obrigado (ou enviar pela API). E confira se sobrou tag antiga de outra conta: se a campanha roda numa conta e a conversão foi criada na outra, não marca. O filtro não atrapalha — a URL chega inteira, gclid incluído.

Este guia resolveu?
Conta pra gente, ajuda a melhorar o guia.

← Voltar para a central de ajuda