logo
Começando

Divida o tráfego de um link para um teste A/B

Rotacionador de links para teste A/B — divida um link curto ou QR Code entre 2–4 landing pages por porcentagem, mantenha cada visitante na mesma variante, leia cliques e conversões por destino e encerre o teste — no app, na API ou no MCP.

Avatar for undefined
CodeQR Team
Equipe de Conteúdo

Ao final deste guia, um único link curto ou QR Code funciona como rotacionador de links: alterna os visitantes entre duas a quatro landing pages nas porcentagens que você definir, cada visitante continua vendo a mesma variante, e você lê cliques — e, com monitoramento de conversão, leads e vendas — por destino.

Disponibilidade

  • Plano: Business ou superior (preços).
  • Onde: construtor de links → Regras inteligentes → o botão Dividir tráfego (teste A/B) em qualquer regra, ou uma regra Todo o tráfego. Mesma seção no editor de QR Code para QR Codes dinâmicos do tipo URL.

Antes de começar

  • De duas a quatro URLs variantes. Dê a cada variante uma URL distinta (/precos e /precos-b, não a mesma URL duas vezes) — os resultados são reportados por URL.
  • Decida a fatia de cada variante. Os pesos são números inteiros de 1 a 100 e precisam somar 100.
  • Opcional: ative Monitoramento de conversão no link (disponível nos planos Pro e superiores, então todo workspace Business já tem). Isso estende de 1 hora para 30 dias o tempo em que um visitante fica preso à variante e permite comparar leads e vendas por variante.

Passos

  1. Abra Links e clique em Adicionar Link, ou abra um link existente e escolha Editar.
  2. Informe a variante A em URL de destino (ela também é o destino padrão se você desligar o teste).
  3. Ative Regras inteligentes.
  4. Na primeira regra, abra a lista de atributos e selecione Todo o tráfego. A regra passa ao modo de divisão, com dois campos URL da variante em 50 / 50.
  5. Informe as URLs das variantes A e B.
  6. Para testar mais páginas, clique em Adicionar variante (até 4). Os pesos são redistribuídos automaticamente; clique em Distribuir igualmente para reiniciá-los, ou digite os seus — a soma precisa ser 100.
  7. Clique em Criar link (ou Salvar link).

Uma regra Todo o tráfego com duas URLs variantes, https://example.com/pricing e https://example.com/pricing-annual-first, em 50 e 50, com os botões Adicionar variante e Distribuir igualmente

A mesma regra com três variantes depois de Distribuir igualmente: pesos 34, 33 e 33

Para dividir só uma parte do tráfego — por exemplo testar duas páginas para visitantes do Brasil e mandar o restante para uma única página — mantenha uma condição na regra (País é Brasil), ative Dividir tráfego (teste A/B) nessa regra e preencha as variantes. Regras com condição e divisão são avaliadas em ordem como qualquer outra; uma regra Todo o tráfego precisa ser a última.

Uma regra País é United States com Dividir tráfego (teste A/B) ativado e duas URLs variantes

Como os visitantes são distribuídos

Cada visitante é colocado num balde por um hash do link e do seu ID de clique; os baldes são repartidos conforme os pesos. O ID de clique fica num cookie (cq_id) gravado no caminho do link curto por 1 hora, ou 30 dias quando o Monitoramento de conversão está ativo, então a mesma pessoa continua caindo na mesma variante nesse período. Visitantes novos são espalhados conforme os pesos; com poucos cliques a divisão é só aproximadamente igual.

Leia os resultados

Abra Análise para o link. O card URLs lista os cliques por destino — uma linha por URL variante. Troque o evento no topo da página para Leads ou Vendas para comparar conversões por variante quando o monitoramento de conversão está ativo.

Analytics URLs card listing clicks per destination URL for one link

Encerre o teste

Desative Regras inteligentes (ou remova a regra) e salve: todo o tráfego vai para a URL de destino do link. Antes, aponte a URL de destino para a página vencedora, se ela ainda não for o padrão.

O mesmo pela API

Um teste A/B é uma regra sem condição e com split. Atualize um link existente:

curl -X PUT https://api.codeqr.io/links/cmswk759f0001j41i0vj1vmfq \
  -H "Authorization: Bearer codeqr_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "rules": [
      { "split": [
          { "url": "https://example.com/precos",       "weight": 50 },
          { "url": "https://example.com/precos-anual", "weight": 50 }
      ] }
    ]
  }'

Resposta (200 OK):

{
  "id": "cmswk759f0001j41i0vj1vmfq",
  "domain": "go.example.com",
  "key": "precos",
  "url": "https://example.com/precos",
  "archived": false,
  "expiresAt": null,
  "expiredUrl": null,
  "password": null,
  "externalId": null,
  "trackConversion": false,
  "proxy": false,
  "title": null,
  "description": null,
  "image": null,
  "video": null,
  "utm_source": null,
  "utm_medium": null,
  "utm_campaign": null,
  "utm_term": null,
  "utm_content": null,
  "rewrite": false,
  "doIndex": false,
  "banned": false,
  "flexible": false,
  "filled": false,
  "ios": null,
  "android": null,
  "geo": null,
  "rules": [
    {
      "split": [
        { "url": "https://example.com/precos", "weight": 50 },
        { "url": "https://example.com/precos-anual", "weight": 50 }
      ]
    }
  ],
  "userId": "cm73yc6m70002mtesulffnrgb",
  "folderId": null,
  "projectId": "cm73y7wm100008j24i1b137wr",
  "preRedirection": false,
  "pageId": null,
  "pageUrl": null,
  "isFormMandatory": false,
  "publicStats": false,
  "clicks": 0,
  "lastClicked": null,
  "leads": 0,
  "sales": 0,
  "saleAmount": 0,
  "createdAt": "2026-08-17T01:32:38.884Z",
  "updatedAt": "2026-08-17T01:32:59.384Z",
  "tagId": null,
  "comments": null,
  "notificationToken": null,
  "useAsTemplate": false,
  "tags": [],
  "shortLink": "https://go.example.com/precos",
  "webhookIds": [],
  "qrCode": "https://api.codeqr.io/qr?url=https://go.example.com/precos?qr=1"
}

