Zum Inhalt springen

MediaWiki CookieConsent - DSGVO-konformes Einbinden externer Skripte (Google Analytics & AdSense)

Aus LHlab Wiki

Die MediaWiki Extension CookieConsent blockiert Tracking- und Marketing-Skripte (z. B. Google Analytics, Google AdSense), bis Nutzer zustimmen. Externe Skripte werden einfach mit data-mw-cookieconsent markiert. Ideal für MediaWiki-Setups zum Beispiel mit Docker.

Voraussetzungen

  • Erweiterung CookieConsent installiert und geladen
  • Zugriff auf den Seitenkopf (z. B. Skin-Header, globales Header-Include oder Hook in LocalSettings.php) zum Einfügen von Skript-Tags

Installation & Aktivierung

In LocalSettings.php:

wfLoadExtension( 'CookieConsent' );

Prinzip: Ein externes Skript wird nur geladen, wenn es mit einer Kategorie markiert ist und Nutzende diese Kategorie erlaubt haben.

Markierung per Attribut data-mw-cookieconsent="…". Übliche Kategorien:

  • necessary (immer erlaubt), preferences, statistics, marketing

Tipp: Setze zusätzlich type="text/plain", damit Browser den Code vor Einwilligung nicht ausführen. Die Extension „aktiviert“ das Skript nach Zustimmung automatisch.

Google Analytics (GA4) einbinden

Im Seitenkopf einfügen (Skin-Header o. ä.). Ersetze G-XXXXXXX durch deine GA4-ID.

<!-- Google tag (gtag.js) — blockiert bis "statistics" erlaubt ist -->
<script
    type="text/plain"
    data-mw-cookieconsent="statistics"
    src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX "
></script>
<script
  type="text/plain"
  data-mw-cookieconsent="statistics"
>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXX');
</script>

Google AdSense einbinden

Im Seitenkopf einfügen (ersetze ca-pub-XXXXXXXX durch deine Publisher-ID):

<!-- Google AdSense — blockiert bis "marketing" erlaubt ist -->
<script
  type="text/plain"
  data-mw-cookieconsent="marketing"
  async
  src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX"
  crossorigin="anonymous">
</script>

Für Anzeigenblöcke (<ins class="adsbygoogle">) markierst du zusätzliche Snippets analog mit

type="text/plain" data-mw-cookieconsent="marketing" und führst

(adsbygoogle = window.adsbygoogle || []).push({}); erst nach Einwilligung aus.

Wo füge ich die Tags ein?

  • Im Skin-Header (Template-Datei deines Skins)
  • In einem globalen Header-Include, das serverseitig in den <head> injiziert
  • Über einen Hook in LocalSettings.php (z. B. BeforePageDisplay), der die obigen <script>-Tags in den Head schreibt
$wgHeadScriptCode = <<<'START_END_MARKER'
<!-- Google tag (gtag.js) — blockiert bis "statistics" erlaubt ist -->
<script
  type="text/plain"
  data-mw-cookieconsent="statistics"
  async
  src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX">
</script>
<script type="text/plain" data-mw-cookieconsent="statistics">
  window.dataLayer = window.dataLayer || [];
  function gtag(){ dataLayer.push(arguments); }
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXX');
</script>
<!-- Google AdSense — blockiert bis "marketing" erlaubt ist -->
<script
  type="text/plain"
  data-mw-cookieconsent="marketing"
  async
  src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX"
  crossorigin="anonymous">
</script>
START_END_MARKER;
$wgHeadScriptName = 'LH extra headers';

$wgHooks['BeforePageDisplay'][] = 'HeadScript';
function HeadScript( OutputPage &$out, Skin &$skin ) {
        global $wgHeadScriptCode, $wgHeadScriptName;
        $out->addHeadItem($wgHeadScriptName, $wgHeadScriptCode );
        return TRUE;
}

Test & Fehlersuche

  1. Privates Fenster öffnen, Seite laden, Consent-Banner offen lassen → keine GA/AdSense-Requests und -Cookies.
  2. Zustimmung erteilen (statistics bzw. marketing) → Requests/Cookies erscheinen.
  3. Browser-Tools: Netzwerk (Filter: gtag, adsbygoogle); Speicher/Storage: Cookies prüfen.
  4. Wenn Skripte trotzdem laufen: Fehlt data-mw-cookieconsent oder type="text/plain"?

Häufige Fragen

Mehrere Kategorien parallel?

Ja. Markiere jedes Skript passend. Geladen wird nur, was freigegeben ist.

Texte/Design des Banners anpassen?

Über Systemnachrichten im MediaWiki:-Namensraum und/oder Skin-CSS (siehe Doku der Extension).

Andere Dienste (Chat, Maps, Fonts)?

Ja, analog markieren (z. B. marketing oder statistics).

Weiterführend

  • Beachte jeweils die Richtlinien von Google und deine Rechtslage (DSGVO, TTDSG).