Problem

  • Das Cookie-Banner wird beim Laden der Seite nicht angezeigt.
  • Benutzer sehen die Einwilligungsanfrage nicht.

Diagnoseschritte

Schritt 1: Überprüfen Sie, ob TermsFeed Cookie Consent geladen ist

// Open browser console and type:
console.log(typeof cookieconsent);

// Should output: "object"
// If "undefined", script didn't load

Schritt 2: Überprüfen Sie auf JavaScript-Fehler

  1. Öffnen Sie DevTools (F12)
  2. Wechseln Sie zur Registerkarte „Konsole“
  3. Suchen Sie nach Fehlern

Häufige Fehler sind:

  1. cookieconsent is not defined
  2. Uncaught ReferenceError
  3. Failed to load resource

Schritt 3: Überprüfen Sie die Platzierung des TermsFeed-Cookie-Einwilligungsskripts

<!-- ❌ WRONG - Script in <head> without async -->
<head>
    <script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js"></script>
    <script>
        cookieconsent.run({ / config / });
    </script>
</head>

<!-- ✅ CORRECT - Script before </body> with DOMContentLoaded -->
<body>
    <!-- content -->

    <script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            cookieconsent.run({ / config / });
        });
    </script>
</body>

Häufige Ursachen und Lösungen

Ursache 1: Der Nutzer hat bereits seine Einwilligung erteilt

// Check if user has cookie
console.log(document.cookie);
// Look for: cookie_consent_level=...

// To test banner, clear cookie:
document.cookie = 'cookie_consent_level=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
// Then reload page

Ursache 2: Ein Werbeblocker blockiert TermsFeed Cookie Consent

Die Lösung besteht darin, einen Proxy-Server zu integrieren, um TermsFeed Cookie Consent bereitzustellen.

Ursache 3: Die Content Security Policy blockiert das Laden

Der Fehler in den Entwicklertools > Konsole könnte Refused to load the script ... violates the following Content Security Policy directive lauten.

Die Lösung besteht darin, die CSP-Header zu aktualisieren:

Content-Security-Policy: script-src 'self' www.termsfeed.com 'unsafe-inline'

Ursache 4: Falsche Konfiguration

Häufige Fehler bei der Konfiguration:


// 1. Missing quotes
cookieconsent.run({
    consent_type: express  // ❌ Missing quotes
});

// 2. Trailing comma (IE issue)
cookieconsent.run({
    "consent_type": "express",  // ❌ Trailing comma
});

// 3. Missing DOMContentLoaded
cookieconsent.run({ / config / });  // ❌ Runs before DOM ready

// ✅ CORRECT:
document.addEventListener('DOMContentLoaded', function () {
    cookieconsent.run({
        "consent_type": "express",
        "website_name": "My Site",
        "language": "en"
    });
});

Ursache 5: Konflikte zwischen Skripten

Ein anderes Skript verhindert möglicherweise, dass das TermsFeed-Cookie-Einwilligungsbanner angezeigt wird.

Die Lösung besteht darin, die Ladereihenfolge der Skripte zu überprüfen.

// Test isolation
// Temporarily remove ALL other scripts
// Keep ONLY cookie consent
// If banner shows, you have a conflict

// Common conflicts:
// - Other cookie consent tools
// - Privacy plugins
// - Ad blockers (client-side)

Debug-Modus

Debug-Protokollierung aktivieren:

cookieconsent.run({
    "consent_type": "express",
    "website_name": "My Site",
    "debug": true  // Enable debug logging
});

// Check console for debug messages:
// [CookieConsent] Banner initialized
// [CookieConsent] User has no consent
// [CookieConsent] Showing banner

Skripte werden nicht blockiert

Problem

„Ich habe mein Google Analytics-Skript mit data-cookie-consent='tracking' versehen, aber es wird immer noch ausgelöst, bevor der Nutzer Cookies akzeptiert!“

Diagnoseschritte

