Skip to main content

Menu

Choose a theme and configure high-contrast mode. Preferences are saved in your browser only.

User Preferences

Theme

Pick a palette or follow your system preference.

High Contrast

Sharper text and borders. System follows your OS setting.

Practical guides

How to add a cookie consent banner to Framer (step by step)

Framer sells itself on no-code, but it kept the one power feature a consent banner needs: global custom code with a head slot. Zest drops into End of Head and covers every page of the site.

Framer’s custom code lesson covers the slots and placement options, handy if their settings screens have shifted since this guide was written.

What you need

  • A Framer site on a paid plan (Mini or above). The free tier has no custom code.
  • Take the snippet from the playground:
<script>
  window.ZestConfig = {
    position: "bottom",
    theme: "auto",
    policyUrl: "/privacy-policy"
  };
</script>
<script src="https://cdn.jsdelivr.net/npm/@freshjuice/zest/dist/zest.min.js"></script>

Install it

  1. Open the project.
  2. Click the gear next to the project name for Site Settings.
  3. Find Custom Code under the General tab.
  4. Paste the snippet into End of Head. Site-level placement means every page, from the first visit.
  5. Save Changes, then Publish. Framer runs custom code on the published site only.

Page-level custom code exists too (per-page settings → Custom Code), but consent belongs at site level so no page ships without the banner.

Check it works

Published URL, incognito window:

  • The banner greets a first visit and never returns once the choice is stored.
  • Framer sites usually carry third-party widgets: chat, forms, analytics. Add those script domains to Zest’s blocklist, the blockedDomains key in window.ZestConfig (how it works), then confirm in the network tab that they load only after the visitor consents.

Fixes

No banner. You are in the editor. Publish, then open the live URL.

Page-level code did not appear. Page-scope injection has a known history of flakiness in Framer. Site-level End of Head sidesteps the problem entirely.

A widget runs its own scripts. Embedded widgets execute third-party code, which Zest gates by domain like anything else. If a widget must always run (a form that is functionality, not tracking), keep it off the blocked list and mention it in your policy.

Why not a marketplace CMP

Framer’s marketplace is happy to rent you a subscription consent tool. Zest does the same job with one 16KB open-source script: free forever, no metering, no account, self-hostable if a public CDN is not your thing. One paste, done.

Draft the policy page free with the policy generator, six questions and done.

Own your cookie banner.

Zest is free and MIT-licensed, and it doesn't phone home to anyone.
Drop the script in and you're done.