Plateformes

Comment ajouter un bandeau cookies à un site Astro

Dans Astro, placez la balise dans le head de votre layout commun (src/layouts/Layout.astro) comme premier script, avec is:inline pour qu’Astro la rende exactement telle quelle. Marquez les balises Google et Meta dans le même layout avec type="text/plain" et data-cq-category, et gardez les balises marquées dans le layout plutôt que dans les pages quand vous utilisez le ClientRouter.
Publié le 20 octobre 2026 · Par l’équipe Cookiequiet

Étapes

Ouvrir votre layoutOuvrez le composant de layout que chaque page utilise, en général src/layouts/Layout.astro, qui contient les balises html, head et body autour d’un slot.
Ajouter la balise comme premier scriptDans le head, avant tout autre script, ajoutez la balise Cookiequiet avec la directive is:inline. Astro laisse un tel script intact : pas de bundling, pas de type="module".
Marquer les balises dans le layoutAjoutez la balise Google ou le pixel Meta dans le même head avec is:inline, type="text/plain" et data-cq-category réglé sur analytics ou marketing. Ou laissez la balise Google se charger en Consent Mode avec le bloc de consentement par défaut de Google placé avant elle.
Gérer les contenus embarquésÉcrivez les iframes YouTube ou Vimeo avec data-cq-src au lieu de src pour qu’elles se chargent après le consentement. Les composants façade qui créent le lecteur au clic sont retenus par le bloqueur automatique jusqu’à ce que la catégorie soit accordée.
Attention au ClientRouterAvec les view transitions, les scripts du head s’exécutent une fois par chargement complet et les scripts marqués dans le corps des pages ne sont pas activés lors d’une navigation côté client. Gardez les balises marquées dans le layout et lisez window.Cookiequiet dans les scripts des îlots.
Ajouter le lien Préférences de cookiesDans le composant de pied de page, ajoutez une ancre ordinaire avec href="#cq-preferences" et l’attribut data-cq-show-preferences.
Tester avec Tout refuserLancez astro dev ou prévisualisez le build, 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é. Acceptez tout, rechargez et consultez le registre des consentements.

Où coller la balise dans Astro

Les layouts Astro sont des composants qui fournissent l’enveloppe de la page, avec <html>, <head>, <body> et un <slot /> pour le contenu. La balise va dans le head de ce layout, avant tout autre script. Astro ne traite un <script> que lorsque son seul attribut est src ; le nôtre porte des attributs data, Astro le laisse donc tranquille, mais is:inline rend l’intention explicite :

astro
---
// src/layouts/Layout.astro
const { title } = Astro.props;
---
<html lang="en">
<head>
<meta charset="utf-8" />
<script is:inline src="https://cookiequiet.com/cq.js" data-site="YOUR_SITE_KEY" data-consent-mode="1" data-auto-block="1" defer></script>
<meta name="viewport" content="width=device-width" />
<title>{title}</title>
</head>
<body>
<slot />
</body>
</html>

Chaque page qui utilise le layout, y compris les pages Markdown qui le nomment dans leur frontmatter layout, charge désormais le bandeau. Si votre projet a plusieurs layouts, mettez la ligne dans chacun, ou dans un petit composant Head.astro qu’ils incluent tous.

Comment gérer les balises que votre site charge

Balises marquées dans le layout. Ajoutez les balises après la balise Cookiequiet, avec is:inline, type="text/plain" et une catégorie. Cookiequiet les exécute quand la catégorie est accordée, ou tout de suite lors des visites suivantes quand un choix enregistré l’inclut :

html
<script is:inline type="text/plain" data-cq-category="analytics" src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX"></script>
<script is:inline type="text/plain" data-cq-category="analytics">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
</script>

Le code de base du pixel Meta reçoit data-cq-category="marketing" ; son image noscript doit être retirée, comme l’explique le guide Meta Pixel.