Schritt 1: Skript-Tagging überprüfen

<!-- ❌ WRONG -->
<script type="text/javascript" data-cookie-consent="tracking">
  // GA code
</script>

<!-- ✅ CORRECT -->
<script type="text/plain" data-cookie-consent="tracking">
  // GA code
</script>

<!-- Key difference: type="text/plain" NOT type="text/javascript" -->

Schritt 2: Registerkarte „Netzwerk“ überprüfen

  1. Öffnen Sie DevTools → Registerkarte „Netzwerk“
  2. Cookies löschen
  3. Seite neu laden (vor der Zustimmung)
  4. Filtern Sie nach Ihren Tracking-Skripten
  5. Skripte mit Tags sollten NICHT auf der Registerkarte „Netzwerk“ erscheinen

Schritt 3: Überprüfen Sie, ob Cookies gesetzt werden

  1. DevTools → Anwendung → Cookies
  2. Vor der Zustimmung: Keine Google-Analytics-Cookies
  3. Nach der Annahme: _ga- und _gid-Cookies werden angezeigt

Häufige Ursachen und Lösungen

Ursache 1: Skript vor der Cookie-Zustimmung geladen

<!-- ❌ WRONG ORDER -->
<script type="text/plain" data-cookie-consent="tracking">
  // GA code
</script>
<script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js"></script>

<!-- ✅ CORRECT ORDER -->
<script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
    cookieconsent.run({ / config / });
});
</script>

<!-- NOW tag scripts below -->
<script type="text/plain" data-cookie-consent="tracking">
  // GA code
</script>

Ursache 2: Externes Skript wird nicht blockiert

<!-- ❌ External scripts need different approach -->
<script src="https://www.googletagmanager.com/gtag/js?id=G-XXX" data-cookie-consent="tracking"></script>

<!-- ✅ CORRECT - wrap in type="text/plain" -->
<script type="text/plain" data-cookie-consent="tracking">
  var script = document.createElement('script');
  script.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXX';
  script.async = true;
  document.head.appendChild(script);

  script.onload = function() {
    // Initialize GA
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'G-XXX');
  };
</script>

Ursache 3: Verwendung von Google Tag Manager

Das häufigste Problem tritt auf, wenn GTM vor der Einwilligung geladen wird.

Die Lösung besteht darin, den GTM-Container selbst nicht zu taggen. Stattdessen:

  1. Laden Sie GTM normal (ohne Tagging)
  2. Konfigurieren Sie Tags INNERHALB von GTM so, dass sie nur mit Einwilligung ausgelöst werden
  3. Verwenden Sie den integrierten Consent-Modus oder benutzerdefinierte Trigger
<!-- Don't tag the GTM container -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXX');</script>

<!-- Instead, push consent state to dataLayer -->
<script>
document.addEventListener('DOMContentLoaded', function () {
    cookieconsent.run({
        // ... config ...
        "callbacks": {
            "scripts_specific_loaded": (level) => {
                // Push to dataLayer
                window.dataLayer = window.dataLayer || [];
                window.dataLayer.push({
                    'event': 'cookie_consent_update',
                    'consent_level': level
                });
            }
        }
    });
});
</script>

<!-- Then in GTM, create trigger:
   Event: cookie_consent_update
   Condition: consent_level equals tracking
-->

Ursache 4: Cookies werden vom Server gesetzt

Wenn ein Backend-Server Cookies setzt, bevor JavaScript ausgeführt wird, besteht die Lösung darin, mehr serverseitige Logik zu programmieren.

<?php
// Check if user has consented (server-side)
$hasConsent = false;
if (isset($_COOKIE['cookie_consent_level'])) {
    $consentLevel = json_decode(urldecode($_COOKIE['cookie_consent_level']), true);
    $hasConsent = in_array('tracking', $consentLevel);
}

// Only set analytics cookies if user consented
if ($hasConsent) {
    setcookie('analytics_id', $user_id, time() + 86400, '/');
}
?>

