Gerador Profissional de Código Pixel Meta

Gerador Profissional de Código Pixel Meta

Maximize o desempenho do seu Meta Ads com rastreamento avançado e otimizado

Encontre no Meta Business Manager > Eventos > Gerenciador de Eventos
Recomendado para rastreamento avançado server-side
WordPress
Shopify
Wix
Código Custom
Eventos de E-commerce 7
Eventos de Engajamento 5
Eventos de Lead Generation 5
Eventos Personalizados Avançados 5

Checklist de Otimização para Meta Ads

Siga estas etapas para garantir que seu Pixel Meta esteja configurado corretamente e maximizando os resultados de suas campanhas.

Verificar Instalação do Pixel

Instale a extensão Facebook Pixel Helper no Chrome e verifique se o pixel está sendo carregado corretamente em todas as páginas do seu site.

Ativar Conversions API

Configure a Conversions API além do pixel do navegador para rastreamento server-side e melhore a precisão dos dados com as mudanças de privacidade.

Verificar Domínio

No Business Manager, vá em Configurações de Negócios > Domínios e verifique seu domínio para garantir continuidade de dados com as mudanças do iOS.

Configurar Eventos Agregados

No Gerenciador de Eventos, configure até 8 eventos prioritários para usuários do iOS 14+ sob "Eventos Agregados". Priorize conversões importantes.

Testar Eventos em Modo Teste

Use a ferramenta "Test Events" para verificar se os eventos estão sendo recebidos corretamente, sem afetar os dados de produção.

Criar Conversões Personalizadas

Configure conversões personalizadas baseadas em URLs específicos ou parâmetros de eventos para segmentar melhor suas audiências.

Ativar Advanced Matching

No Gerenciador de Eventos, ative o Advanced Matching para melhorar a identificação de usuários com dados como email, telefone e nome (hashed).

Usar Parâmetros Enriquecidos

Envie detalhes adicionais com seus eventos como valor, moeda, conteúdo e categorias para melhorar a segmentação de audiência.

Configurar Catálogo de Produtos

Para e-commerces, crie e mantenha um catálogo de produtos atualizado para habilitar anúncios dinâmicos de produtos.

Configurar Atribuição de Conversões

No Gerenciador de Eventos, ajuste as configurações de atribuição para determinar como o Meta atribui conversões às suas campanhas.

Otimizar para Eventos Valiosos

Configure suas campanhas para otimizar para os eventos de conversão de maior valor para seu negócio, não apenas cliques ou visualizações.

Monitorar Diagnósticos de Pixel

Regularmente verifique a seção "Diagnósticos" no Gerenciador de Eventos para identificar e corrigir problemas com seu pixel.

