1<!DOCTYPE html> 2<html lang="de"> 3 <head> 4
4<script> 5 (function () { 6 var proto = XMLHttpRequest.prototype; 7 var open = proto.open, setRequestHeader = proto.setRequestHeader, send = proto.send; 8 var TOKEN_KEY = 'base44_access_token'; 9 var storedTokenHeader = function () { 10 try { return 'Bearer ' + localStorage.getItem(TOKEN_KEY); } catch (e) { return null; } 11 }; 12 var forgetStoredToken = function () { 13 try { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem('token'); } catch (e) {} 14 }; 15 16 proto.open = function (method, url) { 17 this.__b44IsAuthCheck = /\/entities\/User\/me(\?|$)/.test(url); 18 return open.apply(this, arguments); 19 }; 20 21 proto.setRequestHeader = function (name, value) { 22 if (this.__b44IsAuthCheck && name.toLowerCase() === 'authorization' && value === storedTokenHeader()) { 23 this.__b44SentToken = value; 24 } 25 return setRequestHeader.call(this, name, value); 26 }; 27 28 proto.send = function () { 29 this.addEventListener('loadend', function () { 30 var rejectedTokenStillStored = this.status === 401 && this.__b44SentToken === storedTokenHeader(); 31 if (rejectedTokenStillStored) forgetStoredToken(); 32 }); 33 return send.apply(this, arguments); 34 }; 35})(); 36 </script>
36 37 <meta charset="utf-8"/> 38 <link href="https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/0421ca33e_attriXus-X-500x500.png" rel="icon" sizes="500x500" type="image/png"/> 39 <link href="https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/0421ca33e_attriXus-X-500x500.png" rel="apple-touch-icon"/> 40 <link href="https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/0421ca33e_attriXus-X-500x500.png" rel="shortcut icon"/> 41 <meta content="width=device-width, initial-scale=1.0" name="viewport"/> 42 <meta content="no-referrer" name="referrer"/> 43 <link href="/manifest.json" rel="manifest"/> 44 <title> 45 attriXus 46 </title> 47 <meta content="Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Kunden zurückverfolgt und zeigt, welche Werbekampagnen wirklich zu Anfragen und Verkäufen führen." name="description"/> 48 <meta content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" name="robots"/> 49 <meta content="attriXus GmbH" name="author"/> 50 <meta content="de-DE" name="language"/> 51 <meta content="DE" name="geo.region"/> 52 <meta content="Deutschland" name="geo.placename"/> 53 <meta content="#FC9224" name="theme-color"/> 54 <link href="https://fonts.googleapis.com" rel="preconnect"/> 55 <link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/> 56 <link as="style" href="https://fonts.googleapis.com/css2?family=Questrial&display=swap" rel="preload"/> 57 <link href="https://fonts.googleapis.com/css2?family=Questrial&display=swap" rel="stylesheet"/> 58 <meta content="website" property="og:type"/> 59 <meta content="attriXus" property="og:title"/> 60 <meta content="Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Kunden zurückverfolgt und zeigt, welche Werbekampagnen wirklich zu Anfragen und Verkäufen führen." property="og:description"/> 61 <meta content="https://attrixus.de" property="og:url"/> 62 <meta content="attriXus" property="og:site_name"/> 63 <meta content="summary_large_image" name="twitter:card"/> 64 <meta content="attriXus" name="twitter:title"/> 65 <meta content="Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Kunden zurückverfolgt und zeigt, welche Werbekampagnen wirklich zu Anfragen und Verkäufen führen." name="twitter:description"/> 66
66<script type="application/ld+json"> 67 { 68 "@context": "https://schema.org", 69 "@type": "Organization", 70 "name": "attriXus GmbH", 71 "url": "https://www.attrixus.de", 72 "email": "[email protected]", 73 "logo": "https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/0421ca33e_attriXus-X-500x500.png", 74 "description": "attriXus zeigt Unternehmen, welche Online-Werbung wirklich Anfragen, Leads und Verkäufe bringt â und wo Marketingbudget verpufft.", 75 "foundingDate": "2018", 76 "areaServed": "DE", 77 "knowsAbout": ["Marketing Attribution", "Customer Journey Tracking", "Multi-Touch Attribution", "Conversion Tracking", "First-Party-Tracking", "Server-Side Tracking", "Performance Marketing", "Leadgenerierung", "Marketingbudget-Steuerung"] 78 } 79 </script>
79 80
80<script type="application/ld+json"> 81 { 82 "@context": "https://schema.org", 83 "@type": "WebSite", 84 "name": "attriXus", 85 "url": "https://www.attrixus.de", 86 "inLanguage": "de-DE", 87 "publisher": { 88 "@type": "Organization", 89 "name": "attriXus GmbH", 90 "url": "https://www.attrixus.de" 91 } 92 } 93 </script>
93 94 <!-- Google Analytics (gtag.js) mit Consent Mode v2: Consent aus LocalStorage VOR gtag config angewendet --> 95 <link crossorigin="" href="https://www.googletagmanager.com" rel="preconnect"/>
vendor: 69 bytes, lines 95-96
95 96 <script async="" src="https://www.googletagmanager.com/gtag/js?id=
96G-P0WM9LYKSE
vendor: 17 bytes, lines 96-98
96"> 97 </script> 98
98<script> 99 // Consent aus LocalStorage lesen BEFORE gtag config â keine Timing-Lücke 100 var _axConsent = 'denied'; 101 try { 102 var _axSaved = localStorage.getItem('attrixus-consent'); 103 if (_axSaved) { 104 var _axPrefs = JSON.parse(_axSaved); 105 if (_axPrefs && _axPrefs.analytics) _axConsent = 'granted'; 106 } 107 } catch (e) {} 108 window.dataLayer = window.dataLayer || []; 109 function gtag(){dataLayer.push(arguments);} 110 window.gtag = gtag; 111 gtag('consent', 'default', { 112 'ad_storage': _axConsent, 113 'ad_user_data': _axConsent, 114 'ad_personalization': _axConsent, 115 'analytics_storage': _axConsent, 116 'wait_for_update': 500 117 }); 118 gtag('js', new Date()); 119 gtag('config', 'G-P0WM9LYKSE', { 'anonymize_ip': true }); 120 </script>
120 121
121<script crossorigin="" src="/assets/index-BZCpdEMk.js" type="module"> 122 </script>
122 123 <link crossorigin="" href="/assets/index-CKuZmjqy.css" rel="stylesheet"/> 124
124<script type="module"> 125 if (window.self === window.top) { 126 let lastPath = ""; 127 function getPageNameFromPath(path) { 128 const segments = path.split("/").filter(Boolean); 129 return segments[0] || null; 130 } 131 function trackPageView() { 132 const path = window.location.pathname; 133 if (path === lastPath) return; 134 lastPath = path; 135 const pageName = getPageNameFromPath(path) || "home"; 136 const appId = "6a4ffb1e5e2f33d33be7b8a6"; 137 if (!appId) return; 138 fetch(`/api/app-logs/${appId}/log-user-in-app/${pageName}`, { 139 method: "POST", 140 }).catch(() => {}); 141 } 142 const originalPushState = history.pushState.bind(history); 143 history.pushState = function (...args) { 144 originalPushState(...args); 145 trackPageView(); 146 }; 147 const originalReplaceState = history.replaceState.bind(history); 148 history.replaceState = function (...args) { 149 originalReplaceState(...args); 150 trackPageView(); 151 }; 152 window.addEventListener("popstate", trackPageView); 153 trackPageView(); 154} 155 </script>
155 156 <meta content="https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/21c0a222a_logo.jpg/v1/fill/w_1200,h_630/21c0a222a_logo.jpg" property="og:image"/> 157 <meta content="https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/21c0a222a_logo.jpg/v1/fill/w_1200,h_630/21c0a222a_logo.jpg" name="twitter:image"/> 158 <meta content="https://attrixus.de" name="twitter:url"/> 159
159<script> 160 (function () { 161 var titles = {"/login": "Login | attriXus", "/": "attriXus", "/glossar": "Glossar | attriXus", "/impressum": "Impressum | attriXus", "/datenschutz": "Datenschutz | attriXus", "/magazin": "Magazin | attriXus", "/ueber-uns": "Ueber Uns | attriXus", "/termin": "Termin | attriXus", "/home": "attriXus"}; 162 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 163 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 164 var dashed = function (s) { 165 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 166 }; 167 var decode = function (s) { 168 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 169 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 170 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 171 }; 172 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 173 var norm = function (path) { 174 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 175 return parts.length ? "/" + parts.join("/") : "/"; 176 }; 177 var lastPath = location.pathname, written = document.title, on = true; 178 var sync = function () { 179 // Path only: a hash/query change is the same page, and the SDK strips its own auth 180 // params with replaceState -- neither must clobber a server-rendered title in place. 181 if (!on || location.pathname === lastPath) return; 182 lastPath = location.pathname; 183 if (document.title !== written) { on = false; return; } 184 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 185 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 186 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 187 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 188 // a redirect landing on an unmapped path would bake the placeholder into the stored 189 // snapshot. Leaving the title alone degrades to today's behavior instead. 190 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 191 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 192 // dashes there, and the client cannot tell the two apart. The map emits every reachable 193 // shape per segment instead (_client_url_variants). 194 var title = titles[norm(location.pathname)]; 195 if (title === undefined) return; 196 document.title = title; 197 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 198 // keeping the assigned string would make the next sync() read our own write as the app's. 199 written = document.title; 200 }; 201 var wrap = function (fn) { 202 // The history entry is already pushed by the time sync() runs, so a throw here would 203 // surface inside the host app's router and break navigation. This is injected into apps 204 // we cannot test, so it swallows rather than trusting the trace. 205 return function () { 206 var r = fn.apply(this, arguments); 207 try { sync(); } catch (e) {} 208 return r; 209 }; 210 }; 211 history.pushState = wrap(history.pushState); 212 history.replaceState = wrap(history.replaceState); 213 window.addEventListener("popstate", sync); 214})(); 215 </script>
215 216 <meta content="yes" name="mobile-web-app-capable"/> 217 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 218 <meta content="attriXus" name="apple-mobile-web-app-title"/> 219 <link href="https://attrixus.de" rel="canonical"/> 220
220<script data-seo-source="builder" type="application/ld+json"> 221 {"name": "attriXus", "@context": "https://schema.org", "@type": "WebSite", "url": "https://attrixus.de"} 222 </script>
222 223
223<script data-seo-source="builder" type="application/ld+json"> 224 {"name": "attriXus", "logo": "https://media.base44.com/images/public/6a4ffb1e5e2f33d33be7b8a6/80361af21_logo.png", "@context": "https://schema.org", "@type": "Organization", "url": "https://attrixus.de"} 225 </script>
225 226 </head> 227 <body> 228 <div id="root"> 229 <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 230 <main> 231 <header> 232 <h1> 233 attriXus 234 </h1> 235 <p> 236 Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Kunden zurückverfolgt und zeigt, welche Werbekampagnen wirklich zu Anfragen und Verkäufen führen. 237 </p> 238 </header> 239 <nav aria-label="Pages"> 240 <h2> 241 Pages 242 </h2> 243 <ul> 244 <li> 245 <a href="/login"> 246 Login 247 </a> 248 â Login on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 249 </li> 250 <li> 251 <a href="/glossar"> 252 Glossar 253 </a> 254 â Glossar on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 255 </li> 256 <li> 257 <a href="/impressum"> 258 Impressum 259 </a> 260 â Impressum on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 261 </li> 262 <li> 263 <a href="/datenschutz"> 264 Datenschutz 265 </a> 266 â Datenschutz on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 267 </li> 268 <li> 269 <a href="/magazin"> 270 Magazin 271 </a> 272 â Magazin on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 273 </li> 274 <li> 275 <a href="/ueber-uns"> 276 Ueber Uns 277 </a> 278 â Ueber Uns on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 279 </li> 280 <li> 281 <a href="/termin"> 282 Termin 283 </a> 284 â Termin on attriXus. Die Analyse-Plattform, die Marketing-Budgets transparent macht, den Weg jedes Ku. 285 </li> 286 </ul> 287 </nav> 288 </main> 289 </div> 290 </div> 291 </body> 292</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.