Plateformes

Comment ajouter un bandeau cookies à un site Drupal

Drupal n’a pas de champ d’administration pour le code du head : la balise va donc dans la copie de html.html.twig de votre thème, juste après la balise head ouvrante, ou dans un petit module qui l’attache avec hook_page_attachments(). Videz les caches, désinstallez tout autre module de consentement et marquez les balises que vous maîtrisez avec type="text/plain" et un data-cq-category ; le reste du réglage se fait dans le tableau de bord Cookiequiet.
Publié le 21 octobre 2026 · Par l’équipe Cookiequiet

Étapes

Copier votre baliseDans le tableau de bord Cookiequiet, ouvrez votre site et copiez la balise d’installation : une seule balise script avec votre clé de site, data-consent-mode et data-auto-block réglés sur 1, et l’attribut defer.
Copier html.html.twig dans votre thèmeCopiez le html.html.twig qu’utilise votre thème (celui du thème de base, ou celui de core/modules/system/templates/) dans le dossier templates de votre propre thème ou sous-thème. Ne modifiez jamais le cœur ni un thème contribué directement.
Coller la balise après la balise headCollez la balise sur la ligne qui suit la balise head ouvrante, au-dessus des espaces réservés du head, des CSS et du JS. Vous pouvez aussi l’attacher depuis un module personnalisé avec hook_page_attachments(), comme le montre ce guide.
Vider les cachesAllez dans Configuration, puis Développement (Development), puis Performance et cliquez sur Vider tous les caches (Clear all caches), ou lancez drush cr. Drupal ne prend en compte un nouveau modèle qu’après une reconstruction du cache.
Désinstaller les autres modules de consentement et régler la balise GoogleDésinstallez EU Cookie Compliance, Klaro ou tout autre module de bandeau. Si le module Google Tag imprime votre balise, cochez Enforce Privacy Consent Policy dans les réglages avancés du conteneur.
Marquer les balises que vous avez collées vous-mêmePour un pixel Meta ou un bloc de mesure d’audience ajouté dans un modèle ou dans un bloc en HTML complet (Full HTML), remplacez la balise script d’ouverture par type="text/plain" avec data-cq-category réglé sur analytics ou marketing.
Ajouter le lien Préférences de cookies et testerDans Structure, puis Menus, ajoutez un lien vers #cq-preferences dans le menu du pied de page. Ouvrez le site dans une fenêtre de navigation privée, cliquez sur Tout refuser et vérifiez qu’aucun cookie _ga ou _fbp n’est déposé.

Où coller la balise dans Drupal

Drupal imprime chaque page à travers un seul modèle, html.html.twig, dont le head contient trois espaces réservés : un pour les éléments du head, un pour les CSS et un pour le JavaScript. La balise doit se trouver au-dessus des trois, pour se charger avant toute bibliothèque ou tout script de module.

Avec un modèle de thème (sans module). Utilisez un thème personnalisé ou un sous-thème du thème que vous utilisez. Copiez le html.html.twig dont hérite votre thème (Olivero fournit le sien dans core/themes/olivero/templates/layout/ ; sinon, copiez core/modules/system/templates/html.html.twig) dans le dossier templates de votre thème, et ajoutez la balise sur la ligne qui suit <head> :

html
<head>
<script src="https://cookiequiet.com/cq.js" data-site="YOUR_SITE_KEY" data-consent-mode="1" data-auto-block="1" defer></script>
<head-placeholder token="{{ placeholder_token }}">
<title>{{ head_title|safe_join(' | ') }}</title>

Videz ensuite les caches sous Configuration, puis Développement, puis Performance, ou avec drush cr. Drupal n’utilise votre copie d’un modèle qu’après une reconstruction du cache. Ne modifiez pas Olivero ni un thème contribué directement : la prochaine mise à jour supprimerait la ligne.

Avec un module personnalisé. Si vous préférez ne pas toucher aux modèles, attachez la balise depuis hook_page_attachments(). Les éléments ajoutés à html_head s’impriment dans l’espace réservé du head, avant les CSS et le JS :

php
function mymodule_page_attachments(array &$attachments) {
$attachments['#attached']['html_head'][] = [[
'#tag' => 'script',
'#attributes' => [
'src' => 'https://cookiequiet.com/cq.js',
'data-site' => 'YOUR_SITE_KEY',
'data-consent-mode' => '1',
'data-auto-block' => '1',
'defer' => TRUE,
],
], 'cookiequiet'];
}

Le hook s’exécute aussi sur les pages d’administration. C’est sans conséquence, mais vous pouvez les exclure en vérifiant d’abord le contexte d’administration du routeur.

Quels cookies Drupal dépose-t-il lui-même ?

Le cœur de Drupal ne dépose qu’un cookie à lui : le cookie de session, nommé SESS (ou SSESS en HTTPS) suivi d’une empreinte de 32 caractères tirée de l’hôte. Il est créé quand quelqu’un se connecte, ou quand un module stocke des données dans la session d’un visiteur anonyme (un panier, un formulaire en cours). Il est strictement nécessaire et n’exige aucun consentement. Tout le reste vient des modules et des balises que vous ajoutez ; c’est pourquoi un scan compte davantage sur Drupal que sur la plupart des plateformes : lancez le scanner de cookies gratuit sur quelques types de pages (accueil, article, formulaire, boutique) pour voir ce que vos modules impriment réellement.

