> ## Documentation Index
> Fetch the complete documentation index at: https://restoo.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting

> What to check when an event does not reach a platform, the widget does not look right, or the numbers do not add up.

When something does not arrive, it is almost always one of three things: consent has not been informed yet, the platform's library is not on the page, or your Content Security Policy is blocking something silently.

This page starts from the symptom and takes you to where the fix is.

## Checking that events fire

Before calling the installation done, check it with each platform's tool: the Chrome extension it publishes or, where there is none, the browser console. Open the page where booking happens — yours, or the page hosted by Restoo — make a test booking, and watch which events show up.

| Destination                             | Extension                                                                                                                                                                                                                                                 |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GA4, Google Ads, and Google Tag Manager | [Google Tag Assistant](https://chromewebstore.google.com/detail/tag-assistant/kejbdjndbnbjgmefkgdddjlbokphdefk)                                                                                                                                           |
| Meta Pixel                              | [Meta Ads Data Advisor](https://chromewebstore.google.com/detail/meta-ads-data-advisor/fdgfkebogiimcoedlicjlajpkdmockpc)                                                                                                                                  |
| TikTok Pixel                            | [TikTok Pixel Helper](https://chromewebstore.google.com/detail/tiktok-pixel-helper/aelgobmabdmlfmiblddjfnjodalhidnn)                                                                                                                                      |
| OpenAI Pixel                            | OpenAI publishes none. Add `debug: true` to the pixel's `init` and watch the console — the `[oaiq]` lines — or the Network tab filtered by `bzr.openai.com`: [pixel troubleshooting](https://developers.openai.com/ads/measurement-pixel#troubleshooting) |

The extensions read the tags on the page that has them, which is where [Restoo Connect](/widget/connect) forwards to, so the widget's iframe hides nothing from you.

<Note>
  **Accept consent before writing an event off.** Restoo Connect sends nothing
  until the visitor's decision is known, so on a page with an unanswered cookie
  notice you will see absolutely nothing — and that is the correct behavior.
</Note>

## Symptoms and likely causes

| Symptom                                                                        | Likely cause                                                                                                                                                                                                                                    |
| ------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Nothing reaches any platform                                                   | Consent was never informed: no [`cmp`](/widget/advanced-installation#param-cmp) declared and [`setConsent()`](/widget/advanced-installation#setconsent-signals) is never called                                                                 |
| GA4 measures, but the advertising platforms are empty                          | One of the three advertising signals is denied, and [all three are required](/widget/consent#what-each-destination-requires) for every event                                                                                                    |
| Conversions reach GA4, but match rates are poor                                | `ad_user_data` denied, so [customer identity is not sent](/widget/consent#customer-identity)                                                                                                                                                    |
| GA4 receives nothing even when the visitor accepts everything                  | You have not [declared what you use the property for](/widget/integrations#google-analytics-4). Without that answer, `ga4` is not enabled                                                                                                       |
| One destination receives nothing while the others do                           | Its library is not loaded on the page — the console says so — or the destination is [turned off for this installation](/widget/connect#turn-a-destination-off-for-one-installation)                                                             |
| The first events are lost and later ones arrive                                | Restoo.js loads **before** the platform's library: [it has to come after](/widget/connect#before-you-start)                                                                                                                                     |
| Your colors and fonts fall back to the defaults, and no destination is enabled | Your CSP blocks `connect-src`, so the widget cannot read your account settings: see [Content Security Policy](/widget/advanced-installation#technical-notes)                                                                                    |
| The inline widget does not resize to its content                               | Your CSP blocks inline scripts, which is how the resizer loads                                                                                                                                                                                  |
| Conversions arrive twice                                                       | Two active routes to the same destination: [avoiding duplicate conversions](/widget/bidding-optimization#avoiding-duplicate-conversions-across-ga4-google-ads-and-gtm)                                                                          |
| One contact counts as two                                                      | The metric filters on `action_category` instead of `action_option`: [`action_taken`](/widget/events#actiontaken) emits one on opening the menu and another on picking the channel                                                               |
| The campaign is not attributed when the visitor browses before booking         | [Restoo Attribution Transfer](/widget/attribution-transfer) is missing from every page, or its consent is                                                                                                                                       |
| The OpenAI Pixel receives nothing while the other destinations do              | The ID saved in your account is not the pixel initialized on the page — `measureSingle` drops the event silently — or the SDK keeps an earlier denial of its own consent: check that your cookie notice calls `oaiq("consent", true)` on accept |

## What the console tells you

Restoo warns in the browser console every time it skips an operation, and says why. Every message is prefixed, so filtering on `Restoo` shows all of them:

| Prefix             | Where it comes from                                                                        |
| ------------------ | ------------------------------------------------------------------------------------------ |
| `[Restoo]`         | Restoo.js: mounting the widget, reading the CMP, and loading Restoo Connect                |
| `[RestooConnect]`  | Forwarding to each destination: missing consent, missing library, incomplete configuration |
| `[Restoo consent]` | A consent signal with a name or value that is not recognized                               |

Two warnings worth knowing how to read:

* **"Events discarded: consent has not been informed"** — not an installation error. It means [`setConsent()`](/widget/advanced-installation#setconsent-signals) is never called, or no [`cmp`](/widget/advanced-installation#param-cmp) is declared. It appears once per page load.
* **"… event skipped: `gtag` / `fbq` / `ttq` is not available"** — the destination is enabled in your account but its library is not on this page. Either install it, or [turn the destination off here](/widget/connect#turn-a-destination-off-for-one-installation).

<Warning>
  **`connect-src` is the one that fails most quietly.** Without it the widget
  loads and keeps taking bookings, but it cannot read your account settings: your
  branding falls back to the defaults and **no analytics destination is ever
  enabled**, with not one error anywhere. If your site has a CSP, that is the
  first thing to check.
</Warning>

## Next steps

<CardGroup cols={2}>
  <Card title="Restoo Connect" icon="chart-line" href="/widget/connect">
    What each destination needs on your page in order to receive the events.
  </Card>

  <Card title="Consent" icon="shield-check" href="/widget/consent">
    What each destination requires, signal by signal, and what "unknown" means.
  </Card>
</CardGroup>