Die Einwilligung bleibt nicht bestehen

Problem

„Der Nutzer akzeptiert Cookies, aber wenn er zu einer anderen Seite wechselt oder die Seite aktualisiert, erscheint das Banner erneut!“

Diagnoseschritte

Schritt 1: Überprüfen Sie, ob ein Cookie gesetzt wird

// After accepting, open console and run:
console.log(document.cookie);

// Should see something like:
// cookie_consent_level=%5B%22strictly-necessary%22%2C%22tracking%22%5D

Schritt 2: Überprüfen Sie die Cookie-Eigenschaften

// DevTools → Application → Cookies
// Look for: cookie_consent_level

// Check:
// ✓ Domain: Should match your domain
// ✓ Path: Should be /
// ✓ Expires: Should be future date (1 year)
// ✓ HttpOnly: Should be unchecked (JavaScript needs access)
// ✓ Secure: Depends on your settings
// ✓ SameSite: Strict or Lax

Häufige Ursachen und Lösungen

Ursache 1: Cookie-Pfad stimmt nicht überein

Problem

Cookie wurde für /subdir gesetzt, aber die Seite befindet sich unter /

Lösung

Stellen Sie sicher, dass das Cookie den Stammpfad verwendet.

// Cookie should be set for path=/
// This happens automatically, but verify in DevTools

// If using cookie_domain parameter, DON'T include path:
cookieconsent.run({
    "cookie_domain": ".example.com",  // ✅ No path needed
    // Other config...
});

Ursache 2: Browser blockiert Cookies

Problem

Die Datenschutzeinstellungen des Browsers verhindern die Speicherung von Cookies.

Lösung

Der Benutzer muss die Browsereinstellungen anpassen.

// Detect if cookies are blocked
function areCookiesEnabled() {
    try {
        document.cookie = 'test=test; SameSite=Strict';
        const enabled = document.cookie.indexOf('test=') !== -1;
        document.cookie = 'test=; expires=Thu, 01 Jan 1970 00:00:00 UTC';
        return enabled;
    } catch (e) {
        return false;
    }
}

// Show warning if cookies disabled
if (!areCookiesEnabled()) {
    alert('Cookies are disabled in your browser. Please enable them to save your preferences.');
}

Ursache 3: Konflikt beim Löschen von Cookies

Problem

Ein anderes Skript oder eine Browsererweiterung löscht Cookies.

Lösung

Überprüfen Sie, was die Cookies löscht

// Check what's deleting cookies
// Add console log on page load:
console.log('Cookies on load:', document.cookie);

// If consent cookie is missing, something deleted it
// Common culprits:
// - Privacy extensions (Privacy Badger, uBlock)
// - Browser auto-delete (Firefox Enhanced Tracking Protection)
// - Another script calling document.cookie clear

Ursache 4: Probleme mit Subdomains

Problem

Das auf www.example.com gesetzte Cookie funktioniert nicht auf example.com

Lösung

Verwenden Sie den Parameter cookie_domain.

cookieconsent.run({
    "cookie_domain": ".example.com",  // Note the leading dot!
    // This makes cookie valid for ALL subdomains
    // Other config...
});

Ursache 5: HTTPS/HTTP-Diskrepanz

Problem:

Das Cookie wurde mit dem Flag Secure auf HTTPS gesetzt, aber die Website wechselt zu HTTP.

Lösung:

Stellen Sie ein einheitliches Protokoll sicher ODER entfernen Sie das Sicherheitsflag für Testzwecke.

cookieconsent.run({
    "cookie_secure": false,  // Set to true ONLY if site is always HTTPS
    // Other config...
});

// For production HTTPS sites:
cookieconsent.run({
    "cookie_secure": true,  // ✅ Recommended for HTTPS
    // Other config...
});

Google-Einwilligungsmodus funktioniert nicht