Código copiado para a área de transferência!
`; return code; } // Função para gerar código PHP do Conversions API function generatePHPCode(pixelId, apiToken, events, enhancedTracking) { let code = `event_source_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $this->event_id = 'pixel_pro_' . uniqid() . '_' . time(); // Inicializar dados do usuário $this->collectUserData(); } /** * Coleta dados básicos do usuário para Advanced Matching */ private function collectUserData() { // Dados do cliente $this->user_data = [ 'client_ip_address' => $this->getClientIp(), 'client_user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? null, ]; // Adicionar dados da sessão se disponíveis if (isset($_SESSION['user_email'])) { $this->user_data['em'] = hash('sha256', strtolower(trim($_SESSION['user_email']))); } if (isset($_SESSION['user_phone'])) { $phone = preg_replace('/[^0-9]/', '', $_SESSION['user_phone']); $this->user_data['ph'] = hash('sha256', $phone); } if (isset($_SESSION['user_first_name'])) { $this->user_data['fn'] = hash('sha256', strtolower(trim($_SESSION['user_first_name']))); } if (isset($_SESSION['user_last_name'])) { $this->user_data['ln'] = hash('sha256', strtolower(trim($_SESSION['user_last_name']))); } // Incluir external_id se houver (ID do cliente no seu sistema) if (isset($_SESSION['user_id'])) { $this->user_data['external_id'] = $_SESSION['user_id']; } // Coletar dados do POST para formulários if ($_SERVER['REQUEST_METHOD'] === 'POST') { $this->extractFormData($_POST); } } /** * Extrai e aplica hash em dados de formulário */ private function extractFormData($post_data) { // Mapear campos comuns de formulários $email_fields = ['email', 'user_email', 'your-email', 'email_address']; $phone_fields = ['phone', 'user_phone', 'your-phone', 'telefone', 'phone_number']; $fname_fields = ['first_name', 'fname', 'your-first-name', 'nome']; $lname_fields = ['last_name', 'lname', 'your-last-name', 'sobrenome']; // Verificar cada conjunto de campos possíveis foreach ($email_fields as $field) { if (!empty($post_data[$field])) { $this->user_data['em'] = hash('sha256', strtolower(trim($post_data[$field]))); break; } } foreach ($phone_fields as $field) { if (!empty($post_data[$field])) { $phone = preg_replace('/[^0-9]/', '', $post_data[$field]); $this->user_data['ph'] = hash('sha256', $phone); break; } } foreach ($fname_fields as $field) { if (!empty($post_data[$field])) { $this->user_data['fn'] = hash('sha256', strtolower(trim($post_data[$field]))); break; } } foreach ($lname_fields as $field) { if (!empty($post_data[$field])) { $this->user_data['ln'] = hash('sha256', strtolower(trim($post_data[$field]))); break; } } // Se houver apenas um campo para nome completo, dividir em primeiro e último if (empty($this->user_data['fn']) && empty($this->user_data['ln'])) { $name_fields = ['name', 'your-name', 'full_name', 'fullname']; foreach ($name_fields as $field) { if (!empty($post_data[$field])) { $name_parts = explode(' ', $post_data[$field]); if (count($name_parts) > 0) { $this->user_data['fn'] = hash('sha256', strtolower(trim($name_parts[0]))); if (count($name_parts) > 1) { $this->user_data['ln'] = hash('sha256', strtolower(trim(end($name_parts)))); } } break; } } } } /** * Obtém o IP do cliente */ private function getClientIp() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // Pode conter múltiplos IPs, pegar o primeiro $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); return trim($ips[0]); } else { return $_SERVER['REMOTE_ADDR'] ?? ''; } } /** * Define dados personalizados para o evento */ public function setCustomData($data) { $this->custom_data = array_merge($this->custom_data, $data); return $this; } /** * Define dados do usuário */ public function setUserData($data) { // Valores que precisam de hash $hash_fields = ['em', 'ph', 'fn', 'ln', 'ct', 'st', 'zp', 'country']; foreach ($data as $key => $value) { if (in_array($key, $hash_fields) && !empty($value)) { // Aplicar limpeza e hash aos campos confidenciais if ($key === 'em') { // Email $this->user_data[$key] = hash('sha256', strtolower(trim($value))); } elseif ($key === 'ph') { // Telefone $phone = preg_replace('/[^0-9]/', '', $value); $this->user_data[$key] = hash('sha256', $phone); } else { // Outros campos $this->user_data[$key] = hash('sha256', strtolower(trim($value))); } } else { $this->user_data[$key] = $value; } } return $this; } /** * Envia um evento standard para o Meta */ public function trackEvent($event_name, $additional_data = []) { // Verificar requisitos mínimos if (empty($this->pixel_id) || empty($this->access_token)) { return ['error' => 'Missing pixel_id or access_token']; } // Mesclar dados adicionais com os custom_data existentes $this->custom_data = array_merge($this->custom_data, $additional_data); // Construir payload do evento $event = [ 'event_name' => $event_name, 'event_time' => time(), 'event_id' => $this->event_id . '_' . $event_name, 'event_source_url' => $this->event_source_url, 'action_source' => 'website', 'user_data' => $this->user_data ]; // Adicionar custom_data se houver if (!empty($this->custom_data)) { $event['custom_data'] = $this->custom_data; } // Configurar e enviar a requisição return $this->sendRequest([$event]); } /** * Envia múltiplos eventos em um único lote */ public function trackBatchEvents($events) { if (empty($events) || !is_array($events)) { return ['error' => 'No events provided or invalid format']; } $formatted_events = []; foreach ($events as $event) { if (empty($event['event_name'])) { continue; } $formatted_event = [ 'event_name' => $event['event_name'], 'event_time' => $event['event_time'] ?? time(), 'event_id' => $event['event_id'] ?? $this->event_id . '_' . uniqid(), 'event_source_url' => $event['event_source_url'] ?? $this->event_source_url, 'action_source' => 'website', 'user_data' => $this->user_data ]; // Adicionar custom_data específico do evento if (!empty($event['custom_data'])) { $formatted_event['custom_data'] = $event['custom_data']; } $formatted_events[] = $formatted_event; } return $this->sendRequest($formatted_events); } /** * Envia a requisição para a API do Meta */ private function sendRequest($events) { $url = "https://graph.facebook.com/{$this->api_version}/{$this->pixel_id}/events?access_token={$this->access_token}"; $data = [ 'data' => $events ]; // Inicializar cURL $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); // Configurações adicionais para ambientes de produção curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 15); // Executar a requisição $response = curl_exec($ch); $error = curl_error($ch); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); // Tratar resposta if ($error) { error_log("Meta Conversions API Error: " . $error); return ['error' => $error]; } return [ 'status_code' => $status_code, 'response' => json_decode($response, true) ]; } } /** * Exemplos de uso - descomente conforme necessário */ // === EXEMPLO 1: RASTREANDO PAGEVIEW === /* $meta = new MetaConversionsAPI(); $result = $meta->trackEvent('PageView'); */ // === EXEMPLO 2: RASTREANDO VISUALIZAÇÃO DE PRODUTO === /* $meta = new MetaConversionsAPI(); $meta->setCustomData([ 'content_name' => 'Nome do Produto', 'content_ids' => ['123456'], 'content_type' => 'product', 'value' => 99.90, 'currency' => 'BRL' ]); $result = $meta->trackEvent('ViewContent'); */ // === EXEMPLO 3: RASTREANDO COMPRA === /* $meta = new MetaConversionsAPI(); // Definir dados do usuário para Advanced Matching $meta->setUserData([ 'em' => 'cliente@exemplo.com', // Será aplicado hash automaticamente 'ph' => '5511999999999', // Será aplicado hash automaticamente 'fn' => 'João', // Será aplicado hash automaticamente 'ln' => 'Silva' // Será aplicado hash automaticamente ]); // Definir detalhes da compra $meta->setCustomData([ 'content_ids' => ['123', '456'], 'contents' => [ ['id' => '123', 'quantity' => 1, 'item_price' => 49.90], ['id' => '456', 'quantity' => 2, 'item_price' => 29.90] ], 'value' => 109.70, 'currency' => 'BRL', 'num_items' => 3, 'order_id' => '100001' ]); // Enviar o evento $result = $meta->trackEvent('Purchase'); */ // === EXEMPLO 4: RASTREANDO LEAD DE FORMULÁRIO === /* $meta = new MetaConversionsAPI(); $meta->setCustomData([ 'lead_type' => 'Formulário de Contato', 'content_name' => 'Página de Contato', 'form_id' => 'contact-form-7' ]); $result = $meta->trackEvent('Lead'); */ // === EXEMPLO 5: RASTREANDO MÚLTIPLOS EVENTOS EM LOTE === /* $meta = new MetaConversionsAPI(); $events = [ [ 'event_name' => 'PageView', 'event_time' => time() ], [ 'event_name' => 'ViewContent', 'event_time' => time(), 'custom_data' => [ 'content_name' => 'Nome do Produto', 'content_ids' => ['123456'], 'content_type' => 'product' ] ] ]; $result = $meta->trackBatchEvents($events); */ // === IMPLEMENTAÇÃO PARA WOOCOMMERCE (EXEMPLO) === /* // Rastrear Purchase em WooCommerce - coloque isto na página de agradecimento if (function_exists('is_wc_endpoint_url') && is_wc_endpoint_url('order-received')) { global $wp; // Obter ID do pedido da URL $order_id = absint($wp->query_vars['order-received']); if ($order_id > 0) { $order = wc_get_order($order_id); // Verificar se o pedido existe e não foi rastreado ainda if ($order && !get_post_meta($order_id, '_meta_purchase_tracked', true)) { // Coletar itens do pedido $contents = []; $content_ids = []; $num_items = 0; foreach ($order->get_items() as $item) { $product_id = $item->get_product_id(); $quantity = $item->get_quantity(); $price = $order->get_item_total($item); $content_ids[] = (string)$product_id; $contents[] = [ 'id' => (string)$product_id, 'quantity' => $quantity, 'item_price' => $price ]; $num_items += $quantity; } // Inicializar API e enviar evento $meta = new MetaConversionsAPI(); // Definir dados do cliente $meta->setUserData([ 'em' => $order->get_billing_email(), 'ph' => $order->get_billing_phone(), 'fn' => $order->get_billing_first_name(), 'ln' => $order->get_billing_last_name(), 'st' => $order->get_billing_state(), 'ct' => $order->get_billing_city(), 'zp' => $order->get_billing_postcode() ]); // Definir dados da compra $meta->setCustomData([ 'content_ids' => $content_ids, 'contents' => $contents, 'value' => (float)$order->get_total(), 'currency' => $order->get_currency(), 'num_items' => $num_items, 'order_id' => $order->get_order_number() ]); // Enviar evento $result = $meta->trackEvent('Purchase'); // Marcar como rastreado para evitar duplicação update_post_meta($order_id, '_meta_purchase_tracked', true); } } } */ ?>`; return code; } });