snitcher.com

Evaluation du site snitcher.com

Snitcher — Uncover your hidden website visitors | Snitcher

 Généré le 22 Mars 2026 16:53

Vieilles statistiques? UPDATE !

Le score est de 54/100

Optimisation du contenu

Titre

Snitcher — Uncover your hidden website visitors | Snitcher

Longueur : 58

Parfait, votre titre contient entre 10 et 70 caractères.

Description

Snitcher turns anonymous website visitors into actionable leads. Identify in-market companies, see buyer intent, and trigger workflows across your stack.

Longueur : 153

Génial, votre balise META description contient entre 70 et 160 caractères.

Mots-clefs

Très mauvais. Nous n'avons pas trouvé de balise META keywords sur votre page. Utilisez ce générateur gratuit de balises META en ligne pour créer des mots-clés.

Propriétés Open Graph

Bien, cette page profite des balises META Open Graph.

Propriété Contenu
title Snitcher — Uncover your hidden website visitors
description Snitcher turns anonymous website visitors into actionable leads. Identify in-market companies, see buyer intent, and trigger workflows across your stack.
type website
url https://snitcher.com/
site_name Snitcher
locale en_US
image https://snitcher.com/og-image.png
image:width 1200
image:height 630
image:alt Snitcher — Uncover your hidden website visitors

Niveaux de titre

