A 2024 Ranking of Top Cookie Banner (Consent Management Platform) Solutions

- I ranked the top Cookie Banners (Consent Management Platforms or CMPs) based on my own ranking criteria.
- The top CMPs are Cookiebot, Cookie Script and OneTrust.
- Read the ranking of all analyzed CMPs and the criteria in this article.
Jump to the ranking by following this link: CMP Ranking
Who is this blog post written for?
- Website owners who want to choose the right CMP for their website.
- Developers who want to integrate a CMP into a customers website.
- CMP developers who want to improve their CMP.
- Readers who are curious how scoring and ranking a CMP could look like.
Why I ranked CMPs
Simply said: Because I wanted to find out which CMPs are easiest to implement and maintain with a tracking code manager like our Pixel Manager.
It's been several years since I started adding support for various Consent Management Platforms (CMPs) in the Pixel Manager natively (supported CMPs). The logic is simple. The Pixel Manager is not a CMP, it is a tracking code manager. That's what the Pixel Manager is really good at. Today it is a requirement in many regions to manage visitor consent in a legally compliant way. That's what CMPs are for.
But, the Pixel Manager is not a CMP. Developing and maintaining a CMP in a compliant way is a huge task by itself. It requires a different set of skills and resources. That's why I decided not to develop a CMP, but to support the best and most popular CMPs on the market.
Over the years I've accumulated a lot of experience adding support for several CMPs into the Pixel Manager. I've seen the good, the bad and the ugly. I've seen CMPs that are easy to integrate and work well, and I've seen CMPs that are a nightmare to integrate and don't work well.
At minimum, I will provide a list of the criteria I used to rank the CMPs, so you can make your own ranking and informed decision what the best CMP is for your use case.
I hope that this ranking will help you choose the right CMP for your website.
What this article is NOT about
-
This article is not about the legal requirements of a CMP. I am not a lawyer and I don't give legal advice. I am a tracking code manager developer and I give technical advice.
-
This article is not about a judgement if certain consent categories make sense or not. There are some categories that have become a quasi standard, like "statistics", "marketing", "preferences" and "necessary". These might have their roots in the interpretation of the GDPR cookies policy. If they make sense or not is not a question this article answers. The article only focuses how easy it is to implement and maintain a CMP with these categories.
Ranking criteria
Category based consent
There are two main types of consent. Category based consent and vendor based consent. What do I mean by that?
-
Category based consent: The website uses multiple tracking pixels. Each tracking pixel, such as Google Analytics of Facebook Ads, is assigned to a category. For Google Analytics that would be "statistics" and for Facebook Ads that would be "marketing". The visitor can then choose to allow or disallow each category. If the visitor allows the "statistics" category, the Google Analytics pixel, including all other statistics pixels, are loaded. If the visitor disallows the "marketing" category, the Facebook Ads pixel, including all other marketing pixels, are not loaded. This is category based consent.
-
Vendor based consent: The website uses multiple tracking pixels. Each tracking pixel is from a vendor. The visitor can then choose to allow or disallow each vendor. If the visitor allows Google Analytics, only the Google Analytics pixel is loaded. If the visitor disallows Facebook Ads, only the Facebook Ads pixel is not loaded. This is vendor, or pixel based consent.
Category based consent is the most common type of consent. It is the most user-friendly type of consent. And it is the most easy one to implement with a tracking code manager like the Pixel Manager or the Google Tag Manager. That's why I prefer category based consent.
Vendor based consent is very difficult to implement with a tracking code manager. It is not necessarily the first time setup that's difficult, but the maintenance and the changes are. You see, website managers often add and remove tracking pixels. With vendor based consent you have to update the CMP and the tracking code manager every time, and test if everything works correctly. This is a lot of work and a lot of room for errors.
There is the question if vendor based consent might be required to be compliant with the GDPR. I personally don't think so (but don't take this as legal advice). Here are a few facts that help you make your own decision:
-
The GDPR requires that the visitor gives informed consent: GDPR on consent
The GDPR policy states that the visitor must be informed what data is collected, trough which tracking pixel and for what purpose. But, it doesn't state that there is a requirement to be able to give consent for each vendor separately. So categorizing the tracking pixels, letting the visitor know which vendor belongs to which category and letting the visitor choose which category to allow or disallow is compliant with the GDPR.
-
There are many very popular and certified CMPs that only support category based consent. This means that the CMPs with category based consent are compliant with the GDPR, such as Cookiebot or OneTrust.
While it is not wrong to use vendor based consent, I think that category based consent is the much better choice. It is more user-friendly, easier to implement and maintain and it is compliant with the GDPR.
Standardized categories
When CMPs standardize the categories, it is much easier to implement the tracking pixels and the consent logic in a tracking code manager. This is because the tracking code manager can be pre-configured with the standardized categories. This is a huge time saver and reduces the risk of errors.
Having implemented more than 10 CMPs in the Pixel Manager (and analyzed next to 20), I can tell you that not all CMPs have standardized the categories. This can be a pain point.
Most CMPs now use 4 different types of categories:
- Statistics: Tracking pixels that set cookies for statistics and analytics, such as Google Analytics.
- Marketing: Tracking pixels that set cookies for marketing purposes, such as Facebook Ads.
- Preferences: Website features that set cookies to remember the visitor's choices, such as the language.
- Necessary: Website features that set necessary cookies for the website to work properly, such as the login state.
Some CMPs use different names for these categories. That's not a big deal. That's easy to map.
But, some CMPs don't support all of these categories. They may not support the "preferences" category.
Other CMPs offer more categories that feel arbitrary and unnecessary.
Such deviations make it harder to implement a standardized consent logic in a tracking code manager.
I like CMPs that use the four standardized categories statistics, marketing, preferences, and necessary.
Google is usually leading the way with the standardized categories. They now added more categories with the Google Consent Mode v2, which give a bit more granular control. It would be great if CMPs would either support the 4 standardized categories and/or the Google Consent Mode v2 categories.
Script auto blocking
Some CMPs offer the option to block tracking scripts before the visitor has given consent. This is a very important feature and I think every CMP should support it. If the tracking scripts are not blocked before the visitor has given consent, the tracking scripts will run before the visitor has given consent. That would be a violation in some regions like for visitors from the European Union (GDPR).
There are several components of this feature that I want to discuss here:
Who blocks
-
Why not just use the Pixel Manager for that? The Pixel Manager can only block tracking scripts that are added through the Pixel Manager. It can't block tracking scripts that are added directly to the website. That's why it is important that the CMP has a way to block tracking scripts that are added directly to the website.
-
Why not just use the CMP auto-blocker for all tracking scripts? The CMP auto-blocker can only block or unblock the tracking code manager itself (the Pixel Manager in our case), but it can't block or unblock the tracking scripts separately that are added through the tracking code manager.
So a combination of both, the CMP auto-blocker and the tracking code manager's blocking mechanism is required for the best result.
How to block
There are several ways how the tracking scripts are blocked by the CMP:
-
HTML script tag adjustment: The CMP changes the HTML output and changes the
<script>tag into an invalid<script>tag. One way is by adding an incompatible script type attribute liketext/plainto the<script>tag which then looks like this<script type="text/plain">.The browser won't execute the script because it doesn't know how to handle the script type. This is a very effective way to block the script. Unblocking is done through some JavaScript and is very easy and reliable.
-
Pure JavaScript blocking: Some CMPs use just JavaScript to block the tracking script execution. They require that the CMP code is loaded before all other script tags and then blocks the tracking script execution on the fly. This works, but has disadvantages.
Modern browsers prefetch the scripts before any JavaScript is executed. This means that the tracking script vendors already get visitor information before consent is given.
You really need to make 100% sure that the CMP script is always loaded before any other script. There are plugins that may load scripts with a higher priority than the CMP script, which would place them above the CMP script and avoid the blocking.
So, this method comes with a higher risk of errors.
CMPs that are added through a plugin to the website, which adjust the <script> tags in the HTML output are the most reliable way to block tracking scripts. Also, this allows for the most reliable way to exclude the blocking for tracking code managers like the Pixel Manager.
Disable auto blocking for the tracking code manager
To make sure that the Pixel Manger (or any tracking code manager) works properly with a CMP that uses script auto blocking, the CMP should offer a way to exclude the tracking code manager script from being blocked. This is important because the Pixel Manager, as a tracking code manager, should never be blocked. Only if the Pixel Manager loads an reads the CMP consent it can decide which tracking scripts to load or block.
There are several ways how the CMP can exclude the Pixel Manager script from being blocked:
-
CMP Settings: Settings in the CMP that allow you to exclude certain scripts from being blocked.
-
Comment based: Add a comment above and below the tracking code manager script that the CMP recognizes and excludes from being blocked.
A comment based exclusion looks like this:
<!-- CMP exclude start -->
<script src="//example.com/app.js"></script>
<!-- CMP exclude end --> -
Script tag attribute based: Add a script tag attribute to the tracking code manager script that the CMP recognizes and excludes from being blocked.
A script tag attribute based exclusion looks like this:
<script data-cmp-exclude src="//example.com/app.js" ></script>or this:
<script data-cmp-exclude="true">
// Pixel Manager script content
</script> -
WordPress filter: Add a pattern to a WordPress filter, offered by the CMP, that excludes the tracking code manager script from being blocked.
A good filter based exclusion filter offers a way to add any type of pattern that appears in the script tag or within the script.
A filter based exclusion looks like this:
add_filter('cmp_exclude_script', function($patterns) {
$patterns[] = 'example.com/app.js';
$patterns[] = 'pmwDataLayer';
return $pattern_array;
});
From experience I can say, the most effective and efficient ways are script tag based attributes and WordPress filters. With those, the tracking code manager can set the exclusions itself programmatically. Because it doesn't require any manual intervention by the website owner, the error rate is much lower.
I prefer CMPs that offer the script tag based attribute and WordPress filter based exclusions.
