---
title: "TikTok Pixel not firing after cookie consent on Webflow"
description: "The TikTok Pixel is on your Webflow site but sends nothing after visitors accept cookies. Check grantConsent, your consent tool, custom code order and GTM."
updated: "2026-10-23"
url: "https://ispixelworking.com/guides/tiktok.not_firing_after_consent/webflow"
---

# TikTok Pixel not firing after cookie consent on Webflow

Fix guide · Webflow · medium · about 30 min · updated 2026-10-23

For the finding “TikTok Pixel does not fire after consent” (`tiktok.not_firing_after_consent`).
Also for: [Any website](https://ispixelworking.com/guides/tiktok.not_firing_after_consent/generic), [Shopify](https://ispixelworking.com/guides/tiktok.not_firing_after_consent/shopify), [WordPress](https://ispixelworking.com/guides/tiktok.not_firing_after_consent/wordpress), [Framer](https://ispixelworking.com/guides/tiktok.not_firing_after_consent/framer).

## What this means

The TikTok Pixel script is on your Webflow site, but after cookies were accepted, no events were sent to TikTok. As far as TikTok can tell, this page has no visitors.

Webflow has no built-in TikTok integration, so the pixel on your site was added as custom code, a Code Embed, a GTM tag or by a third-party App, and your consent tool decides when it may run. Somewhere between "visitor clicks Accept" and "pixel sends", that chain is broken.

Why it costs you money:

- TikTok cannot see page views or conversions from this page, so campaigns optimize without data and reported results are too low.
- Audiences built from website visitors stop growing.

How sure we are: if our checker found and accepted your cookie banner, this is reported as **critical**. If we did not find a banner we could operate, it is reported as **high**: the pixel may be waiting for a banner we did not recognize. Test it yourself before changing anything.

## How to confirm it yourself

Our check runs from a browser in the EU. If your consent tool shows its banner only in some regions, use a VPN or ask a colleague in the EU.

1. Open your **published** site on the domain your ads link to, in a **private (incognito) window**.
2. Open developer tools (F12), go to the **Network** tab and filter by `analytics.tiktok.com/api`.
3. Click **Accept** on the cookie banner and wait about 5 seconds. You should see a request to `analytics.tiktok.com/api/v2/pixel` with `"event": "Pageview"` in its payload. If nothing appears, the pixel does not fire after consent.
4. Click to another page. If events only appear now, the pixel starts one page too late and you lose the first page of every new visit, which is usually your ad's landing page.
5. Open the **Console** tab. `ttq.holdConsent is not a function`, `ttq.grantConsent is not a function` or `ttq is not defined` point to causes in steps 2 and 5 below.

TikTok Pixel Helper, **Test Events** in Events Manager and TikTok's `pixel_debug` cookie show the same from TikTok's side; see the [general guide](https://ispixelworking.com/guides/tiktok.not_firing_after_consent/generic).

## How to fix

1. **Check that the consent tool records the choice.** After clicking Accept, reload: the banner should not come back. If it does, fix the consent tool first. Also note that Consent Pro is free only on the `webflow.io` staging domain: without a paid Consent Pro plan, its banner does not appear on your custom domain, and scripts waiting for consent never run.
2. **If you use TikTok's consent commands** (`ttq.holdConsent()` in the base code):
   - make sure `"holdConsent"`, `"revokeConsent"` and `"grantConsent"` are in the `ttq.methods` list of the base code in **Head code**. TikTok's standard snippet does not include them; without them, `ttq.holdConsent()` throws an error and the pixel never starts;
   - make sure something calls `ttq.grantConsent()` after Accept. Webflow does not do this for you. Add a script to **Site settings > Custom code > Footer code** that your consent tool runs only after marketing consent, for example with Consent Pro:

     ```html
     <script type="fs-consent" fs-consent-categories="marketing">
       window.ttq && ttq.grantConsent();
     </script>
     ```

     With Consent Pro, letting it hold back the base code itself (step 3) is the safer choice. Version 2 detects and blocks scripts automatically and loads released scripts asynchronously, so it may block the unmarked base code too, and this script can run before `ttq` exists. If you keep TikTok's consent commands with Consent Pro, check after the scan that the base code is not blocked, and keep the `window.ttq &&` guard. With Cookiebot, use `type="text/plain" data-cookieconsent="marketing"`. Returning visitors who accepted earlier need the call on every page too, so check that the consent tool runs this script on later page loads without a click (verification step 2 below). Until `grantConsent()` runs, the pixel only queues events.
3. **If the base code itself is held back by your consent tool,** check the category and the markup:
   - **Consent Pro** version 2 assigns categories when it scans your site, and the category set in the App takes precedence over a `fs-consent-categories` attribute. Open the App, check that TikTok is listed under **Marketing**, and that your banner's Accept button grants Marketing. After a change, scan again and publish.
   - **Switched consent tools?** Scripts still marked `type="fs-cc"` are only started by Finsweet's older `fs-cc.js` library. If that library is no longer on the site, those scripts never run.
   - **OneTrust App**: the pixel belongs in the App's **Blocked Scripts** section. Consent categories are configured in your OneTrust account, not in Webflow; check there that the category holding TikTok is the one your Accept button grants.
4. **If the pixel is in Google Tag Manager:**
   - Open GTM's **Preview** mode, enter your published URL and click Accept. Check that a consent update appears and that `ad_storage` changes to `granted`, then check whether the TikTok tags fired or were blocked by consent. TikTok's setup flow puts the base code in its own tag, so check that tag as well as the event tags.
   - A tag with only a page view trigger runs once, before the visitor has answered, and is blocked. Add the trigger your consent tool documents: Consent Pro uses a **Custom Event** trigger named `consent-updated`; Finsweet's older Cookie Consent pushes `marketing-activated`; Cookiebot pushes `cookie_consent_marketing`. Keep the `ad_storage` consent requirement, and make sure the tag cannot fire twice on the same page.
   - Test both a first visit (click Accept) and a later page (consent already stored).
5. **Check script order.** On Webflow, page-level custom code is placed after the site-wide code in the same section, and **Footer code** comes after everything in the `<head>`. If the base code is in **Footer code** but a `ttq.track(...)` or `ttq.grantConsent()` call sits in a page's **Inside `<head>` tag** field, that call runs before `ttq` exists and the console shows `ttq is not defined`. Put the base code in **Head code** and calls that depend on it in **Footer code** or **Before `</body>` tag**.
6. **Check that the pixel is on every page.** Code in one page's settings, in a Code Embed on some pages only, or missing from CMS template pages or from a secondary locale leaves those pages silent.
7. **Check the pixel ID.** `context.pixel.code` in the request payload must be the pixel you look at in Events Manager.
8. **Publish** to your custom domain, not only to the `webflow.io` staging domain, and publish the GTM container if you changed it.

## Common causes

- `ttq.holdConsent()` was added without adding the consent methods to `ttq.methods`, so the base code stops with an error.
- Nothing on the site calls `ttq.grantConsent()` after Accept, or only the banner's click handler does, so returning visitors stay on hold.
- The pixel is in a category that the Accept button does not grant, or Consent Pro's scan put it in a different category than the attribute says.
- Scripts are still marked for a consent tool that was removed (for example `type="fs-cc"` after moving to Consent Pro).
- Consent Pro has no paid plan, so its banner and the scripts behind it never load on the custom domain.
- The TikTok tags in GTM have only a page view trigger and no trigger for the consent tool's event.
- The site was published to the staging domain but not to the custom domain.

## How to verify the fix

1. In a fresh private window on the published custom domain: no pixel events before Accept, and a page view request within a few seconds after Accept, on the same page.
2. Open another page: the page view is sent once on load, without clicking anything.
3. Re-run the check on IsPixelWorking. The issue should be gone, and "TikTok Pixel fires before cookie consent" should not appear in its place.

## Questions people ask

### Why does the TikTok Pixel work in Webflow's preview but not on my live site?

Webflow shows custom code effects in preview, but they do not go live until you publish. Also check that you published to the custom domain your ads use, and that your consent tool's banner appears there.

## Sources

- TikTok API for Business, Pixel Cookie consent mode (`ttq.methods`, `holdConsent` before `ttq.load`, queued events sent on `grantConsent`, every page): https://business-api.tiktok.com/portal/docs?id=1795929012554754
- TikTok API for Business, Install Pixel using code (base code, `ttq.page`, debug mode): https://business-api.tiktok.com/portal/docs?id=1739585702922241
- TikTok API for Business, Work with Single Page Applications (GTM setup tag that holds the base code): https://business-api.tiktok.com/portal/docs?id=1801524003169281
- Webflow, TikTok integration (no native TikTok Pixel toggle): https://webflow.com/integrations/tiktok
- Webflow Help, Custom code in head and body tags (page code appears after site-wide code; changes go live on publish): https://help.webflow.com/hc/en-us/articles/33961357265299-Custom-code-in-head-and-body-tags
- Webflow Help, Localize page settings (custom code per locale): https://help.webflow.com/hc/en-us/articles/33961235760531-Localize-page-settings
- Webflow Help, Integrate Consent Pro for consent management (free on staging, paid plan needed on custom domains): https://help.webflow.com/hc/en-us/articles/34394790067859-Integrate-Consent-Pro-for-consent-management
- Webflow Help, Install and use the OneTrust app (Blocked Scripts, categories managed in OneTrust): https://help.webflow.com/hc/en-us/articles/49624805369491-Install-and-use-the-OneTrust-app
- Consent Pro Docs, Migration (v2 detects and blocks scripts automatically; app-assigned category takes precedence over `fs-consent-categories`): https://docs.consentpro.com/webflow/migration
- Consent Pro Docs, Async script loading (`type="fs-consent"`, category values, released scripts load asynchronously): https://docs.consentpro.com/runtime/script-loading
- Consent Pro Docs, Google Tag Manager setup (`consent-updated` Custom Event trigger): https://docs.consentpro.com/webflow/google-tag-manager
- Finsweet Cookie Consent README (`type="fs-cc"`, `marketing-activated` data layer event): https://cdn.jsdelivr.net/npm/@finsweet/cookie-consent@1/README.md
- Cookiebot Support, Manual cookie blocking: https://support.cookiebot.com/hc/en-us/articles/4405978132242-Manual-cookie-blocking
- Cookiebot Support, Conditionally loading tags in Google Tag Manager (`cookie_consent_marketing`): https://support.cookiebot.com/hc/en-us/articles/4417455460114-Conditionally-loading-tags-in-Google-Tag-Manager
- Google Tag Manager Help, Tag Manager consent mode support: https://support.google.com/tagmanager/answer/10718549
