# Script do site: page views e cliques ligados ao contato

> Cole o script (js.bip.marketing/v1.0.0.js, com bip-namespace) no site para registrar visitas, também em SPA, e cliques em links externos. Quando o visitante vira contato, por formulário ou POST /api/leads com tracker, as visitas vão para o Feed, atualizam a Última Localização e valem 90 dias no critério Evento.

Fonte: https://wiki.bip.marketing/pt-br/script-do-site · Atualizado: 2026-10-09

<UseCaseMeta effort="api" plan="free" />

Saiba quais páginas seus contatos visitam e em quais links eles clicam. Com o script da BIP no site, cada contato ganha um histórico de visitas no próprio perfil: você sabe se a pessoa viu a página de preços ou clicou no link da loja parceira antes de falar com ela. E pode mandar uma campanha só para quem visitou aquela página.

<Checklist items="Acesso ao código do site, para colar uma tag script em todas as páginas|O namespace da sua conta, em Configurações → Geral|Um formulário de cadastro no site, ligado à BIP pelo seu servidor|Uma chave de API com Escrita de Contatos, guardada no servidor" />

## O que você vai conseguir

- As páginas que cada contato visita no **Feed** do perfil, inclusive em sites de página única (SPA).
- Cliques em links que levam para fora do seu site, registrados sem nenhuma configuração extra.
- Segmentos de quem visitou uma página, clicou num link externo ou voltou ao site por um link com UTM, com o critério **Evento**.
- A **Última Localização** (cidade) do contato atualizada a cada página visitada, pronta para o critério **Primeira / Última Localização** em **Segmentos**.
- Os parâmetros da URL, como `utm_source` e `utm_campaign`, guardados junto com a visita e prontos para filtrar.

## Como funciona

<Steps items="Cole o script com o namespace da sua conta|Ligue o visitante ao contato no cadastro|Acompanhe as visitas no Feed e segmente por página" />

O script dá a cada navegador um identificador de visitante anônimo, guardado por 10 anos. Ele fica disponível na página em `window.BIP_VISITOR_ID`.

Enquanto o visitante é anônimo, nada é guardado. Quando esse identificador é ligado a um contato, por um formulário ou por `POST /api/leads` com o campo `tracker`, cada visita e cada clique seguintes entram no perfil dessa pessoa.

<Callout type="warning">
O histórico começa quando o visitante vira contato. Visitas feitas antes do vínculo não ficam guardadas. Por isso, ligue o identificador já no primeiro cadastro.
</Callout>

O que o script registra sozinho:

- **Visualização**: ao carregar a página e a cada mudança de caminho em sites de página única (navegação por `pushState`, `replaceState` e os botões voltar e avançar).
- **Clique**: em links `<a>` que levam para outro endereço, como um link de `lojahorizonte.com.br` para `parceiro.com.br`. Um subdomínio diferente também conta. Links dentro do mesmo site e links que começam com `#` ou `javascript:` ficam de fora.

O envio usa `sendBeacon`, que não segura a página, e qualquer falha é silenciosa: o rastreamento nunca interrompe o seu site.

## Passo a passo

### 1. Copie o namespace da conta

1. Em **Configurações**, abra a aba **Geral**.
2. Em **Informações da Conta**, clique no botão de copiar ao lado de **Namespace**.

<Shot src="/img/script-do-site/1-pt-br.png" alt="Namespace da conta em Configurações, aba Geral, seção Informações da Conta" url="dash.bip.marketing/…/settings" />

### 2. Cole o script no site

Cole a tag abaixo em todas as páginas, antes de `</head>`, trocando `SEU_NAMESPACE` pelo namespace copiado:

<Copy label="HTML" code>
<script bip-namespace="SEU_NAMESPACE" src="https://js.bip.marketing/v1.0.0.js"></script>
</Copy>

Se a sua plataforma não aceita atributos na tag `script`, defina o namespace antes:

<Copy label="HTML (alternativa)" code>
<script>
  window.BIP_ACCOUNT_NAMESPACE = 'SEU_NAMESPACE';
</script>
<script src="https://js.bip.marketing/v1.0.0.js"></script>
</Copy>

Para conferir, abra o site publicado, abra o console do navegador e digite `window.BIP_VISITOR_ID`. Aparece o identificador do visitante.

<Callout type="tip">
Em endereços com `localhost`, o script não envia as visualizações automáticas. Teste no site publicado ou num ambiente de homologação com domínio próprio.
</Callout>

### 3. Ligue o visitante ao contato

