--- import '../styles/global.css'; import Header from '../components/Header.astro'; import Footer from '../components/Footer.astro'; import ToastContainer from '../components/Toast.tsx'; import ExitIntentPopup from '../components/ExitIntentPopup.tsx'; import PushOptIn from '../components/PushOptIn.tsx'; import CompareBar from '../components/CompareBar.tsx'; import SearchModal from '../components/SearchModal.tsx'; import { getUserFromRequest } from '../lib/user-auth'; import { parseCookies } from '../lib/auth'; interface Props { title: string; description?: string; ogImage?: string; noindex?: boolean; canonical?: string; } const { title, description = 'Vergelijk sneaker prijzen bij alle Nederlandse shops. Vind de laagste prijs voor Nike, Adidas, New Balance en meer.', ogImage, noindex = false, canonical } = Astro.props; const canonicalURL = canonical ? new URL(canonical, 'https://sneakerpicks.nl') : new URL(Astro.url.pathname, 'https://sneakerpicks.nl'); const gtmId = import.meta.env.PUBLIC_GTM_ID || 'GTM-5Q876SX9'; const gscVerification = import.meta.env.PUBLIC_GSC_VERIFICATION || ''; const isStaging = import.meta.env.MODE === 'staging' || (import.meta.env.PORT === '3002'); // Logged-in user context for dataLayer const currentUser = getUserFromRequest(Astro.request); const klaviyoPublicKey = import.meta.env.KLAVIYO_PUBLIC_KEY || 'VKAGMV'; // Soft-identify: read sp_email cookie for returning visitors who aren't logged in const cookies = parseCookies(Astro.request.headers.get('cookie')); const softEmail = !currentUser ? (cookies['sp_email'] ? decodeURIComponent(cookies['sp_email']) : null) : null; ---
{/* Typekit: load async to avoid render-blocking */} {/* SEO: Staging protection */} {isStaging && } {!isStaging && noindex && } {!isStaging && !noindex && } {/* Canonical URL - always points to production */} {/* RSS feed */} {/* llms.txt — AI-readable site map */} {/* hreflang - NL only site */} {/* Open Graph */} {/* Twitter Card */}