Problem

„Ich habe den Google Consent Mode V2 implementiert, aber Google Analytics zeigt immer noch 0 Ereignisse an, selbst wenn Nutzer Cookies akzeptieren.“

Diagnoseschritte

Schritt 1: Überprüfen Sie, ob die gtag-Funktion vorhanden ist

// Open console:
console.log(typeof gtag);
// Should output: "function"

// If "undefined", gtag didn't load

Schritt 2: Überprüfen Sie dataLayer

// Check dataLayer contents:
console.log(window.dataLayer);

// Should see consent events:
// [{event: "consent", ...}, {event: "config", ...}]

Schritt 3: Verwenden Sie den Google Tag Assistant

  1. Installieren: Tag Assistant Chrome-Erweiterung
  2. Debugging aktivieren
  3. Seite neu laden
  4. Auf Ereignisse im Einwilligungsmodus prüfen

Häufige Ursachen und Lösungen

Ursache 1: Falsche Implementierungsreihenfolge

<!-- ❌ WRONG ORDER -->
<script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js"></script>
<script>
gtag('consent', 'default', {'analytics_storage': 'denied'});
</script>

<!-- ✅ CORRECT ORDER -->
<!-- 1. Set default consent FIRST -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
    'ad_storage': 'denied',
    'analytics_storage': 'denied'
});
</script>

<!-- 2. THEN load Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXX');
</script>

<!-- 3. THEN Cookie Consent -->
<script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
    cookieconsent.run({
        // ... config with callbacks ...
    });
});
</script>

Ursache 2: Fehlender Parameter „callbacks_force“

// ❌ Without callbacks_force, callbacks won't fire for Consent Mode
cookieconsent.run({
    "callbacks": {
        "scripts_specific_loaded": (level) => {
            gtag('consent', 'update', {'analytics_storage': 'granted'});
        }
    }
    // Missing: "callbacks_force": true
});

// ✅ CORRECT
cookieconsent.run({
    "callbacks": {
        "scripts_specific_loaded": (level) => {
            gtag('consent', 'update', {'analytics_storage': 'granted'});
        }
    },
    "callbacks_force": true  // Required for Consent Mode!
});

Ursache 3: Tippfehler bei den Einwilligungstypen

// ❌ Common typos:
gtag('consent', 'update', {
    'analytic_storage': 'granted'  // ❌ Missing 's'
});

gtag('consent', 'update', {
    'ad_store': 'granted'  // ❌ Should be 'ad_storage'
});

// ✅ CORRECT spellings:
gtag('consent', 'update', {
    'analytics_storage': 'granted',  // ✅
    'ad_storage': 'granted',         // ✅
    'ad_user_data': 'granted',       // ✅
    'ad_personalization': 'granted'  // ✅
});

Ursache 4: Falsche Kategorizierung

// Make sure you're mapping correct categories
"callbacks": {
    "scripts_specific_loaded": (level) => {
        switch (level) {
            case 'tracking':  // ✅ Analytics
                gtag('consent', 'update', {
                    'analytics_storage': 'granted'
                });
                break;
            case 'targeting':  // ✅ Advertising
                gtag('consent', 'update', {
                    'ad_storage': 'granted',
                    'ad_user_data': 'granted',
                    'ad_personalization': 'granted'
                });
                break;
        }
    }
}

Testen des Einwilligungsmodus

// After accepting cookies, check consent state:
console.log(google_tag_manager['GTM-XXXX'].dataLayer.get('consent'));

// Should show:
// {
//   ad_storage: "granted",
//   analytics_storage: "granted",
//   ...
// }

Domänenübergreifende Probleme

Problem

„Ich habe cookie_domain auf ‚.example.com‘ gesetzt, aber das Banner wird immer noch auf jeder Subdomain angezeigt. Die Nutzer sind genervt!“

Diagnoseschritte

Schritt 1: Cookie-Domain überprüfen

