
GDPR compliance WordPress questions come up in almost every project I quote for a German or EU client, usually in the first email: “Is the site GDPR-ready?” After twelve years of building WordPress sites for clients in Germany, the UK and the rest of Europe, I can tell you what that question actually means in practice – and it is rarely the cookie banner. It is fonts loading from American servers, contact form entries sitting in a US mailbox, analytics firing before anyone consented, and a privacy policy that describes a site that no longer exists.
This guide is the practical developer’s version: what the regulation asks of a website in plain language, how to map what your WordPress site really collects, the German and EU specifics I hit constantly (locally hosted Google Fonts, US data transfers, Impressum), consent management that actually blocks trackers, forms, analytics, WooCommerce, data subject rights, processors and a compliance checklist. One honest disclaimer before anything else: I am a developer, not a lawyer. Everything here is implementation experience from 500+ WordPress projects, many of them for clients where GDPR is table stakes – but the legal texts on your site (privacy policy, DPAs, consent wording) should be signed off by a lawyer or your data protection officer. I build the machinery; a professional confirms the paperwork.
Table of contents
- GDPR in plain language for site owners
- The data inventory: what a WordPress site actually collects
- The German and EU specifics: fonts, transfers, Impressum
- Consent management done right
- Forms, newsletters and email
- Analytics choices, honestly
- WooCommerce and GDPR
- Data subject rights on a WordPress site
- Processors, DPAs and breach notification
- Privacy by design in custom builds
- The compliance checklist – and the common myths
- Frequently asked questions
GDPR in plain language for site owners
The General Data Protection Regulation applies whenever you process personal data of people in the EU – and “personal data” is broader than most site owners expect. It is not just names and email addresses. An IP address is personal data. A user ID in a cookie is personal data. The combination of browser fingerprint and behaviour that an analytics tool stores is personal data. If your website records it and it can be tied to a person, directly or indirectly, the regulation cares about it.
Lawful bases: the part worth understanding
You may only process personal data if you have a lawful basis. For a typical website, two of the six matter constantly:
- Consent – the visitor actively agreed, before the processing started, with a real choice to say no. Consent must be as easy to withdraw as it was to give. This is the basis for marketing cookies, tracking pixels and most third-party embeds.
- Legitimate interest – you have a genuine operational need that does not override the visitor’s rights. Keeping server logs for security, storing a contact enquiry so you can answer it, fraud prevention in a shop – these usually rest on legitimate interest (or on contract, the third common basis, for order processing).
The practical dividing line: things the site needs to function and to be operated safely generally do not need a consent popup; things that exist to track, profile or market to the visitor do. A lot of GDPR implementation work is simply sorting every script and plugin on the site into one of those two buckets and being able to justify the sorting.
Why “we installed a cookie banner” is not compliance
The most common state I find when I audit a site for a new client: a cookie banner was installed two years ago, everyone relaxed, and nothing else happened. That is not compliance, for three reasons. First, GDPR is about all processing, not cookies – the contact form, the newsletter, the server logs and the order data are all in scope whether or not a banner exists. Second, most banners I test do not actually do their one job: Google Analytics, Facebook pixels and YouTube embeds fire before the visitor clicks anything, which means the banner is decoration. Third, a banner does not fix a privacy policy that does not match reality, missing processor agreements, or fonts loading from US servers. The banner is one component of one topic (consent). Treating it as the whole project is the single biggest GDPR misunderstanding I see.
The data inventory: what a WordPress site actually collects
Before you can be compliant you need to know what the site collects, where it goes and how long it stays. I do this exercise at the start of every compliance-focused project, and it takes one to two hours for a typical site. Walk through these categories and write down what you find:
- Forms. Contact forms, quote requests, callbacks, job applications. What fields? Where do entries go – database, email inbox, both? Which email service delivers them? Do form plugins store entries with IP addresses (many do by default)?
- Comments. WordPress stores the commenter’s name, email and IP address forever by default, and offers a cookie to remember the commenter’s details.
- Analytics and marketing. Google Analytics, Tag Manager, Facebook/Meta pixel, LinkedIn Insight, Hotjar. Each one sends visitor data to a third party, most of them in the US.
- Embedded third-party content. YouTube and Vimeo videos, Google Maps, Instagram feeds, external fonts and icon CDNs. Every embed makes the visitor’s browser contact that provider and hand over an IP address before any consent is possible – unless you prevent it.
- Server logs. Your host records IP addresses in access logs. Legitimate interest covers this, but you should know the retention period and it should be finite.
- Newsletter. Which provider, what data, is there proof of consent, is it double opt-in?
- WooCommerce. Orders are full personal profiles: name, address, email, phone, purchase history, sometimes notes. Payment providers receive part of it.
- Security and maintenance plugins. Firewalls and login-protection plugins log IP addresses; backup plugins copy the whole database – including all the personal data above – to wherever the backups live.
- Users. Every registered account, including old editors and test users nobody remembers.
The output is a simple table: data type, source, storage location, third parties involved, lawful basis, retention. This table is worth more than any plugin, because every later decision – what the banner must block, what the privacy policy must say, which DPAs you need – falls out of it. It is also the first thing a data protection officer will ask for.
The German and EU specifics: fonts, transfers, Impressum
I work for German agencies and businesses week in, week out, and three topics come up on practically every project.
Google Fonts must be locally hosted
In January 2022 the Munich Regional Court ruled that loading Google Fonts from Google’s servers without consent violates GDPR, because the visitor’s IP address is transmitted to Google before they can object. The ruling triggered a wave of warning letters (Abmahnungen) to German site owners, and “are the fonts local?” became a standard audit question. The fix is easy and improves performance at the same time: download the font files, serve them from your own domain with font-display: swap, and remove every fonts.googleapis.com and fonts.gstatic.com reference. My themes self-host fonts by default and have for years – partly for GDPR, partly because it is simply faster, as I explain in my WordPress speed guide. The same logic applies to icon CDNs, external CSS libraries and any other asset a theme or plugin pulls from a third-party server: check the page source and the network tab, not the marketing page of the theme.
US services and data transfers, in plain language
When data about EU visitors flows to a US company – Google, Meta, Mailchimp, many hosting and CDN providers – that is an international data transfer, and it needs a legal mechanism. Since 2023 the EU-US Data Privacy Framework (DPF) provides one: if the US company is certified under the DPF, transfers to it have a recognised basis. That calmed the situation after the Schrems II judgment invalidated the previous framework, but two practical cautions remain. First, certification is per company – check the DPF list, do not assume. Second, German data protection authorities and courts remain the strictest in Europe, and the framework itself faces legal challenges like its predecessors did. My practical advice to clients: use EU-based services where a good option exists (hosting, email delivery, analytics), and where you genuinely need a US service, verify its DPF status, sign its DPA and mention the transfer in the privacy policy. That position survives audits and does not depend on the next court decision.
Impressum vs privacy policy
Clients outside the DACH region often confuse these. The Impressum (legal notice) is a German/Austrian requirement from telemedia law, not from GDPR: a page identifying who operates the site – name, address, contact, registration numbers. The Datenschutzerklärung (privacy policy) is the GDPR document: what data is processed, why, on what basis, by which processors, for how long, and what rights visitors have. A German site needs both, as separate pages, each reachable from every page of the site – the footer is the convention. I build both pages into every DACH project skeleton before content exists, because forgetting the Impressum is itself a warning-letter risk in Germany.
Consent management done right
Consent management is where most sites fail technically, so it deserves precision.
What needs consent – and what does not
- Needs prior consent: analytics cookies that profile visitors (standard Google Analytics), marketing and remarketing pixels (Meta, LinkedIn, Google Ads), session-recording tools, YouTube/Vimeo embeds in their normal form, Google Maps embeds, most chat widgets.
- Does not need consent: strictly necessary cookies (session, cart, security, cookie-choice storage), self-hosted assets, and properly configured privacy-respecting statistics – Matomo, self-hosted, with IP anonymisation and without cross-site tracking, is widely operated on legitimate interest, and cookieless tools like Plausible do not touch the visitor’s device at all.
If nothing on the site needs consent, you do not need a banner. A brochure site with self-hosted fonts, a contact form and cookieless analytics can legally have no popup at all – and those are some of the most pleasant sites I ship.
Blocking before load, not after
The technical requirement that most banners fail: consent-requiring scripts must not execute and consent-requiring requests must not leave the browser until the visitor agrees. That means script blocking or a proper consent-mode integration, not a banner overlaid on a page that has already sent everything. Testing takes two minutes: open a private browser window, open the network tab in developer tools, load the page and do not click the banner. If you see requests to google-analytics.com, facebook.com, doubleclick.net or youtube.com, the banner is decorative. I run this test on every audit, and it fails on well over half of the sites I check – including sites using well-known consent plugins that were installed but never configured to block anything.
Two-click embeds for videos and maps
The cleanest pattern for YouTube, Vimeo and Google Maps is the two-click embed: show a local placeholder image with a “Click to load the video – this will connect to YouTube” note, and only build the real iframe after the click. No data flows until the visitor decides. YouTube’s youtube-nocookie.com domain reduces cookie usage but still transmits the IP on page load, so it is not a substitute for the two-click pattern on strict projects. In my custom themes this is a reusable block: placeholder, consent note, one JavaScript handler. Visitors barely notice, and the page loads faster too because no iframe weight is loaded upfront.
Consent plugins: an honest take
For WordPress the tools I actually deploy: Complianz is my default general-purpose choice – it scans the site, generates region-aware banners and integrates script blocking, with a capable free tier. Borlabs Cookie is the DACH favourite (roughly EUR 60 per year) – German legal conventions, excellent content-blocker system for embeds, the one German agencies ask for by name. CookieYes and similar hosted services are fine for simple sites but keep an eye on where their own scripts load from. The critical point with every one of them: the plugin is a framework, not a solution. A badly configured Complianz or Borlabs install still loads trackers before consent – the plugin only blocks the services you tell it about, the way you tell it. After every configuration change, repeat the network-tab test. Configuration plus verification is the deliverable, not the plugin purchase.
Forms, newsletters and email
Minimal fields as a principle
Data minimisation is an actual GDPR principle, and it happens to be good conversion practice: collect only what you need for the purpose. A contact form needs a name, an email and a message. It does not need a phone number as a required field, a date of birth, or an address – if a client asks for those, I ask what they will be used for, and the answer is usually “nothing specific”. Every field you do not collect is data you cannot leak, do not have to explain in the privacy policy and never have to delete on request.
Checkbox rules
Where a form does need consent – typically for anything beyond answering the enquiry – the rules are strict and simple: no pre-ticked boxes, ever; one checkbox per purpose; and no coupling, meaning you cannot force a newsletter subscription as a condition of sending a support question. A “privacy policy accepted” checkbox on a plain contact form is common in Germany and harmless, though answering an enquiry someone sent you rests on legitimate interest anyway; the wording matters more than the checkbox. What is clearly non-compliant is the pattern I still see weekly: a pre-ticked “also subscribe me to the newsletter” box under a quote form.
Double opt-in for newsletters
For newsletters, double opt-in is the standard – in Germany effectively mandatory, because without the confirmation click you cannot prove consent. The flow: form submission, confirmation email with a link, subscription active only after the click. Store the timestamp and context of both steps; every serious newsletter tool (Brevo, Mailchimp, CleverReach, Mailpoet) does this for you if you switch it on. Brevo and CleverReach are popular with my EU clients because the data stays with an EU provider.
Where enquiries live, and how mail travels
Think about where form data rests. My default in custom builds is a pattern I call the vb_inquiry approach: form submissions are stored as an admin-only custom post type in the site’s own database – no public URLs, capability-restricted, one place to search, export and delete, with a retention routine that removes entries after a defined period (six to twelve months is typical for enquiries). The email notification is then just a notification, not the system of record. For transport, use authenticated SMTP rather than PHP mail – and for EU clients, an EU-based SMTP relay (Brevo’s EU infrastructure, or the hosting provider’s own SMTP) keeps the delivery path inside the EU. If the client is on Google Workspace or Microsoft 365, that is a US-linked processor to list in the privacy policy with its DPA – not a crisis, but a line in the inventory. This kind of storage design is standard in my custom WordPress development work, because retrofitting retention onto a form plugin that scattered entries across three places is far harder than designing it in.
Analytics choices, honestly
Here is the conversation I have with every client, condensed. You have three realistic options:
- Google Analytics 4 with a consent banner. Free, familiar, integrates with Google Ads. Cost: you need prior consent, and consent banners lose you data – in my experience across client sites, 30-60% of visitors decline or ignore the banner, so your “traffic drop” is really a measurement drop. You are also tied to the US-transfer question and to whatever German authorities decide about GA next.
- Matomo, self-hosted. Open source, data stays in your own database, and configured properly – IP anonymisation on, no tracking cookies or the cookieless mode, respect for Do Not Track – it is widely operated without a consent banner on legitimate interest. You see close to 100% of visits. Cost: a plugin or separate install to maintain, and some database weight on busy sites.
- Plausible or Fathom. Cookieless, privacy-first, EU-hosted options, lovely simple dashboards, no banner needed. Cost: roughly EUR 9-14 per month, and you give up deep behavioural reports – which most small businesses never open anyway.
My honest recommendation for most small business sites: Matomo or Plausible, no analytics banner, complete data. The clients who genuinely need GA4 are the ones running Google Ads at scale – and they accept the consent-rate cost as a marketing expense. What I advise against is the worst-of-both setup I see often: GA4 installed and a banner that does not actually gate it. That combines legal risk with the illusion of compliance.
WooCommerce and GDPR
A shop raises the stakes because order data is rich and keeping it is partly a legal duty.
Retention: GDPR meets tax law
GDPR says keep data no longer than necessary; tax law says keep invoices and order records for years – ten years for accounting records in Germany. Both are true, and the resolution is purpose-based retention: order and invoice data is kept for the statutory period because the law requires it (legal obligation is its own lawful basis), while data with no retention duty – abandoned carts, failed orders, marketing flags, old customer accounts with no orders – is cleaned up on a schedule. WooCommerce ships with this under WooCommerce → Settings → Accounts & Privacy: retention periods for inactive accounts, pending/failed/cancelled orders, and an option to anonymise completed orders after a defined time, which keeps the numbers for accounting while unlinking the person. Most shops have never opened that screen; configuring it is a fifteen-minute job.
Accounts, checkout and payment processors
Checkout is a form, so minimal fields applies: do not require account creation for a simple purchase (guest checkout on), do not require a phone number unless the shipping method truly needs it, no pre-ticked marketing checkbox at checkout. Payment providers – Stripe, PayPal, Mollie, Klarna – are generally independent controllers for the payment data they process, not your processors, but they still belong in your privacy policy: name them, link their policies, and note that payment data goes to them directly. Mollie is a nice example of an EU-based provider my German and Dutch clients favour. And remember the periphery: shipping plugins, invoicing tools and marketing integrations each receive customer data and each need a line in the inventory and usually a DPA.
Data subject rights on a WordPress site
Visitors have the right to access, export, correct and erase their data, and you must be able to respond within a month. The good news: WordPress core has shipped the machinery since 4.9.6, and almost nobody knows it exists. Under Tools → Export Personal Data and Tools → Erase Personal Data, you enter an email address, core sends a confirmation to the requester, and then compiles or erases everything registered with the privacy API – profile data, comments, WooCommerce orders, and any plugin data whose developer implemented the hooks. When I build plugins that store personal data, wiring them into wp_privacy_personal_data_exporters and the eraser equivalent is part of the definition of done, so a deletion request genuinely covers the custom data too – a detail worth checking in my plugin development work and anyone else’s.
Beyond the request tools, rights compliance is mostly housekeeping on a schedule: delete or anonymise old comment IPs (a filter can stop storing them entirely), remove form entries past their retention period, delete stale user accounts, and prune the inbox copies of old enquiries. A quarterly 30-minute cleanup routine – which I fold into maintenance plans – keeps the site in a state where an erasure request is a ten-minute task instead of an archaeology project.
Processors, DPAs and breach notification
Keep a processor list
Every company that processes personal data on your behalf is a processor, and GDPR requires a data processing agreement (DPA, in German an AVV) with each one. For a typical WordPress site the list looks like: hosting provider, CDN or proxy (Cloudflare and friends), transactional email service, newsletter provider, backup storage (if backups go to S3, Dropbox or Google Drive, that provider holds a copy of your entire database), form or chat services, analytics if hosted, and any agency or freelancer – including me – who has admin access to a site containing personal data. I sign DPAs with EU clients routinely; a developer who is surprised by the request is a red flag. Almost every serious provider offers a standard DPA you accept online in minutes; the work is simply keeping the list current, which the data inventory from earlier gives you for free.
Breach notification: the 72-hour rule
If personal data is breached – a hacked site with a customer database, a leaked backup, a form plugin vulnerability that exposed entries – you must notify your supervisory authority within 72 hours of becoming aware, unless the breach is unlikely to risk anyone’s rights, and notify affected people when the risk is high. Two implementation consequences. First, you need to be able to detect a breach: file integrity monitoring, login auditing and an activity log are GDPR measures, not just security hygiene. Second, the 72-hour clock is why panicked cleanup without documentation is a mistake – record what happened and when. Prevention remains cheaper than notification, which is why the hardening baseline in my post on WordPress security mistakes that get websites hacked is also, in effect, GDPR work: Article 32 explicitly requires security appropriate to the risk.

