diff --git a/src/app/actions.ts b/src/app/actions.ts index 6d5c9f1..bc42312 100644 --- a/src/app/actions.ts +++ b/src/app/actions.ts @@ -34,7 +34,6 @@ export interface DetectedSystem { export interface DetectedTracker { name: string; - id?: string | null; } export async function extractMetaData(url: string, keyword?: string) { @@ -289,33 +288,17 @@ export async function extractMetaData(url: string, keyword?: string) { }); const detectedTrackers: DetectedTracker[] = []; - const uniqueTrackers = new Map(); + const uniqueTrackers = new Set(); - const addTracker = (name: string, id: string | null = null) => { - if (!uniqueTrackers.has(name)) { - uniqueTrackers.set(name, { name, id }); - } else { - const existing = uniqueTrackers.get(name)!; - if (!existing.id && id) { - existing.id = id; - uniqueTrackers.set(name, existing); - } - } - }; - - // Google Analytics + // Google Analytics / Tag Manager if ( htmlContent.includes("googletagmanager.com/gtag/js") || htmlContent.includes("google-analytics.com/analytics.js") ) { - const gaIdMatch = htmlContent.match(/(G|UA)-[A-Z0-9-]+/); - addTracker("Google Analytics", gaIdMatch ? gaIdMatch[0] : null); + uniqueTrackers.add("Google Analytics"); } - - // Google Tag Manager if (htmlContent.includes("googletagmanager.com/gtm.js")) { - const gtmIdMatch = htmlContent.match(/GTM-[A-Z0-9]+/); - addTracker("Google Tag Manager", gtmIdMatch ? gtmIdMatch[0] : null); + uniqueTrackers.add("Google Tag Manager"); } // Facebook Pixel @@ -323,8 +306,7 @@ export async function extractMetaData(url: string, keyword?: string) { htmlContent.includes("connect.facebook.net") || htmlContent.includes("fbq('init'") ) { - const fbIdMatch = htmlContent.match(/fbq\('init', '(\d+)'\)/); - addTracker("Facebook Pixel", fbIdMatch ? fbIdMatch[1] : null); + uniqueTrackers.add("Facebook Pixel"); } // Hotjar @@ -332,52 +314,42 @@ export async function extractMetaData(url: string, keyword?: string) { htmlContent.includes("static.hotjar.com") || htmlContent.includes("window.hj=window.hj||function()") ) { - const hjIdMatch = htmlContent.match(/hjid:(\d+)/); - addTracker("Hotjar", hjIdMatch ? hjIdMatch[1] : null); + uniqueTrackers.add("Hotjar"); } // HubSpot if (htmlContent.includes("js.hs-scripts.com")) { - const hsIdMatch = htmlContent.match(/js\.hs-scripts\.com\/(\d+)\.js/); - addTracker("HubSpot", hsIdMatch ? hsIdMatch[1] : null); + uniqueTrackers.add("HubSpot"); } // Segment if (htmlContent.includes("cdn.segment.com")) { - const segmentIdMatch = htmlContent.match(/analytics\.load\("([^"]+)"\)/); - addTracker("Segment", segmentIdMatch ? segmentIdMatch[1] : null); + uniqueTrackers.add("Segment"); } // Mixpanel if (htmlContent.includes("cdn.mxpnl.com")) { - const mixpanelIdMatch = htmlContent.match(/mixpanel\.init\("([^"]+)"\)/); - addTracker("Mixpanel", mixpanelIdMatch ? mixpanelIdMatch[1] : null); + uniqueTrackers.add("Mixpanel"); } // Vercel Analytics if (htmlContent.includes("/_vercel/insights/")) { - addTracker("Vercel Analytics"); + uniqueTrackers.add("Vercel Analytics"); } // Plausible if (htmlContent.includes("plausible.io/js/")) { - const plausibleDomainMatch = htmlContent.match(/data-domain="([^"]+)"/); - addTracker( - "Plausible", - plausibleDomainMatch ? plausibleDomainMatch[1] : null - ); + uniqueTrackers.add("Plausible"); } // Microsoft Clarity if (htmlContent.includes("clarity.ms/tag/")) { - const clarityIdMatch = htmlContent.match(/clarity\.ms\/tag\/([a-z0-9]+)/); - addTracker( - "Microsoft Clarity", - clarityIdMatch ? clarityIdMatch[1] : null - ); + uniqueTrackers.add("Microsoft Clarity"); } - detectedTrackers.push(...Array.from(uniqueTrackers.values())); + uniqueTrackers.forEach((tracker) => { + detectedTrackers.push({ name: tracker }); + }); return { data: { diff --git a/src/components/tracking-display.tsx b/src/components/tracking-display.tsx index 438e105..8c401d7 100644 --- a/src/components/tracking-display.tsx +++ b/src/components/tracking-display.tsx @@ -17,7 +17,6 @@ import { Code, Eye, } from "lucide-react"; -import { CopyButton } from "@/components/copy-button"; interface TrackingDisplayProps { trackers: DetectedTracker[]; @@ -102,19 +101,11 @@ export function TrackingDisplay({ trackers }: TrackingDisplayProps) {
-
+

{tracker.name}

{info.description}

- {tracker.id && ( -
-

- {tracker.id} -

- -
- )}
);