Consent Mode plutôt que marquage. Pour que la balise Google continue de se charger avec des signaux refusés par défaut et des pings sans cookies, placez le bloc de consentement par défaut de Google (un script inline) entre la balise Cookiequiet et la balise Google, comme montré dans le guide Google Analytics 4. Cookiequiet envoie la mise à jour après chaque choix.

Partytown. Gardez cq.js sur le thread principal : il a besoin du document. Si vous déplacez la balise Google dans un worker Partytown, transmettez dataLayer.push pour que les commandes de consentement l’atteignent.

Contenus embarqués. Écrivez les iframes avec data-cq-src au lieu de src. Les composants façade qui construisent le lecteur YouTube au clic créent l’iframe en JavaScript ; le bloqueur automatique retient youtube.com/embed sous marketing tant que cette catégorie n’est pas accordée. Voir Vidéos YouTube et consentement.

Ce qui change avec le ClientRouter

Avec les view transitions, Astro remplace le contenu de la page sans chargement complet. La balise dans le head continue de tourner d’une navigation à l’autre, le choix enregistré reste appliqué et le bandeau ne réapparaît pas. Deux conséquences :

  • Les scripts marqués dans le corps d’une page chargée par navigation côté client ne sont pas activés avant le prochain événement de consentement, parce que Cookiequiet active les balises marquées quand un choix est appliqué au chargement et après chaque choix. Gardez les balises marquées dans le layout.
  • Les scripts d’îlots qui ont besoin du choix doivent lire window.Cookiequiet.get() (le tableau c liste les catégories accordées) et s’abonner avec window.Cookiequiet.on(callback), qui renvoie une fonction de désabonnement.

Comment ajouter le lien Préférences de cookies

Dans src/components/Footer.astro, ou là où vit votre pied de page :

html
<a href="#cq-preferences" data-cq-show-preferences>Cookie preferences</a>

Comment tester

  1. Lancez astro dev (ou astro build puis astro preview) et ouvrez le site dans une fenêtre de navigation privée.
  2. Cliquez sur « Tout refuser » : les cookies sont cq_consent et rien de Google ni de Meta.
  3. Effacez les cookies, cliquez sur « Tout accepter », rechargez : les scripts marqués s’exécutent.
  4. Avec le ClientRouter, naviguez entre les pages et vérifiez que le choix tient.
  5. Consultez le registre des consentements dans le tableau de bord.

Ce qui est propre à Astro

  • Sortie statique. Le bandeau est un script client ; le site construit fonctionne sur n’importe quel hébergement statique (Netlify, Vercel, Cloudflare Pages, GitHub Pages). L’article sur les bandeaux cookies pour sites statiques couvre le reste.
  • Content Security Policy. Autorisez https://cookiequiet.com dans script-src et connect-src.
  • Plusieurs langues. La langue du bandeau suit le navigateur du visiteur, et chaque texte est modifiable par langue ; elle ne lit pas le lang de la page.
  • Collections de contenu et Markdown. Les pages rendues via le layout ne demandent aucun changement ; des balises collées dans le contenu Markdown contourneraient le layout, gardez donc les balises dans le layout.

Questions

Astro regroupe et transforme les scripts qu’il traite, ajoute type="module" et peut les déplacer. is:inline demande à Astro de rendre la balise exactement telle qu’elle est écrite, ce qui conserve les attributs data, l’attribut defer et la position dans le head. Un script avec d’autres attributs que src n’est de toute façon pas traité, mais la directive le rend explicite.
Le bandeau lit sa configuration dans les attributs de sa propre balise script (document.currentScript) et doit s’exécuter avant les balises qu’il contrôle. Un import de module bundlé perdrait les attributs et l’ordre.
Non. La balise dans le head persiste d’une navigation côté client à l’autre et le choix enregistré reste appliqué. Seuls les scripts marqués dans le corps des pages chargées par navigation ne sont pas activés avant le prochain choix : gardez les balises marquées dans le layout et conditionnez les îlots via window.Cookiequiet.
Une intégration qui injecte un script dans le head (injectScript avec l’étape head-inline) fonctionne tant que le résultat est la même balise à la même position. Le layout est plus simple à auditer.

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.