Privacy by design in custom builds
GDPR asks for data protection by design and by default, and this is where building custom pays off, because the cleanest compliance is data that never flows. What I do by default in every custom theme build:
- No external requests from the theme. Fonts self-hosted, icons inlined as SVG, no CSS or JS from CDNs, no tracking beacons from page builders (there is no page builder). The front end contacts one domain: yours.
- IP anonymisation everywhere an IP is stored – comments, form logs, analytics – and no storage at all where the IP serves no purpose.
- Minimal logging with finite retention, agreed with the host, instead of access logs kept forever.
- Two-click embeds as standard blocks for video and maps, so editors cannot accidentally add a consent-requiring embed.
- Form storage with retention built in (the vb_inquiry pattern above) rather than bolted on.
- Few plugins. Every plugin is potential data collection you did not audit. A 12-plugin site is easier to keep compliant than a 40-plugin site, in exactly the way it is easier to keep secure and fast.
The pleasant side effect: a site built this way usually needs only a modest banner or none at all, loads faster because nothing waits on third-party servers, and its privacy policy is short because there is little to declare. Privacy by design, performance by design and low maintenance turn out to be the same architecture. It also simplifies multilingual projects – consent texts and privacy pages exist per language, which is one more reason the plumbing matters, as covered in my multilingual WordPress guide.
The compliance checklist – and the common myths
Here is the checklist I work through on a GDPR-focused audit, grouped the way the work actually happens:
| Area | Check | Typical fix effort |
|---|---|---|
| Consent | Nothing consent-requiring loads before the visitor agrees (verify in the network tab); banner offers a real “decline”; choices can be changed later | 2-4 hours to configure and verify |
| Fonts and assets | No requests to fonts.googleapis.com or other third-party asset CDNs; everything served locally | 1-2 hours |
| Embeds | YouTube/Vimeo/Maps behind two-click placeholders or consent gating | 2-4 hours |
| Forms | Minimal fields; no pre-ticked boxes; no coupling; entries stored in one known place with a retention period; SMTP transport known and EU-based where possible | 1-3 hours |
| Newsletter | Double opt-in active; consent proof stored; EU provider or DPF-certified provider with DPA | 1 hour |
| Analytics | Cookieless/self-hosted tool without a banner, or GA properly consent-gated; IP anonymisation on | 1-3 hours |
| WooCommerce | Guest checkout on; minimal checkout fields; retention/anonymisation settings configured; payment providers named in the policy | 1-2 hours |
| Rights | Core export/erase tools tested end to end, including plugin data; comment IP storage disabled; cleanup routine scheduled | 1-2 hours |
| Processors | Complete processor list; DPA signed with each (host, CDN, email, backups, developer) | 2-3 hours of admin |
| Documents | Privacy policy matches the inventory; Impressum present for DACH; both linked site-wide; lawyer/DPO sign-off | lawyer’s task, developer supplies the facts |
| Security | Hardening baseline in place; monitoring/logging capable of detecting a breach; backup locations known and covered by DPAs | 2-4 hours |
A full first pass on an existing small business site is typically 10-20 hours of developer time – at my rate of EUR 15 per hour, a few hundred euros to move from “we have a banner” to genuinely defensible. On a fresh custom build most of it costs nothing extra, because it is just how the site is built.