H1 H2 H3 H4 H5 H6
1 6 1 8 6 0
  • [H1] Uncover your hiddenhidden(function(){const componentId = "pixel-reveal-7en0z8pek"; const decodeCharsStr = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9"; const cycles = 11; (function() { const container = document.getElementById(componentId); if (!container) return; if (container.hasAttribute('data-initialized')) return; container.setAttribute('data-initialized', 'true'); const decorativeElement = container.querySelector('.pixel-reveal-decorative'); if (!decorativeElement) return; const isAutoplay = container.getAttribute('data-autoplay') !== 'false'; const decodeChars = decodeCharsStr.split(','); // Brand color for pixel effects const BRAND_COLOR = '#4C4CFF'; // Animation configuration const SCRAMBLE_INTERVAL = 45; const SCRAMBLE_DURATION = cycles * SCRAMBLE_INTERVAL; const STAGGER_DELAY = 50; const REVEAL_STAGGER = 70; const SPARKLE_CHANCE = 0.3; // Pixel dot configuration const DOTS_PER_CHAR = 6; const DOT_SIZE = 3; // Track active timeouts/intervals for cleanup on hover mode let activeTimers = []; let activeIntervals = []; // Seeded random for consistent results function seededRandom(seed) { const x = Math.sin(seed * 12.9898 + seed * 78.233) * 43758.5453; return x - Math.floor(x); } // Create pixel dots for a character function createPixelDots(dotsContainer, charIndex) { dotsContainer.innerHTML = ''; for (let i = 0; i < DOTS_PER_CHAR; i++) { const dot = document.createElement('span'); dot.className = 'pixel-dot'; // Random position within character bounds const seed = charIndex * 100 + i; const x = seededRandom(seed) * 100; const y = seededRandom(seed + 1000) * 100; // Random animation phase for pulsing const phase = seededRandom(seed + 2000) * Math.PI * 2; const speed = 0.5 + seededRandom(seed + 3000) * 0.5; dot.style.cssText = ` left: ${x}%; top: ${y}%; width: ${DOT_SIZE}px; height: ${DOT_SIZE}px; --phase: ${phase}; --speed: ${speed}; `; dot.dataset.phase = String(phase); dot.dataset.speed = String(speed); dotsContainer.appendChild(dot); } } // Animate pixel dots with pulsing opacity (like hero dot grid) let dotsAnimationId = null; const allDots = []; function animateDots(time) { for (const { dot, phase, speed } of allDots) { // Dual sine wave for complex pulsing (matching hero dot grid) const wave1 = Math.sin(time * 0.003 * speed + phase); const wave2 = Math.sin(time * 0.003 * 0.7 + phase * 1.3); const combinedWave = wave1 * 0.7 + wave2 * 0.3; // Normalize and sharpen const normalizedWave = (combinedWave + 1) / 2; const sharpenedWave = Math.pow(normalizedWave, 1.5); // Occasional sparkle const sparkleChance = Math.sin(time * 0.001 + parseFloat(dot.dataset.phase || '0')) * 0.5 + 0.5; const sparkle = sparkleChance > 0.95 ? 1.5 : 1; const opacity = Math.min((0.2 + sharpenedWave * 0.8) * sparkle, 1); dot.style.opacity = String(opacity); } dotsAnimationId = requestAnimationFrame(animateDots); } function startDotsAnimation() { if (!dotsAnimationId) { dotsAnimationId = requestAnimationFrame(animateDots); } } function stopDotsAnimation() { if (dotsAnimationId) { cancelAnimationFrame(dotsAnimationId); dotsAnimationId = null; } } function clearAllTimers() { activeTimers.forEach(t => clearTimeout(t)); activeIntervals.forEach(i => clearInterval(i)); activeTimers = []; activeIntervals = []; } function resetAnimation() { clearAllTimers(); stopDotsAnimation(); allDots.length = 0; // Reset state attributes container.removeAttribute('data-animated'); container.removeAttribute('data-complete'); // Reset all decorative chars to their original state const chars = decorativeElement.querySelectorAll('.pixel-char'); chars.forEach((charEl) => { charEl.classList.remove('scrambling', 'revealed', 'sparkle'); const currentDisplay = charEl.querySelector('.pixel-char-current'); const finalChar = charEl.getAttribute('data-char') || ''; if (currentDisplay) currentDisplay.textContent = finalChar; const dotsContainer = charEl.querySelector('.pixel-dots'); if (dotsContainer) dotsContainer.innerHTML = ''; }); } function startPixelAnimation() { // If already animating in hover mode, reset first if (!isAutoplay) { resetAnimation(); } const chars = decorativeElement.querySelectorAll('.pixel-char'); const totalChars = chars.length; // Set brand color CSS variable container.style.setProperty('--brand-color', BRAND_COLOR); // Read computed text color for final state const rootColor = getComputedStyle(container).color; container.style.setProperty('--pixel-color', rootColor); // Mark as animated container.setAttribute('data-animated', 'true'); // Initialize pixel dots for each character chars.forEach((charEl, index) => { const dotsContainer = charEl.querySelector('.pixel-dots'); if (dotsContainer) { createPixelDots(dotsContainer, index); // Register dots for animation const dots = dotsContainer.querySelectorAll('.pixel-dot'); dots.forEach(dot => { allDots.push({ dot, phase: parseFloat(dot.dataset.phase || '0'), speed: parseFloat(dot.dataset.speed || '1') }); }); } }); // Start dots pulsing animation startDotsAnimation(); // Process each character chars.forEach((charEl, index) => { const currentDisplay = charEl.querySelector('.pixel-char-current'); const finalChar = charEl.getAttribute('data-char') || ''; const startDelay = index * STAGGER_DELAY; const revealTime = startDelay + SCRAMBLE_DURATION + (index * REVEAL_STAGGER); // Start scrambling after stagger delay const t = setTimeout(() => { charEl.classList.add('scrambling'); // Scramble at intervals with occasional sparkle let scrambleCount = 0; const scrambleInterval = setInterval(() => { const randomChar = decodeChars[Math.floor(Math.random() * decodeChars.length)]; currentDisplay.textContent = randomChar; // Random sparkle during scramble if (Math.random() < SPARKLE_CHANCE) { charEl.classList.add('sparkle'); const st = setTimeout(() => charEl.classList.remove('sparkle'), 150); activeTimers.push(st); } scrambleCount++; }, SCRAMBLE_INTERVAL); activeIntervals.push(scrambleInterval); // Stop scrambling and reveal final character const rt = setTimeout(() => { clearInterval(scrambleInterval); charEl.classList.remove('scrambling'); charEl.classList.add('revealed'); currentDisplay.textContent = finalChar; }, revealTime - startDelay); activeTimers.push(rt); }, startDelay); activeTimers.push(t); }); // Calculate total animation duration const lastCharIndex = totalChars - 1; const totalDuration = (lastCharIndex * STAGGER_DELAY) + SCRAMBLE_DURATION + (lastCharIndex * REVEAL_STAGGER) + 400; // Mark complete and cleanup const completeTimer = setTimeout(() => { container.setAttribute('data-complete', 'true'); stopDotsAnimation(); }, totalDuration); activeTimers.push(completeTimer); } if (isAutoplay) { // Autoplay mode: trigger on scroll into view (original behavior) if (container.hasAttribute('data-animated')) return; const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { startPixelAnimation(); observer.disconnect(); } }); }, { threshold: 0.1, rootMargin: '0px' } ); observer.observe(container); } else { // Hover mode: trigger on mouseenter, reset on mouseleave container.addEventListener('mouseenter', () => { startPixelAnimation(); }); container.addEventListener('mouseleave', () => { resetAnimation(); }); } })(); })(); website visitors
  • [H2] The system that powers every revenue moment
  • [H2] Own every stage from anonymous visit to closed deal
  • [H2] Trusted by GTM teams everywhere
  • [H2] Grow your business with Snitcher
  • [H2] Install in minutes, not months
  • [H2] Own every revenue moment
  • [H3] Seamlessly integrate with your entire stack
  • [H4] Find the revenue hiding in your traffic
  • [H4] Know who's ready before anyone else
  • [H4] Stay fast while everyone else slows down
  • [H4] Catch buyers while they're still deciding
  • [H4] See what's working before it's too late
  • [H4] Give clients an edge
  • [H4] Onboard clients in seconds
  • [H4] Work with GTM experts
  • [H5] Product
  • [H5] Journey
  • [H5] Teams
  • [H5] Use Cases
  • [H5] Resources
  • [H5] Company

Images

Nous avons trouvé 80 image(s) sur cette page Web.

19 attribut(s) alt sont vides ou manquants. Ajouter un texte alternatif permet aux moteurs de recherche de mieux comprendre le contenu de vos images.

Ratio texte/HTML

Ratio : 2%

le ratio de cette page texte/HTML est au-dessous de 15 pour cent, ce qui signifie que votre site manque de contenu textuel.

Flash

Parfait, aucun contenu FLASH n'a été détecté sur cette page.

Iframe

Dommage, vous avez des Iframes sur vos pages Web, cela signifie que son contenu ne peut pas être indexé par les moteurs de recherche.

Réécriture d'URLs

Bien. Vos liens sont optimisés!

Tiret bas dans les URLs

Parfait! Aucuns soulignements détectés dans vos URLs.

Liens dans la page

Nous avons trouvé un total de 36 lien(s) dont 0 lien(s) vers des fichiers

Texte d'ancre Type Juice
Account scoring Interne Passing Juice
Contact reveal Interne Passing Juice
GA4 enrichment Interne Passing Juice
Lead generation Interne Passing Juice
Marketing attribution Interne Passing Juice
Visitor identification Interne Passing Juice
About us Interne Passing Juice
Careers Interne Passing Juice
Talk to sales Interne Passing Juice
Customers Interne Passing Juice
Pricing Interne Passing Juice
Log in Interne Passing Juice
Start for free Interne Passing Juice
Platform Interne Passing Juice
Radar Interne Passing Juice
IP to Company Interne Passing Juice
Identify Interne Passing Juice
Signal Interne Passing Juice
Automate Interne Passing Juice
Engage Interne Passing Juice
Measure Interne Passing Juice
Sales Interne Passing Juice
Marketing Interne Passing Juice
RevOps Interne Passing Juice
Agency Interne Passing Juice
Explore program Interne Passing Juice
Explore integrations Interne Passing Juice
Blog Interne Passing Juice
Documentation Interne Passing Juice
Help center Interne Passing Juice
Changelog Interne Passing Juice
Contact Interne Passing Juice
Trust centre Interne Passing Juice
Privacy Policy Interne Passing Juice
Terms & Conditions Interne Passing Juice
Cookie Policy Interne Passing Juice

Mots-clefs

Nuage de mots-clefs

platform teams every integrations into snitcher sales pricing marketing employees

Cohérence des mots-clefs

Mot-clef Contenu Titre Mots-clefs Description Niveaux de titre
snitcher 12
into 6
sales 6
employees 6
pricing 6

Ergonomie

Url

Domaine : snitcher.com

Longueur : 12

Favicon

Génial, votre site web dispose d'un favicon.

Imprimabilité

Aucun style CSS pour optimiser l'impression n'a pu être trouvé.

Langue

Bien. Votre langue est : en.

Dublin Core

Cette page ne profite pas des métadonnées Dublin Core.

Document

Doctype

HTML 5

Encodage

Parfait. Votre charset est UTF-8.

Validité W3C

Erreurs : 0

Avertissements : 0

E-mail confidentialité

Attention! Au moins une adresse e-mail a été trouvée en texte clair. Utilisez une protection anti-spam gratuite pour cacher vos e-mails aux spammeurs.

HTML obsolètes

Génial! Nous n'avons pas trouvé de balises HTML obsolètes dans votre code.

Astuces vitesse

Excellent, votre site n'utilise pas de tableaux imbriqués.
Mauvais, votre site web utilise des styles css inline.
Mauvais, votre site web contient trop de fichiers CSS (plus de 4).
Parfait, votre site web contient peu de fichiers javascript.
Parfait : votre site tire parti de gzip.

Mobile

Optimisation mobile

Icône Apple
Méta tags viewport
Contenu FLASH

Optimisation

Sitemap XML

Votre site web dispose d’une sitemap XML, ce qui est optimal.

https://snitcher.com/sitemap-index.xml

Robots.txt

https://snitcher.com/robots.txt

Votre site dispose d’un fichier robots.txt, ce qui est optimal.

Mesures d'audience

Manquant

Nous n'avons trouvé aucun outil d'analytics sur ce site.

Un outil de mesure d'audience vous permet d'analyser l’activité des visiteurs sur votre site. Vous devriez installer au moins un outil Analytics. Il est souvent utile d’en rajouter un second, afin de confirmer les résultats du premier.

PageSpeed Insights


Dispositif
Les catégories

Free SEO Testing Tool

Free SEO Testing Tool est un outil gratuit de référencement qui vous aidera à analyser vos pages web