1<!DOCTYPE html> 2<html lang="nl"> 3 <head> 4 <meta charset="UTF-8" /> 5 <!-- Security: dwing upgrade van legacy http-subresources af naar https --> 6 <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" /> 7 <meta name="referrer" content="strict-origin-when-cross-origin" /> 8 <meta http-equiv="X-Content-Type-Options" content="nosniff" /> 9 <!-- Theme preference: zet html.class vóór React mount om flash te voorkomen --> 10
10<script> 11 (function () { 12 try { 13 var k = "autosleutel-theme"; 14 var saved = localStorage.getItem(k); 15 var t = saved; 16 if (!t || t === "system") { 17 t = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; 18 } 19 document.documentElement.classList.remove("light", "dark"); 20 document.documentElement.classList.add(t); 21 } catch (e) { /* localStorage blocked */ } 22 })(); 23 </script>
23 24 <meta name="google-site-verification" content="TFyE4spv7vpIzNm0fOTPdCQJCRFBSiRWnVfxOuMh5Qk" /> 25 <meta name="google-site-verification" content="cEYiDPVF69hKjiN0xXU_HgK5EFZAQWFSZEhF9SqhJeE" /> 26 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, viewport-fit=cover" /> 27 <title>Autosleutel Limburg - Autosleutels, Diagnose & Codering</title> 28 <meta name="description" content="Autosleutel Limburg - Specialist in het inleren, coderen en vervangen van autosleutels, -modules & -onderdelen. Op locatie door héél Limburg."> 29 <!-- Canonical wordt per route gezet door <TenantHead> / react-helmet-async. 30 Statische canonical hier weggehaald: die stond op ELKE route eerst in de DOM, 31 waardoor Google NL-subpagina's onder de homepage-URL indexeerde. --> 32 33 <meta name="author" content="Autosleutel Limburg" /> 34 <meta name="keywords" content="autosleutel, autosleutel bijmaken, autosleutel verloren, sleutel coderen, sleutel inleren, autodiagnose, Limburg, autosleutel specialist"> 35 36 <meta name="theme-color" content="#1a1a1a" /> 37 <meta name="apple-mobile-web-app-capable" content="yes" /> 38 <meta name="apple-mobile-web-app-status-bar-style" content="default" /> 39 <meta name="apple-mobile-web-app-title" content="Autosleutel Limburg" /> 40 <meta name="mobile-web-app-capable" content="yes" /> 41 <meta name="format-detection" content="telephone=yes" /> 42 43 <link rel="icon" id="favicon-primary" type="image/png" href="/images/asl-icon.png"> 44 <link rel="apple-touch-icon" id="favicon-apple" href="/images/asl-icon.png" /> 45
45<script> 46 // Per-tenant favicon swap â runs before React boots so first paint, browser tab, 47 // /favicon.ico fallback and Apple home-screen icon all reflect the active brand. 48 (function () { 49 try { 50 var host = (location.hostname || "").toLowerCase().replace(/^www\./, ""); 51 var autodataHosts = [ 52 "autodataservice.nl", 53 "autodata-service.online", 54 "autodatanederland.online" 55 ]; 56 var tuningHosts = [ 57 "tuning.autodataservice.nl", 58 "autotuning-service.nl", 59 "tuningservice.nl" 60 ]; 61 var iconHref = null; 62 var appleTitleText = null; 63 if (autodataHosts.indexOf(host) !== -1) { 64 iconHref = "/autodata-favicon.png?v=2026062901"; 65 appleTitleText = "Auto Data Service"; 66 } else if (tuningHosts.indexOf(host) !== -1) { 67 iconHref = "/tuning-favicon.png?v=2026070801"; 68 appleTitleText = "Tuningservice.nl"; 69 } 70 if (iconHref) { 71 var primary = document.getElementById("favicon-primary"); 72 var apple = document.getElementById("favicon-apple"); 73 if (primary) primary.href = iconHref; 74 if (apple) apple.href = iconHref; 75 var shortcut = document.createElement("link"); 76 shortcut.rel = "shortcut icon"; 77 shortcut.type = "image/png"; 78 shortcut.href = iconHref; 79 document.head.appendChild(shortcut); 80 var appleTitle = document.querySelector('meta[name="apple-mobile-web-app-title"]'); 81 if (appleTitle && appleTitleText) appleTitle.setAttribute("content", appleTitleText); 82 } 83 } catch (e) { /* no-op */ } 84 })(); 85 </script>
85 86 87 <link rel="dns-prefetch" href="//fonts.googleapis.com" /> 88 <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin /> 89 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 90 <!-- Backend/storage-origin alvast verbinden: hero-afbeeldingen en eerste queries starten sneller. --> 91 <link rel="preconnect" href="https://esnwtjdfqhukvhfrxuat.supabase.co" crossorigin /> 92 <link rel="dns-prefetch" href="//esnwtjdfqhukvhfrxuat.supabase.co" /> 93 94 <!-- Fonts niet render-blokkerend laden: eerst async als print-stylesheet, daarna activeren. --> 95 <link 96 rel="stylesheet" 97 href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" 98 media="print" 99 onload="this.media='all';this.onload=null;" 100 /> 101 <noscript> 102 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet" /> 103 </noscript> 104 105 106 <meta property="og:type" content="website" /> 107 <meta property="og:url" content="https://autosleutellimburg.nl" /> 108 <meta property="og:locale" content="nl_NL" /> 109 <meta property="og:site_name" content="Autosleutel Limburg" /> 110 111 112 <meta property="og:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/qUelbFCIdVgORLU20l1kpBvuxLg1/social-images/social-1776288222715-asl_icon.webp"> 113 <meta property="og:image:width" content="1200" /> 114 <meta property="og:image:height" content="630" /> 115 <meta name="twitter:image" content="https://storage.googleapis.com/gpt-engineer-file-uploads/qUelbFCIdVgORLU20l1kpBvuxLg1/social-images/social-1776288222715-asl_icon.webp"> 116 117 <meta name="twitter:card" content="summary_large_image" /> 118 119 120 121
121<script type="application/ld+json" id="asl-localbusiness-jsonld"> 122 { 123 "@context": "https://schema.org", 124 "@type": "LocalBusiness", 125 "name": "Autosleutel Limburg", 126 "alternateName": "autosleutellimburg.nl", 127 "description": "Specialist in het inleren, coderen en vervangen van autosleutels, -modules & -onderdelen. Op locatie door héél Limburg.", 128 "slogan": "Specialist in autosleutels, diagnose & codering", 129 "url": "https://autosleutellimburg.nl", 130 "logo": "https://autosleutellimburg.nl/images/asl-icon.png", 131 "telephone": "+31432340566", 132 "email": "[email protected]", 133 "address": { 134 "@type": "PostalAddress", 135 "addressRegion": "Limburg", 136 "addressCountry": "NL" 137 }, 138 "areaServed": { 139 "@type": "State", 140 "name": "Limburg" 141 }, 142 "openingHoursSpecification": [ 143 { 144 "@type": "OpeningHoursSpecification", 145 "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], 146 "opens": "08:00", 147 "closes": "18:00" 148 }, 149 { 150 "@type": "OpeningHoursSpecification", 151 "dayOfWeek": "Saturday", 152 "opens": "09:00", 153 "closes": "14:00" 154 } 155 ], 156 "priceRange": "â¬-â¬â¬â¬", 157 "paymentAccepted": "Cash, Credit Card, Debit Card", 158 "currenciesAccepted": "EUR", 159 "hasOfferCatalog": { 160 "@type": "OfferCatalog", 161 "name": "Autosleutel Diensten", 162 "itemListElement": [ 163 { 164 "@type": "Offer", 165 "itemOffered": { 166 "@type": "Service", 167 "name": "Autosleutel Bijmaken", 168 "description": "Nieuwe autosleutel bijmaken en inleren voor alle merken" 169 } 170 }, 171 { 172 "@type": "Offer", 173 "itemOffered": { 174 "@type": "Service", 175 "name": "Sleutel Coderen & Inleren", 176 "description": "Professioneel coderen en inleren van autosleutels op dealerniveau" 177 } 178 }, 179 { 180 "@type": "Offer", 181 "itemOffered": { 182 "@type": "Service", 183 "name": "Autodiagnose", 184 "description": "Geavanceerde autodiagnose en storing uitlezen" 185 } 186 } 187 ] 188 } 189 } 190 </script>
190 191 <meta property="og:title" content="Autosleutel Limburg - Autosleutels, Diagnose & Codering"> 192 <meta name="twitter:title" content="Autosleutel Limburg - Autosleutels, Diagnose & Codering"> 193 <meta property="og:description" content="Autosleutel Limburg - Specialist in het inleren, coderen en vervangen van autosleutels, -modules & -onderdelen. Op locatie door héél Limburg."> 194 <meta name="twitter:description" content="Autosleutel Limburg - Specialist in het inleren, coderen en vervangen van autosleutels, -modules & -onderdelen. Op locatie door héél Limburg."> 195 <!-- Google Tag Manager â geladen ná first paint (idle) zodat tags de LCP niet vertragen. 196 dataLayer bestaat direct, dus pushes vóór het laden gaan niet verloren. --> 197
197<script> 198 (function () { 199 window.dataLayer = window.dataLayer || []; 200 window.gtag = window.gtag || function () { dataLayer.push(arguments); }; 201 202 function loadTags() { 203 if (window.__tagsLoaded) return; 204 window.__tagsLoaded = true; 205 206 // GTM 207 dataLayer.push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); 208 var gtm = document.createElement('script'); 209 gtm.async = true; 210 gtm.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-TGSWNFV9'; 211 document.head.appendChild(gtm); 212 213 // Google Ads (gtag.js) 214 if (!window.__gtagAdsLoaded) { 215 window.__gtagAdsLoaded = true; 216 var ads = document.createElement('script'); 217 ads.async = true; 218 ads.src = 'https://www.googletagmanager.com/gtag/js?id=AW-18112670526'; 219 document.head.appendChild(ads); 220 gtag('js', new Date()); 221 // send_page_view:false voorkomt dubbele pageviews als dezelfde tag ook via GTM draait 222 gtag('config', 'AW-18112670526', { send_page_view: false }); 223 } 224 } 225 226 var schedule = function () { 227 if ('requestIdleCallback' in window) { 228 requestIdleCallback(loadTags, { timeout: 4000 }); 229 } else { 230 setTimeout(loadTags, 2500); 231 } 232 }; 233 234 if (document.readyState === 'complete') schedule(); 235 else window.addEventListener('load', schedule, { once: true }); 236 237 // Fallback: bij eerste interactie sowieso laden (meting van klikken blijft intact). 238 ['pointerdown', 'keydown', 'touchstart'].forEach(function (evt) { 239 window.addEventListener(evt, loadTags, { once: true, passive: true }); 240 }); 241 })(); 242 </script>
242 243 <!-- End Google Tag Manager / Google Ads --> 244 245 <!-- End Google tag (gtag.js) --> 246 247 <!-- Tenant-aware JSON-LD strip: op Autodata-hosts mag de ASL LocalBusiness 248 niet meelopen, anders krijgt Google twee conflicterende business-entities 249 op één URL. React/Helmet kan deze static
249<script> niet uit <head> halen, 250 dus doen we het hier vóór React boot (zelfde patroon als favicon). --> 251
251<script> 252 (function () { 253 try { 254 var h = (window.__TEST_TENANT_HOST__ || location.hostname || "").toString(); 255 var isAutodata = /(^|\.)autodataservice\.nl$|(^|\.)autodata-service\.online$|(^|\.)autodatanederland\.online$/.test(h); 256 if (isAutodata) { 257 var n = document.getElementById("asl-localbusiness-jsonld"); 258 if (n && n.parentNode) n.parentNode.removeChild(n); 259 } 260 } catch (e) { /* no-op */ } 261 })(); 262 </script>
262 263
263<script type="module" crossorigin src="/assets/index-hWVpbWs7.js"></script>
263 264 <link rel="stylesheet" crossorigin href="/assets/index-BSInoNpw.css">
265<script defer src="/~flock.js" data-proxy-url="/~api/analytics"></script>
265</head> 266 267 <body> 268 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 268-269
268 269 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
269GTM-TGSWNFV9
vendor: 91 bytes, lines 269-271
269" 270 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 271
271<!-- End Google Tag Manager (noscript) --> 272 <a href="#main-content" class="sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-[9999] focus:bg-primary focus:text-primary-foreground focus:px-4 focus:py-2 focus:rounded-md focus:outline-none" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 273 Ga naar inhoud 274 </a> 275 <div id="root"> 276 <!-- Initial loader: zichtbaar tot React gemount is. Tenant-aware label 277 op basis van hostname zodat Autodata Service niet Autosleutel 278 Limburg toont tijdens de eerste paint. --> 279 <div id="initial-loader" style="position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#ffffff;z-index:9999;font-family:system-ui,-apple-system,'Segoe UI',sans-serif;"> 280 <div style="position:relative;width:80px;height:80px;margin-bottom:24px;"> 281 <div style="position:absolute;inset:0;border-radius:50%;border:3px solid rgba(0,0,0,0.08);"></div> 282 <div style="position:absolute;inset:0;border-radius:50%;border:3px solid transparent;border-top-color:#1a1a1a;animation:asl-spin 1.2s linear infinite;"></div> 283 </div> 284 <div id="initial-loader-brand" style="font-size:15px;font-weight:600;color:#1a1a1a;letter-spacing:-0.01em;">Autosleutel Limburg</div> 285 <div style="font-size:13px;color:#666;margin-top:6px;">Laden...</div> 286 </div> 287 <style> 288 @keyframes asl-spin { to { transform: rotate(360deg); } } 289 </style> 290
290<script> 291 (function () { 292 try { 293 var h = (window.__TEST_TENANT_HOST__ || location.hostname || "").toString().toLowerCase(); 294 var isAutodata = /(^|\.)autodataservice\.(nl|app)$|(^|\.)autodata-service\.online$|(^|\.)autodatanederland\.online$/.test(h); 295 if (isAutodata) { 296 var el = document.getElementById("initial-loader-brand"); 297 if (el) el.textContent = "Autodata Service"; 298 } 299 } catch (e) { /* no-op */ } 300 })(); 301 </script>
301 302 </div> 303 </body> 304</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.