advogados02/Template-02/src/components/layout/Analytics.tsx
2026-05-15 14:25:30 +00:00

85 lines
2.8 KiB
TypeScript

import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
declare global {
interface Window {
gtag?: (...args: any[]) => void;
dataLayer?: any[];
fbq?: (...args: any[]) => void;
_fbq?: any;
}
}
export function Analytics() {
const location = useLocation();
// Inicialização dos Scripts (Executado apenas uma vez)
useEffect(() => {
// 1. Google Analytics (GA4)
const gaId = import.meta.env.VITE_GA_MEASUREMENT_ID;
if (gaId && !document.getElementById('ga-script')) {
const script1 = document.createElement('script');
script1.async = true;
script1.src = `https://www.googletagmanager.com/gtag/js?id=${gaId}`;
script1.id = 'ga-script';
document.head.appendChild(script1);
const script2 = document.createElement('script');
script2.innerHTML = `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${gaId}');
`;
document.head.appendChild(script2);
}
// 2. Facebook Pixel
const fbPixelId = import.meta.env.VITE_FB_PIXEL_ID;
if (fbPixelId && !document.getElementById('fb-pixel-script')) {
const script = document.createElement('script');
script.id = 'fb-pixel-script';
script.innerHTML = `
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '${fbPixelId}');
fbq('track', 'PageView');
`;
document.head.appendChild(script);
}
// 3. Google AdSense
const adsenseId = import.meta.env.VITE_ADSENSE_CLIENT_ID;
if (adsenseId && !document.getElementById('adsense-script')) {
const script = document.createElement('script');
script.id = 'adsense-script';
script.async = true;
script.src = `https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=${adsenseId}`;
script.crossOrigin = 'anonymous';
document.head.appendChild(script);
}
}, []);
// Rastreamento de Mudança de Rota (Page Views)
useEffect(() => {
const gaId = import.meta.env.VITE_GA_MEASUREMENT_ID;
if (gaId && window.gtag) {
window.gtag('config', gaId, {
page_path: location.pathname + location.search,
});
}
const fbPixelId = import.meta.env.VITE_FB_PIXEL_ID;
if (fbPixelId && typeof window.fbq === 'function') {
window.fbq('track', 'PageView');
}
}, [location]);
return null; // Este componente não renderiza nada na tela
}