Comment gérer les balises ajoutées par les modules

  • Module Google Tag. Il imprime la balise Google à votre place, vous ne pouvez donc pas la marquer. Dans les réglages avancés du conteneur de balises, cochez Enforce Privacy Consent Policy : le module règle alors les valeurs de consentement par défaut de Google sur refusé (ad_storage, analytics_storage, ad_user_data, ad_personalization) avant de charger gtag.js. Cookiequiet envoie la commande consent update quand le visiteur choisit, et la balise l’applique quel que soit le code qui l’a imprimée. Si vous utilisez plutôt Google Tag Manager, voir le guide Google Tag Manager.
  • Balises que vous avez collées. Dans un modèle ou dans un bloc qui utilise le format de texte HTML complet, remplacez la balise d’ouverture par <script type="text/plain" data-cq-category="marketing"> pour le pixel Meta, analytics pour Hotjar ou Clarity. Le guide pour bloquer les scripts jusqu’au consentement montre le principe pour les scripts inline et externes.
  • Scripts que les modules injectent en JavaScript. Avec data-auto-block="1", Cookiequiet retient les scripts et iframes créés ainsi par environ 80 traceurs connus jusqu’à ce que leur catégorie soit accordée.
  • Vidéos distantes. Le module Media de Drupal imprime les lecteurs YouTube et Vimeo comme des iframes dans le HTML, elles se chargent donc tout de suite. Pour qu’une vidéo attende le consentement, utilisez une iframe avec data-cq-src à la place de src dans un bloc en HTML complet.

Désinstallez tout autre module de consentement (EU Cookie Compliance, Klaro, COOKiES) après la bascule, pour que les visiteurs ne voient qu’un seul bandeau et qu’un seul consentement soit enregistré.

Comment ajouter le lien Préférences de cookies

Allez dans Structure, puis Menus, ouvrez le menu Pied de page (Footer) et cliquez sur Ajouter un lien (Add link). Saisissez #cq-preferences comme lien (Drupal accepte les chemins qui commencent par un dièse) et « Préférences de cookies » comme titre. Cookiequiet ouvre le centre de préférences depuis tout lien qui a cette adresse. Si votre pied de page est plutôt un bloc personnalisé, ajoutez-y une ancre avec le même href.

Comment tester

  1. Ouvrez le site dans une fenêtre de navigation privée, déconnecté. Le bandeau s’affiche avec « Tout accepter » et « Tout refuser » de la même taille.
  2. Cliquez sur Tout refuser. Dans les outils de développement (Application, puis Cookies dans Chrome), vous devez voir cq_consent et rien de Google, de Meta ni de Hotjar.
  3. Effacez les cookies, rechargez, cliquez sur Tout accepter : les scripts marqués s’exécutent et leurs cookies apparaissent.
  4. Consultez le registre des consentements dans le tableau de bord Cookiequiet.

Si le bandeau ne s’affiche pas, affichez le code source de la page et cherchez cq.js. Une balise absente signifie presque toujours que le cache n’a pas été reconstruit, ou que le modèle se trouve dans un thème qui n’est pas le thème par défaut.

Ce qui est propre à Drupal

  • Deux thèmes. Le thème d’administration (Claro) n’utilise pas votre modèle public : le bandeau n’apparaît donc que sur le site public, ce qui est le comportement voulu.
  • Cache de pages et proxys inverses. La balise est la même pour chaque visiteur : le cache de pages de Drupal, Varnish ou un CDN peuvent donc mettre en cache les pages qui la contiennent. Purgez-les une fois après la modification.
  • Multisite. Donnez à chaque site sa propre clé de site, pour que les registres des consentements et les politiques restent séparés.

Cookiequiet est gratuit pour un site, ciblage géographique compris, et Starter coûte 3 € par site et par mois sans limite de pages vues, voir les tarifs.

Questions

Non, et il n’en faut pas. La balise est une seule balise script, placée dans le html.html.twig de votre thème ou attachée par quelques lignes de hook_page_attachments() dans un module personnalisé. Les deux méthodes l’impriment dans le head de chaque page publique.
Non. Le cookie SESS ou SSESS garde un utilisateur connecté ou contient un panier, ce qui est strictement nécessaire à un service demandé par le visiteur. Le cœur de Drupal ne le crée que lorsqu’il y a quelque chose à stocker dans la session.
Cochez Enforce Privacy Consent Policy dans les réglages avancés du conteneur de balises. Le module règle alors les valeurs de consentement par défaut de Google sur refusé avant de charger la balise, et Cookiequiet envoie la mise à jour quand le visiteur accepte ou refuse la mesure d’audience et le marketing.
Désinstallez-le après la bascule. Deux bandeaux troublent les visiteurs et enregistrent deux consentements différents. Cookiequiet remplace son bandeau, son blocage des scripts et son registre des consentements.

Mettez un bandeau discret sur votre site dès aujourd’hui

Gratuit pour un site avec toutes les fonctions essentielles, sans carte ni période d’essai qui expire. Passez un site en Starter pour €3 par mois pour le mettre à vos couleurs par IA sans la mention Cookiequiet, ou en Pro pour €9 pour le concevoir avec l’agent IA.