No formulário de cadastro, newsletter ou login do seu site, leia `window.BIP_VISITOR_ID` e envie junto com os dados para o **seu servidor**. O servidor chama `POST /api/leads` com o campo `tracker`. A partir daí, as visitas desse navegador entram no perfil do contato.

- A chave de API fica só no servidor. O navegador nunca fala direto com a API.
- Se o script ainda não carregou, o `tracker` vai vazio e a BIP ignora o campo. O contato é criado ou atualizado normalmente.
- Cada navegador e aparelho tem seu identificador. Envie o `tracker` de novo a cada login: a BIP soma o novo identificador ao mesmo contato.
- O `tracker` também vale no `lead` como objeto em `/api/campaigns/trigger`: cria o contato, liga o visitante e dispara as boas-vindas na mesma chamada. Veja a [API](/pt-br/api).

O código pronto está em [Pronto para copiar](#pronto-para-copiar).

<PlanOnly plan="full">
Os **Formulários** da BIP enviam o identificador do visitante junto com o cadastro, sem código extra.
</PlanOnly>

### 4. Confira as visitas no contato

1. Em **Contatos**, abra um contato que se cadastrou pelo site.
2. No **Feed**, veja as linhas **Visualizado via Web** e **Clicado via Web**, com o endereço da página. Cada linha mostra também a cidade e o navegador.
3. Passe o mouse em **Parâmetros de Busca** para ver os parâmetros da URL daquela visita, como `utm_source`.

<Shot src="/img/script-do-site/4-pt-br.png" alt="Feed do contato com páginas visualizadas e cliques via web" url="dash.bip.marketing/…/leads" />

### 5. Segmente pela cidade da última visita

Cada página visitada atualiza a **Última Localização** do contato com a cidade de onde ele acessou. Use isso em **Segmentos**:

1. Em **Segmentos**, clique em **Novo Segmento**.
2. Em **Adicionar Critérios**, escolha **Primeira / Última Localização**.
3. Em **Tipo**, escolha **Última Localização (Cidade)**, **(Região)** ou **(País)**, ou **Última Localização (Geo)** para um raio no mapa.
4. Escolha o **Operador** e preencha o **Valor** (no tipo Geo, **Dentro do raio** e o círculo no mapa).
5. Feche o editor, confira a contagem e salve.

A localização é sempre a da cidade: um raio seleciona as cidades cujo centro fica dentro do círculo.

<Shot src="/img/script-do-site/5-pt-br.png" alt="Critério Primeira / Última Localização com o tipo Última Localização (Cidade)" url="dash.bip.marketing/…/segments/…" />

### 6. Segmente por página visitada

Cada visita e cada clique registrados pelo script entram no critério **Evento** de **Segmentos**, com origem **URL**. Para reunir quem visitou a página de preços:

1. Em **Contatos**, abra alguém que visitou a página e, no **Feed**, copie o endereço como ele aparece. Assim você usa o formato exato que a BIP guardou, com ou sem `www.`.
2. Em **Segmentos**, clique em **Novo Segmento** e abra o **Editor de Filtro**.
3. Em **Adicionar Critérios**, escolha **Evento**.
4. Em **Tipo de Evento**, escreva `view` (visita) ou `click` (clique num link externo).
5. Em **Origem**, escolha **URL** e cole o endereço em **URL**, como `https://lojahorizonte.com.br/precos`.
6. Para filtrar pelo UTM da visita, clique em **Adicionar metadatos**, escolha a **Chave** `searchParams.utm_source` (ou outra da lista), **Igual a** e o **Valor**, como `instagram`.
7. Feche o editor, confira a contagem e salve.

Entra quem tem pelo menos uma visita (ou clique) nos últimos 90 dias que bate com tudo o que você preencheu. Os detalhes de cada campo estão em [Segmentos](/pt-br/segmentos#evento).

<Shot src="/img/script-do-site/6-pt-br.png" alt="Critério Evento com origem URL, a página de encomendas e o UTM do Instagram em Metadados" url="dash.bip.marketing/…/segments/…" />

<PlanOnly plan="full">
Nos **Fluxos**, o passo **Filtro** e os **Critérios de entrada** usam o mesmo critério **Evento**, com os mesmos campos: as visitas e os cliques do site também decidem quem segue no fluxo.
</PlanOnly>

## Referência

### O que o script registra

| Evento       | Quando                                                   | O que fica guardado                                                                                       |
| ------------ | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| Visualização | Ao carregar a página e a cada mudança de caminho em SPA  | Página (sem `https://` e sem o que vem após `?`), parâmetros da URL, página de origem, navegador e cidade |
| Clique       | Clique em link `<a>` que leva para outro endereço (host) | Página onde houve o clique, link clicado, navegador e cidade                                              |

### Como as visitas aparecem no critério Evento

| Evento                                         | Tipo de Evento | Origem  | URL                          | Valor                             | Metadados                                                                                 |
| ---------------------------------------------- | -------------- | ------- | ---------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- |
| Visualização (inclusive `BIP_SEND_VIEW_EVENT`) | `view`         | **URL** | A página visitada            | —                                 | `searchParams.` + nome de cada parâmetro da URL (`searchParams.utm_campaign`), `referrer` |
| Clique (inclusive `BIP_SEND_CLICK_EVENT`)      | `click`        | **URL** | A página onde houve o clique | O link clicado ou a URL informada | `referrer`                                                                                |

A BIP guarda a página e o link sem `https://` e sem o que vem depois de `?`. No critério, cole o endereço completo: a BIP faz o mesmo corte e compara o resto, inclusive o `www.` e a barra final. `referrer` é a página de onde o visitante veio. Os eventos valem para os segmentos por 90 dias.

### Funções manuais

Disponíveis em `window` depois que o script carrega.

| Função                      | O que faz                                          | Quando usar                                                                                                 |
| --------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `BIP_SEND_VIEW_EVENT()`     | Envia uma visualização da página atual             | Telas que mudam sem trocar o caminho da URL: abas, etapas com `?etapa=`, conteúdo carregado na mesma página |
| `BIP_SEND_CLICK_EVENT(url)` | Envia um clique com a URL informada                | Botões que não são links `<a>`, ou links internos que você quer contar                                      |
| `BIP_SET(token)`            | Troca o identificador do visitante neste navegador | Usar um identificador que você já ligou ao contato, por exemplo após o login                                |
| `BIP_RESET()`               | Apaga o identificador deste navegador              | Logout em computador compartilhado: o próximo acesso começa anônimo                                         |

### Variáveis de leitura

| Variável                     | O que traz                                 |
| ---------------------------- | ------------------------------------------ |
| `window.BIP_VISITOR_ID`      | Identificador do visitante neste navegador |
| `window.BIP_LAST_EVENT_SENT` | O último evento enviado, para conferência  |

### O que muda no contato

| Onde                    | O que a visita faz                                                                             |
| ----------------------- | ---------------------------------------------------------------------------------------------- |
| **Feed**                | Uma linha **Visualizado via Web** ou **Clicado via Web**, com a página, a cidade e o navegador |
| **Última Localização**  | Passa a ser a cidade da página visitada (visualizações)                                        |
| **Parâmetros de Busca** | Os parâmetros da URL da visita, como `utm_source`, ficam guardados com a visualização          |
| **Segmentos**           | A visita e o clique entram no critério **Evento**, com origem **URL**, por 90 dias             |

### Instalação

| Item       | Valor                                                      |
| ---------- | ---------------------------------------------------------- |
| Script     | `https://js.bip.marketing/v1.0.0.js`                       |
| Namespace  | Atributo `bip-namespace` ou `window.BIP_ACCOUNT_NAMESPACE` |
| Onde colar | Todas as páginas, antes de `</head>`                       |
| localhost  | Sem visualizações automáticas                              |

## Pronto para copiar

### Script para todas as páginas

<Copy label="HTML" code>
<script bip-namespace="SEU_NAMESPACE" src="https://js.bip.marketing/v1.0.0.js"></script>
</Copy>

### Formulário que liga o visitante ao contato

No navegador, a Loja Horizonte envia o identificador junto com o cadastro da newsletter para o próprio servidor:

<Copy label="TypeScript (navegador)" code>
// Formulário de newsletter da Loja Horizonte
const form = document.querySelector<HTMLFormElement>('#newsletter');
form?.addEventListener('submit', async event => {
  event.preventDefault();
  const dados = new FormData(event.currentTarget as HTMLFormElement);
  await fetch('/api/newsletter', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      nome: dados.get('nome'),
      email: dados.get('email'),
      tracker: (window as any).BIP_VISITOR_ID ?? ''
    })
  });
});
</Copy>