Myths I correct every month
- “We are a small site, GDPR does not apply.” There is no small-business exemption for websites. Some record-keeping duties relax under 250 employees, but the core rules apply from visitor one – and warning letters in Germany target small sites precisely because their mistakes are easy to spot.
- “We installed a GDPR plugin, so we are compliant.” No plugin can be. Plugins implement pieces – consent, policy generators – but compliance is the sum of inventory, configuration, contracts and documents.
- “We are outside the EU, so it does not apply to us.” If you offer goods or services to people in the EU or monitor their behaviour, it applies regardless of where you or your server sit. I am in India and it applies to my client work daily.
- “Consent fixes everything.” Consent is the weakest basis to rely on when another fits – it can be withdrawn at any time, and asking for consent you do not need just adds banner friction.
- “Once compliant, always compliant.” Every new plugin, pixel, embed or form field changes the picture. Compliance is a maintenance task, which is why I bundle the quarterly checks into ongoing care plans.
Need help making your WordPress site GDPR-ready?
I audit and fix WordPress sites for GDPR every month for German, UK and EU clients: the network-tab consent test, local fonts, two-click embeds, form storage and retention, analytics migration, WooCommerce settings and the processor list – with a clear fixed quote within 24 hours, and your lawyer or DPO kept in the loop for the legal texts. It usually runs alongside my WordPress maintenance and security service so the site stays compliant, not just becomes compliant once. Have a look at my portfolio, then send me a message with your site’s URL – I reply within 24 hours.
Frequently asked questions
How do I make my WordPress website GDPR compliant?
Run a data inventory (forms, analytics, embeds, fonts, logs, orders), remove or gate everything that sends data before consent, host fonts locally, set retention periods, sign DPAs with your processors, and have a lawyer or DPO sign off the privacy policy. A banner alone is not compliance.
Does GDPR apply to small websites?
Yes. There is no small-site or small-business exemption for processing visitor data – the rules apply from the first visitor and the first contact form entry.
Do I always need a cookie banner on a WordPress site?
No. If the site uses no consent-requiring services – self-hosted fonts, cookieless analytics like Plausible or properly configured Matomo, two-click embeds – you do not need a banner at all.
Is Google Analytics GDPR compliant?
GA4 can be operated with prior consent via a correctly configured banner, but expect 30-60% of visitors to decline, and note that German authorities scrutinise it heavily. Matomo or Plausible avoid the banner and the data loss for most small sites.
Why do Google Fonts need to be locally hosted?
A 2022 Munich court ruling found that loading fonts from Google’s servers transmits the visitor’s IP to Google without consent. Self-hosting the font files removes the transfer and is faster anyway.
How long can a WooCommerce store keep order data?
Invoice-relevant order data is kept for the statutory accounting period (ten years in Germany) under legal obligation; data without a retention duty – failed orders, inactive accounts – should be deleted or anonymised on a schedule, which WooCommerce’s built-in privacy settings can automate.
Can a developer make my site GDPR compliant without a lawyer?
A developer can implement the technical side – consent blocking, local fonts, retention, rights tooling – and document what the site does, but the legal texts (privacy policy, DPAs, consent wording) should be reviewed by a lawyer or data protection officer.