Acrescente "trackConversion": true à mesma requisição para a janela de 30 dias. Uma divisão condicional é uma regra com attribute, operator, value e split (sem url). Para encerrar o teste, envie { "rules": null } — a resposta passa a mostrar "rules": null e todo o tráfego vai para url.

Validações que você pode encontrar (todas 400, código unprocessable_entity): Split weights must add up to 100; A rule needs either a destination url or a traffic split, never both; A rule without a condition must split traffic; A rule without a condition matches all traffic, so it must be the last one. Os pesos precisam ser inteiros entre 1 e 100; uma divisão tem de 2 a 4 variantes.

O mesmo pelo MCP

Peça ao agente, conectado a https://mcp.codeqr.io/mcp:

Rode um teste A/B no link cmswk759f0001j41i0vj1vmfq: 50% para https://example.com/precos e 50% para https://example.com/precos-anual.

update_link é chamada com:

{
  "linkId": "cmswk759f0001j41i0vj1vmfq",
  "rules": [
    { "split": [
        { "url": "https://example.com/precos", "weight": 50 },
        { "url": "https://example.com/precos-anual", "weight": 50 }
    ] }
  ]
}

Para encerrar o teste, peça ao agente que remova as regras; ele envia "rules": null. A descrição da tool declara os dois comportamentos, então os agentes fazem isso corretamente sem instrução extra.

O mesmo por automações

Nenhum módulo do Make, Zapier ou Pluga tem campo de regras. Use o módulo Make an API Call do Make ou um passo HTTP com a requisição PUT acima. Para ler os resultados de uma automação, chame GET https://api.codeqr.io/analytics?event=composite&groupBy=top_urls&linkId=<linkId>&interval=30d — devolve cliques, leads e vendas por URL de destino (identifique o link por linkId, ou acrescente type=link ao usar domain e key).

Como verificar

No terminal, cada requisição nova ganha seu próprio balde; o mesmo cookie sempre recebe a mesma variante:

for i in 1 2 3 4 5 6; do curl -sI https://go.example.com/precos | grep -i location; done
# uma mistura de https://example.com/precos e https://example.com/precos-anual

curl -sI -b "cq_id=visitanteteste001" https://go.example.com/precos | grep -i location
curl -sI -b "cq_id=visitanteteste001" https://go.example.com/precos | grep -i location
# o mesmo destino nas duas vezes

No navegador, abra o link curto numa janela anônima várias vezes (cada janela anônima é um visitante novo). Depois confira o card URLs em Análise.

Solução de problemas

Eu sempre caio na mesma variante

É a atribuição fixa: seu navegador guarda um cookie cq_id para este link curto por 1 hora (30 dias com monitoramento de conversão). Teste numa janela anônima ou em outro navegador, ou apague o cookie do domínio do link curto.

A divisão não está em 50/50

Com poucos cliques a divisão é só aproximadamente igual; ela converge conforme os cliques crescem. Visitantes recorrentes não ganham balde novo enquanto o cookie durar. Robôs de prévia de link e outros bots recebem uma variante, mas não contam como clique. Se uma variante fica consistentemente muito abaixo depois de centenas de cliques, confira se as duas páginas de destino carregam (uma página com falha pode parecer "menos visitas" na sua própria análise enquanto a CodeQR contou o clique).

Mudei os pesos e alguns visitantes recorrentes trocaram de página

Os pesos definem as faixas dos baldes; mudá-los move as fronteiras, então o balde de um visitante recorrente pode cair do outro lado. Defina os pesos antes de começar a compartilhar o link; para mudar depois, trate como um teste novo.

Aparece uma mensagem vermelha embaixo da divisão

As mensagens são Os pesos precisam somar 100%., Cada peso precisa ser um número inteiro entre 1 e 100. e Toda variante precisa de uma URL. Corrija os valores na regra; a mensagem some quando a divisão fica válida. Clique em Distribuir igualmente para reiniciar os pesos.

Duas variantes aparecem como uma linha só em Análise

Os resultados são por URL de destino. Duas variantes com a mesma URL são indistinguíveis; dê a cada variante a sua própria URL (por exemplo acrescente ?v=b).

A API devolve "A rule without a condition matches all traffic, so it must be the last one"

Mova a regra só de divisão para o fim do array rules. Regras com condição vêm antes.

Depois de 1 hora um visitante viu a outra página

Esperado sem monitoramento de conversão: a janela fixa é de 1 hora. Ative Monitoramento de conversão no link para uma janela de 30 dias.

Artigos relacionados