No servidor, a rota `/api/newsletter` cria ou atualiza o contato na BIP com o `tracker`:

<Copy label="TypeScript (servidor)" code>
// Rota /api/newsletter no servidor da Loja Horizonte
const API_KEY = process.env.BIP_API_KEY ?? 'SUA_CHAVE_DE_API';
export async function cadastrarNewsletter(body: { nome: string; email: string; tracker: string }) {
  const res = await fetch('https://api.bip.marketing/api/leads', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-bip-api-key': API_KEY },
    body: JSON.stringify({
      name: body.nome,
      email: body.email,
      tracker: body.tracker,
      tags: ['newsletter']
    })
  });
  if (!res.ok) throw new Error(`BIP ${res.status}: ${await res.text()}`);
  return res.json(); // { id, ... }
}
</Copy>

A mesma chamada em curl, para testar:

<Copy label="curl" code>
curl -X POST https://api.bip.marketing/api/leads \
  -H "Content-Type: application/json" \
  -H "x-bip-api-key: SUA_CHAVE_DE_API" \
  -d '{"name": "Sofia Costa", "email": "sofia.costa@exemplo.com", "tracker": "ID_DO_VISITANTE", "tags": ["newsletter"]}'
</Copy>

### Clique em botão que não é link

<Copy label="TypeScript (navegador)" code>
// Botão "Falar com a loja" que abre o chat
document.querySelector('#falar-com-a-loja')?.addEventListener('click', () => {
  (window as any).BIP_SEND_CLICK_EVENT?.('https://lojahorizonte.com.br/atendimento');
});
</Copy>

