Pixel and tag checks

How to check your Criteo OneTag is working

Criteo OneTag works if the browser loads ld.js from static.criteo.net and sends requests to sslwidget.criteo.com/event with a=your account ID. Each page type needs its own event, and the product IDs it sends must match the IDs in your product feed, or Criteo cannot show the right products.

Skip the DevTools: the free scan loads your page in a real browser, accepts and rejects the cookie banner, and shows what the Criteo OneTag actually sent.

At a glance

Tag script
static.criteo.net/js/ld/ld.js (or a per-account loader from dynamic.criteo.com/js/ld/)
Event request
sslwidget.criteo.com/event?a=<account ID>&p0=e%3DviewItem…
Account ID
A number, usually 4 to 6 digits
Events by page
viewHome, viewList, viewItem, viewBasket, trackTransaction
Consent
Load through your consent tool; Criteo also reads IAB TCF consent

Check it yourself in two minutes

  1. Open DevTools on the Network tab, filter on criteo, accept the banner and load your home page.
  2. Find the request to sslwidget.criteo.com/event. Check a is your account ID and that one of the p parameters says e=viewHome.
  3. Repeat on a category page (viewList with up to three product IDs), a product page (viewItem with one ID) and the basket (viewBasket with IDs, prices and quantities).
  4. Complete a test order: trackTransaction should carry the order ID and every product with price and quantity.
  5. Copy a product ID from the requests and search for it in your Criteo product feed. It must be identical, including any prefixes or variant suffixes.

Why the Criteo OneTag breaks, and how to fix it

Product IDs do not match the feed

The most damaging Criteo problem, and invisible in most tag checkers. If the tag sends the variant ID while the feed has the parent ID (or a SKU versus an internal number), Criteo cannot connect visits to products and shows generic or no recommendations. Compare IDs from the Network tab with the feed for a few products, including one with variants.

One event on every page

A OneTag install that sends viewHome or nothing but the loader on product and basket pages gives Criteo no product interest to retarget on. Each template needs its own event. With Google Tag Manager, the Criteo community template can read the GA4 ecommerce dataLayer and map it to the right events.

No transaction on the confirmation page

trackTransaction lets Criteo stop showing ads for products already bought and measure sales. Hosted or redesigned checkouts often drop it:

window.criteo_q.push(
  { event: 'setAccount', account: 12345 },
  { event: 'setSiteType', type: 'd' },
  { event: 'trackTransaction', id: '10045', item: [
    { id: 'SKU-123', price: 84.50, quantity: 1 }
  ]}
);

Email sent unhashed

OneTag's setEmail event improves cross-device matching. Criteo's documentation describes passing a hashed address; a plain address in the request is personal data sent to a third party. The scan flags any plain-text email in a Criteo request.

The tag loads before consent

OneTag syncs cookies with Criteo's partners as soon as it runs. In the EU and the UK it must wait for marketing consent, through your consent tool or IAB TCF. See Ad pixel fires before consent or after "reject".

What the free scan checks

  • Criteo loads, and sends at least a page view
  • Only one Criteo ID, or a warning if there are more
  • Criteo waits until the visitor accepts cookies
  • Criteo stops after the visitor clicks "reject all"
  • No email addresses in plain text in Criteo requests

Server-side events (Conversions APIs, server-side tagging) are invisible to a public scan, so the report never marks them as working or broken.

Related

Sources

Updated 2026-10-27. Based on the platforms' public documentation and the requests their public tags make; menus and names change, so check the linked pages if a step looks different.

Other platforms