// DevTools → Application → Cookies
// Look for: cookie_consent_level
// Domain column should show: .example.com (with leading dot)

// If it shows: www.example.com (no dot)
// Then cookie_domain parameter isn't working

Schritt 2: Cookie der Subdomain überprüfen

// On www.example.com:
console.log(document.cookie);
// Should include: cookie_consent_level=...

// Then navigate to shop.example.com:
console.log(document.cookie);
// Should STILL include the same cookie

Schritt 3: Im Inkognito-Modus testen

  1. Öffnen Sie ein Inkognito-Fenster
  2. Rufen Sie www.example.com auf
  3. Cookies akzeptieren
  4. Notieren Sie den Cookie-Wert
  5. Besuchen Sie shop.example.com
  6. Prüfen, ob dasselbe Cookie vorhanden ist

Häufige Ursachen und Lösungen

Ursache 1: Fehlender führender Punkt

// ❌ WRONG
"cookie_domain": "example.com"  // No leading dot

// ✅ CORRECT
"cookie_domain": ".example.com"  // With leading dot

Ursache 2: Unterschiedliche Konfigurationen

Problem

Hauptdomain und Subdomain haben unterschiedliche Konfigurationen.

// www.example.com has:
cookieconsent.run({
    "website_name": "Main Site",
    "cookie_domain": ".example.com"
});

// shop.example.com has:
cookieconsent.run({
    "website_name": "Shop",  // ❌ Different config
    "cookie_domain": ".example.com"
});

Lösung

Verwenden Sie auf allen Domains IDENTISCHE Konfigurationen.

// ✅ SOLUTION: Use IDENTICAL configuration on all domains
const SHARED_CONFIG = {
    "notice_banner_type": "headline",
    "consent_type": "express",
    "website_name": "Example",  // Same everywhere
    "cookie_domain": ".example.com",
    // ... rest of config
};

// Use on ALL domains
cookieconsent.run(SHARED_CONFIG);

Ursache 3: Browser blockiert Cookies von Drittanbietern

Problem

Safari, Firefox und Brave blockieren standardmäßig siteübergreifende Cookies.

Lösung

Dies betrifft VERSCHIEDENE Domains, nicht Subdomains.

  • Subdomains (.example.com) = Erstanbieter-Cookies ✅ Sollte funktionieren
  • Unterschiedliche TLDs (example.com vs. example.co.uk) = Drittanbieter ❌ Funktioniert nicht
// For actual cross-domain (different TLDs), use backend sync:
"callbacks": {
    "user_consent_saved": () => {
        // Sync to backend
        fetch('https://api.example.com/sync-consent', {
            method: 'POST',
            body: JSON.stringify({
                consent: getConsentState(),
                user_id: getUserId()
            })
        });
    }
}

Ursache 4: Cookie aufgrund des Pfads nicht sichtbar

// Cookie might be set for specific path
// Check: DevTools → Application → Cookies → Path column

  // Should be: /
// If not, cookie won't work across site

// Force root path (this should be default):
// Note: TermsFeed Cookie Consent should handle this automatically
// But if you're manually setting cookies:
document.cookie = 'cookie_consent_level=...; path=/; domain=.example.com';

Probleme mit der Zeichenkodierung

Problem

„Sonderzeichen in meinem Bannertext werden als �� oder seltsame Symbole angezeigt“

Lösung

Stelle sicher, dass die UTF-8-Kodierung verwendet wird.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">  <!-- ✅ Must have this -->
    <title>My Site</title>
</head>
<body>
    <script src="//www.termsfeed.com/public/cookie-consent/4.2.0/cookie-consent.js" charset="UTF-8"></script>
    <!-- ✅ charset="UTF-8" in script tag -->
</body>
</html>

Für benutzerdefinierten Text:

cookieconsent.run({
    "website_name": "Café Français",  // ✅ UTF-8 characters work
    "language": "fr"  // Use appropriate language
});