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

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
- Privates Fenster öffnen, Seite laden, Consent-Banner offen lassen → keine GA/AdSense-Requests und -Cookies.
- Zustimmung erteilen (statistics bzw. marketing) → Requests/Cookies erscheinen.
- Browser-Tools: Netzwerk (Filter: gtag, adsbygoogle); Speicher/Storage: Cookies prüfen.
- Wenn Skripte trotzdem laufen: Fehlt
data-mw-cookieconsentodertype="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
- MediaWiki.org – Extension:CookieConsent (Dokumentation)
- Beachte jeweils die Richtlinien von Google und deine Rechtslage (DSGVO, TTDSG).