### Segmento pela cidade da última visita

| Critério                      | Tipo                        | Operador | Valor    |
| ----------------------------- | --------------------------- | -------- | -------- |
| Primeira / Última Localização | Última Localização (Cidade) | Contém   | Curitiba |

### Segmento de quem visitou a página de preços

| Campo do Evento | Valor                                 |
| --------------- | ------------------------------------- |
| Tipo de Evento  | `view`                                |
| Origem          | URL                                   |
| URL             | `https://lojahorizonte.com.br/precos` |

### Segmento de quem voltou ao site por um link do Instagram

| Campo do Evento | Valor                                                 |
| --------------- | ----------------------------------------------------- |
| Tipo de Evento  | `view`                                                |
| Origem          | URL                                                   |
| Metadados       | Chave `searchParams.utm_source`, Igual a, `instagram` |

### Segmento de quem clicou no link da loja parceira

| Campo do Evento | Valor                         |
| --------------- | ----------------------------- |
| Tipo de Evento  | `click`                       |
| Origem          | URL                           |
| Valor           | Começa com, `parceiro.com.br` |

## Como medir

- **No navegador**: no console do site publicado, `window.BIP_VISITOR_ID` mostra o identificador e `window.BIP_LAST_EVENT_SENT` mostra o último evento enviado.
- **No contato**: em **Contatos**, abra quem se cadastrou pelo site. O **Feed** mostra cada **Visualizado via Web** e **Clicado via Web**, e a **Localização da Última Atividade** acompanha a cidade da última visita.
- **No segmento**: com o critério **Primeira / Última Localização** → **Última Localização (Cidade)**, a contagem mostra quantos contatos tiveram a última atividade em cada cidade. Com o critério **Evento**, origem **URL** e a página em **URL**, ela mostra quantos contatos visitaram aquela página nos últimos 90 dias.

## Perguntas frequentes

### As visitas de antes do cadastro aparecem?

Não. O histórico começa no momento em que o identificador do visitante é ligado ao contato. Por isso, envie o `tracker` já no primeiro formulário que a pessoa preenche.

### Por quanto tempo as visitas valem nos segmentos?

Por 90 dias. O critério **Evento** considera as visitas e os cliques desse período. Para marcar algo que vale para sempre, como "pediu orçamento", envie uma tag pelo seu servidor com `POST /api/leads`.

### Funciona em site de página única (React, Vue, Angular)?

Sim. O script percebe cada mudança de caminho na URL e registra uma nova visualização. Para telas que mudam sem trocar o caminho, como abas ou etapas no mesmo endereço, chame `BIP_SEND_VIEW_EVENT()`.

### Por que não vejo eventos quando testo no meu computador?

Em endereços com `localhost`, as visualizações automáticas não são enviadas. E o visitante precisa estar ligado a um contato. Teste no site publicado, faça um cadastro pelo formulário e navegue: as visitas aparecem no **Feed** do contato.

### O script pode quebrar o meu site?

Não. Qualquer falha de rastreamento é ignorada sem afetar a página, e os eventos saem com `sendBeacon`, que não espera resposta.

## Veja também

- [API da BIP: chaves, contatos, eventos e disparos](/pt-br/api)
- [Segmentos: os 11 critérios para filtrar contatos](/pt-br/segmentos)
- [Webhooks: leve cada envio para o seu sistema](/pt-br/webhooks)
- [Conformidade: portal do contato, opt-out e tópicos](/pt-br/conformidade)
- [Referência completa da API](https://bipmarketing.readme.io)
