GDPR-compliant Cookie Consent Manager for Shopware 6.6 - 6.7 using the open-source Klaro library (v0.7.21).
Live Demo: Try all OXID eShop and Shopware plugins by Markus Michalski live — no installation, no risk. demo.markus-michalski.net
Unlike cloud-based consent managers (Cookiebot, OneTrust, etc.), Klaro runs entirely on your own server. No data is sent to third parties, no external scripts are loaded, and you have full control over the consent flow. This makes it the ideal choice for privacy-conscious shop owners who take GDPR seriously.
| Feature | Description |
|---|---|
| Klaro Library | Open-source consent management — no vendor lock-in, full transparency |
| Google Consent Mode v2 | Automatic integration with Google Analytics 4 and Google Ads (required since March 2024) |
| Multi-Sales-Channel | Different configurations per Sales Channel — one plugin, multiple shops |
| Dedicated Admin Module | Manage cookie services under Extensions > Cookie Consent Services with language switcher |
| Unlimited Languages | Title and description per service in all configured shop languages |
| Customizable Styling | Button colors, position (bottom/top/corner), light/dark theme |
| Cookie Deletion | Automatic cleanup of cookies when user withdraws consent |
| Contextual Consent | Per-embed consent for YouTube, Vimeo, Google Maps, etc. |
| Purpose Texts via Snippets | Category titles and descriptions managed via Shopware snippets — unlimited languages |
| Translatable Service Descriptions | Title and description per service via native language switcher |
Add the private Composer repository to your shop's composer.json:
{
"repositories": [
{
"type": "composer",
"url": "https://packeton.markus-michalski.net"
}
]
}
The repository credentials will be provided upon purchase. Credentials are managed via Packeton.
composer require mmd/sw67-klaro-cookie-consent
When prompted for authentication, enter the credentials provided with your license.
bin/console plugin:refresh
bin/console plugin:install --activate MmdKlaroCookieConsent
bin/console cache:clear
Update to the latest version:
composer update mmd/sw67-klaro-cookie-consent
bin/console cache:clear
When installing via the Shopware Store, updates are available directly from Extensions > My Extensions.
Navigate to Settings > Extensions > Klaro Cookie Consent to configure the plugin. All settings are per Sales Channel — you can have different configurations for different shops.
| Setting | Default | Description |
|---|---|---|
| Active | true |
Enable/disable consent banner per Sales Channel |
| Privacy Policy URL | /privacy |
Link to your privacy policy page |
| Setting | Default | Description |
|---|---|---|
| Must Consent | true |
Blocking modal — user must interact before using the site |
| Show "Accept All" | true |
Display the "Accept All" button |
| Hide "Decline All" | false |
Hide the "Decline All" button (users can still decline individually) |
| Group by Purpose | true |
Group services by category (Analytics, Marketing, etc.) |
| Hide "Learn More" | false |
Hide the "Learn More" links per service |
| Setting | Default | Description |
|---|---|---|
| Storage Method | cookie |
How consent is stored: Cookie (recommended) or Local Storage |
| Storage Name | klaro |
Name of the cookie/localStorage key |
| Cookie Expires | 365 days |
Consent cookie expiration in days |
| Setting | Default | Description |
|---|---|---|
| Enable | false |
Sync consent with Google services (GA4, Google Ads) |
| Wait for Update | true |
Delay Google tags until consent is determined |
| Setting | Default | Description |
|---|---|---|
| Accept All Button | #1a73e8 |
Color for the "Accept All" button and active toggles |
| Save Selection Button | #2581c4 |
Color for the "Save Selection" button |
| Decline All Button | #5c5c5c |
Color for the "Decline All" button |
| Position | bottom |
Banner position: bottom, top, bottom-left, bottom-right (only in non-modal mode) |
| Theme | light |
Color scheme: light or dark |
Since v1.2.0, purpose category titles and descriptions are managed via Shopware Snippets, enabling unlimited language support — not just German and English.
Find the snippet keys under Settings > Snippets with the prefix mmd-klaro.purposes:
| Snippet Key | Default (EN) | Default (DE) |
|---|---|---|
mmd-klaro.purposes.analytics.title |
Analytics | Statistik |
mmd-klaro.purposes.analytics.description |
These services collect anonymous data about website usage | Diese Dienste sammeln anonyme Daten |
mmd-klaro.purposes.marketing.title |
Marketing | Marketing |
mmd-klaro.purposes.marketing.description |
These services enable measurement and optimization of advertising campaigns | Diese Dienste ermöglichen die Messung von Werbekampagnen |
mmd-klaro.purposes.functional.title |
Functional | Funktional |
mmd-klaro.purposes.functional.description |
These services provide additional functionality | Diese Dienste bieten zusätzliche Funktionen |
mmd-klaro.purposes.security.title |
Security | Sicherheit |
mmd-klaro.purposes.security.description |
These services help protect the website | Diese Dienste schützen die Website |
Tip: To add French, simply create a new snippet set for
fr-FRand translate the texts. Klaro will automatically display the correct language in the storefront.
The consent dialog UI texts (button labels, modal texts) are also managed via snippets:
| Snippet Key | Description |
|---|---|
mmd-klaro.consentModal.title |
Consent modal title |
mmd-klaro.consentModal.description |
Modal description text |
mmd-klaro.ok |
"Accept all" button text |
mmd-klaro.decline |
"Decline all" button text |
mmd-klaro.save |
"Save" button text |
mmd-klaro.acceptSelected |
"Save selection" button text |
Since v1.2.0, the plugin includes a dedicated admin module with native Shopware UX. Service management is available under Extensions > Cookie Consent Services.
The list shows all configured services with:
Click "Create service" or click on an existing service. The detail page provides:
Language Switcher in the header — Switch language to manage title and description per language. This works exactly like Shopware products or categories.
Important: The technical name cannot be changed after creation. It serves as the unique identifier in the Klaro configuration.
| Field | Description | Required |
|---|---|---|
| Technical Name | Unique identifier, e.g. google-analytics (lowercase, alphanumeric, hyphens only) |
Yes |
| Category | Functional, Statistics/Analytics, Marketing, or Security | Yes |
| Display Title | Name in consent dialog — managed per language | No |
| Description | Explanation for the user — managed per language | No |
| Position | Sort order in consent dialog (0 = top) | No |
| Active | Show service in consent dialog | No |
| Required | Service cannot be disabled by user (e.g. session cookies) | No |
| Enabled by Default | Pre-checked in consent dialog | No |
| Execute Callback Only Once | Prevents duplicate tracking events | No |
| Sales Channels | Assign to specific Sales Channels | No |
For each service, you can define cookies to be automatically deleted when consent is withdrawn:
| Field | Description | Required |
|---|---|---|
Cookie Name/Pattern |
Cookie name or regex pattern (e.g. _ga, ^_gid.*$) |
Yes |
Path |
Cookie path | No (default: /) |
Domain |
Cookie domain (e.g. .example.com) |
No |
| Field | Value |
|---|---|
| Technical Name | google-analytics |
| Category | Statistics / Analytics |
| Title (EN) | Google Analytics |
| Title (DE) | Google Analytics |
| Description (EN) | Collects anonymous statistics about website usage |
| Description (DE) | Sammelt anonyme Statistiken über die Nutzung der Website |
| Cookies | _ga (path: /, domain: .example.com), _gid (path: /, domain: .example.com) |
Include your GA4 script with the data-name attribute so Klaro can control it:
<script data-type="application/javascript"
data-name="google-analytics"
data-src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"
type="text/plain"></script>
| Field | Value |
|---|---|
| Technical Name | youtube |
| Category | Functional |
| Title | YouTube |
| Description | Loads embedded YouTube videos. A connection to Google is established when you consent. |
| Contextual Consent Only | Yes |
| Field | Value |
|---|---|
| Technical Name | facebook-pixel |
| Category | Marketing |
| Title | Facebook Pixel |
| Description | Measures the effectiveness of advertising campaigns on Facebook and Instagram. |
| Cookies | _fbp (path: /), _fbc (path: /) |
This service is created automatically during plugin installation:
| Field | Value |
|---|---|
| Technical Name | session |
| Category | Functional |
| Title | Technically necessary |
| Description | These cookies are essential for the basic functions of the shop. |
| Required | Yes |
| Default Enabled | Yes |
| Cookies | session- (path: /), sw- (path: /) |
Since March 2024, Google requires Consent Mode v2 for any website using Google Analytics or Google Ads in the European Economic Area (EEA).
When enabled, the plugin automatically:
google-analytics, ga4, or gtag accepted: analytics_storage grantedgoogle-ads or google-tag-manager accepted: ad_storage, ad_user_data, ad_personalization grantedyoutube, vimeo, or maps accepted: functionality_storage, personalization_storage grantedTo use Google Consent Mode v2, enable it in the plugin settings and make sure your Google Analytics/Ads service technical names match the expected names (
google-analytics,google-ads, etc.).
The plugin automatically adds a "Cookie Settings" link to the storefront footer service menu. When clicked, it reopens the Klaro consent dialog so users can change their preferences at any time. No additional configuration is required.
Symptom: The consent dialog does not appear in the storefront.
Check:
bin/console cache:clear)Symptom: Title and description of a service always appear in German, even in the English storefront.
Check:
Symptom: Category headings (Analytics, Marketing, etc.) appear in the fallback language instead of French/Spanish.
Solution:
mmd-klaro.purposesfr-FR)Commercial License — single-installation license including:
For multiple production installations, a separate license is required for each.
For licensing inquiries: support@markus-michalski.net
Markus Michalski