## Cookie consent and GDPR

URL: https://hub.jkdevstudio.com/knowledge-base/integration/cookie-consent-integration
Updated: 2026-09-06
Summary: Show a consent banner and hold third party scripts until a visitor agrees, plus an honest account of when this is not the right tool.

This integration shows a cookie consent banner and keeps third party scripts switched off until a visitor agrees. It is self contained: the banner and the stored choice are ours, with no third party plugin involved.

## Is this the right tool for you

Read this before the settings, because the answer decides whether the rest of the page is relevant.

This is a simple solution for simple sites. It is built for a blog with a countable number of external scripts: analytics, and perhaps one or two trackers.

The reason it is built that way: our banner is made for our theme and does exactly what this theme needs. It does not drag in another interface, other styles and another body of code.

The contrast with the large consent platforms is about their job rather than their quality. They cover the maximum number of cases for any site in the world, and that is precisely why they are heavy. Page speed pays for that universality, and on a small blog it pays for nothing.

So: if you run [Google Analytics](https://analytics.google.com/) and a small tracker, use the built in integration rather than installing a separate consent plugin.

And the honest boundary, where ours is not enough: complex analytics stacks, several ad networks, a requirement to keep a consent log, or certified compliance in a specific jurisdiction. Then you need a specialized product, and that is a normal outcome.

<div data-callout="warning">

**We provide a tool, not legal advice.**

What you are obliged to show visitors, and what counts as valid consent, is decided by your jurisdiction rather than by a setting in a theme. [The GDPR text itself](https://gdpr-info.eu/) is public and readable, and for anything beyond an ordinary blog the question belongs to a lawyer.

</div>

## The banner

The appearance settings are ordinary: width, heading, text and icon.

Buttons: accept all, reject (keeping only what is necessary), and customize. The last two can be switched off if you do not want them.

There are three categories and they are fixed: necessary, analytics, marketing. You can rewrite the name and description of each in your own words, which is what a visitor reads in the settings window.

Necessary cannot be switched off, and it is worth explaining why in its description, because that is a visitor's first question.

How long a choice lasts is a setting: after the number of months you set, the visitor is asked again.

## Custom Scripts, the part that matters

This is what makes the banner meaningful. On its own the banner blocks nothing. This list is what does the blocking.

The logic in one sentence: every third party script is added here and assigned to a category. Scripts in analytics and marketing wait for consent; necessary ones run immediately.

One entry holds a name (for you, so the list is readable), the script itself, where it loads, and its category.

A script is accepted two ways: a full URL to a file, or the code itself. Paste the code on its own, with no surrounding script tag, which is the most common mistake people make here.

A worked example, and one is enough because the rest follows the same pattern. Add Google Analytics, choose the analytics category, save, and test.

<div data-callout="danger">

**A script added anywhere else on the site is not blocked by the banner.**

A tag in a template, in another plugin, or in a custom code field runs regardless of what the visitor chose, so consent is requested and the script fires anyway. That is worse than having no banner at all, because it looks compliant and is not. Everything that has to wait for consent goes in this list and nowhere else.

</div>

## Testing before launch

Preview mode shows the banner on every page load, but only to administrators. Visitors keep seeing their saved choice.

It is a configuration tool. Switch it off before the site goes live.

A short check to finish: reject everything and confirm analytics did not fire, then accept and confirm it did.

## Integrations are part of the theme

<div data-callout="note">

**This integration is licensed with the theme, not on its own.**

Integrations are premium functionality for customers running a Pro license of one of our themes. They are written against our themes and expect them, and we cannot support or take responsibility for what one does inside somebody else's theme. See [how theme integrations work](/knowledge-base/integration/how-theme-integrations-work).

</div>

## Common questions

<details><summary>Does this make my site GDPR compliant?</summary>

No tool can make that claim on its own: this one gives you consent handling and script blocking, and whether your specific setup complies is a legal question about your site, your visitors and your jurisdiction.

</details>

<details><summary>Do I need this if I have no analytics?</summary>

If nothing on your site sets third party cookies then there is nothing to consent to, though it is worth checking what your plugins load before concluding that, since embeds and fonts often reach outside without anybody deciding they should.

</details>

<details><summary>Can I add my own category?</summary>

No, the three are fixed, and what is yours to write is their names and descriptions in the visitor's own language.

</details>

<details><summary>Where is the visitor's choice stored?</summary>

In their own browser, on your domain, and it is not sent anywhere or shared with us.

</details>

<details><summary>A script runs before consent is given</summary>

It is almost certainly not in the Custom Scripts list, because that list is the only thing that holds a script back, so find where it is actually added, whether that is a template, another plugin or a custom code field, remove it from there and add it here with a category instead.

</details>

## Still stuck

[Open a support ticket](https://hub.jkdevstudio.com/support) with the script you are trying to gate and where it is currently added.