Skip to main content
The Signals pixel sends one identity-free arrival per document load through your collection domain. Conversion events and advertising identity require a complete consent grant. Plainrouter gives each workspace a unique Signals snippet with its publishable key and collection URL.
The browser setup path completes after Plainrouter receives a real eligible arrival. Managed-hostname setup can also recognize qualifying verified server revenue. The identity-free server verification event is a diagnostic and does not complete onboarding.

Before you begin

You need:
  • A collection domain that shows as active in Plainrouter.
  • Access to the shared <head> template or site-wide code injection setting for your website.
  • Permission to deploy changes to the domain connected to the workspace’s Signals setup.
If your collection domain is still pending, complete Configure DNS and CNAME first.

Install the pixel

1

Copy your snippet

Open Signals → Install. For managed-hostname setup, confirm your collection-hostname label and add the CNAME. When the hostname is active, find 2. Add the browser snippet.Click Copy snippet. Use the complete snippet exactly as Plainrouter provides it. Its key and script URL are unique to your workspace.Before the first arrival, Dashboard and Signals also display the installation instructions. Once your hostname is provisioned, you can copy its CNAME and snippet directly from those screens.
2

Add it to every page

Paste the snippet immediately before the closing </head> tag in your site-wide layout.Your snippet follows this structure:
Keep the initialization block before the asynchronous script. This preserves commands that run while the pixel is loading.
3

Deploy and visit your site

Publish the change, then open any page on the connected website.For managed-hostname setup, choose I’ve added the CNAME and snippet after installing. This records your setup path; the Verified status still requires stored arrival evidence.Use the network checks below to confirm that the pixel loads and sends an arrival. Then test your consent integration separately for conversion events and Meta delivery. You can use Connect or manage Meta on Install when you are ready; Meta setup is not required for the arrival check.
You can close the setup screen after deployment. Reopen Signals later to check the workspace’s Signals status.
Open Signals → Install → Consent banner. A workspace manager can enable Show the PlainRouter consent banner and optionally Show a floating reopen control. Use the included banner when your site does not already have a consent platform; supported external sources can take precedence. Verify actual grant, rejection and withdrawal behavior using Track events and consent. The banner does not automatically block unrelated scripts installed by your CMS, plugins or tag manager. Use Cookie scan and declaration to inspect pre-consent activity and publish the observed inventory.

Can an AI assistant read my installation instructions?

Yes. With a production Read workspace key, call get_install_instructions. A single-workspace key needs no arguments; a multi-workspace key needs workspace_id. Confirm the returned workspace, then use its existing CNAME and snippet. The call is read-only and reports stored first_arrival state; it does not provision DNS or install code. This tool supports managed hostnames only. A null snippet means the hostname is not ready; finish setup in Install. For same-origin forwarding, use Configure serving.

Verify the installation

To test browser collection, open your browser’s developer tools and reload the page:
  1. Select the Network tab.
  2. Search for v4.js and confirm it loads from your collection domain.
  3. Search for arrival and confirm one POST /v1/arrival request receives 202. This request occurs before consent evaluation, including when consent is denied or has not been provided.
  4. Grant all three advertising permissions through your consent integration. Confirm the separate PageView request to /v1/events succeeds.
On a same-origin installation, these requests use the generated forwarding prefix on your website. Confirm both the script and collector requests stay on that origin. Use the same-origin request checklist if they return HTML, redirect, or lose the prefix. An accepted arrival confirms edge receipt; setup completes after the arrival is stored for the workspace. If a Meta dataset is connected, grant advertising consent before checking the managed browser Pixel with Meta’s Chrome extension. The Meta Pixel Helper guide explains its statuses and what it cannot see, such as server-side events. The consent-source message on Install is separate from the Verified arrival status. It describes the configured consent surface or the latest eligible retained consent-source observation; it is not a live test of your CMP on the current page. A detected consent source does not prove that a new purchase was delivered to Meta. An arrival can be verified while advertising consent is absent. Complete the grant, partial-consent, and withdrawal checks after checking collection, then inspect the purchase’s delivery separately.

What happens on initialization

signalq("init", ...) sends one arrival per document and publishable key before checking consent. It does not create or read visitor cookies for that request. Repeating initialization with the same key, changing consent, navigating with the History API, or restoring the page from the back-forward cache does not send another arrival. A full page reload starts a new document and can send a new arrival. The current snippet sends the publishable key in a text/plain JSON body with credentials: "omit". It does not put click IDs or customer data in the arrival body. The current v4 arrival also supplies bounded traffic context: the page path, referrer origin and an allowlisted campaign-query subset. Collector requests use referrerPolicy: "no-referrer", so the browser does not attach the full page URL as an HTTP Referer. Arrivals do not trigger Meta delivery.

Which arrival fields are retained?

The collector retains the UTC-hour timestamp, workspace and policy context, and these bounded dimensions: The arrival has no visitor identifier, IP address, raw user-agent string, full referrer URL, arbitrary query parameters, or commerce payload. The generated arrival ID identifies the arrival record, not a visitor or session. Keep personal data out of website paths and campaign labels; permitted strings are not automatically scrubbed of personal information. The separate /v1/events path requires consent_basis: "consent" and granted values for ad_storage, ad_user_data, and ad_personalization. After the first complete grant, the collector sends a consented PageView. This event does not add a second arrival to the arrival total. Events requested before consent are not replayed retroactively. Arrival requests are not retried, queued in the browser, or resent by beacon. A failed request can therefore leave that document load uncounted.
The generated snippet uses signalq for tracking commands. Do not rename it to signal. The separate plainrouter("consent", "open") control reopens the supported consent surface; it is not the tracking queue.

Content Security Policy

If your website uses a Content Security Policy, allow the collection domain in both places:
  • Add https://YOUR_COLLECTION_DOMAIN to script-src.
  • Add https://YOUR_COLLECTION_DOMAIN to connect-src.
  • Apply your site’s nonce or hash policy to the inline initialization block.
For Path B, allow the website’s same-origin script and requests in the applicable directives; an existing 'self' source may cover them. Keep the inline initialization block under your nonce or hash policy. See same-origin CSP troubleshooting. You may need to allow https://connect.facebook.net in script-src after you connect Meta. The Meta library loads only after advertising consent is granted.

Troubleshoot

Why do Dashboard and Signals still show installation instructions?

The workspace has not recorded its first arrival. Check that your deployed page loads v4.js and sends an accepted arrival request, then allow the screen to refresh. Copying the snippet, confirming installation, or sending an API verification event does not replace a real browser arrival. Follow the installation checks to distinguish an edge receipt from stored collection.

The script does not load

  • Confirm the snippet appears in the rendered page source.
  • Clear your site cache or CDN cache after deploying.
  • Disable content blockers while testing.
  • If your site uses a Content Security Policy, allow your collection domain in script-src. The initialization block must also follow your site’s nonce or hash policy for inline scripts.

The event request is blocked

  • Allow your collection domain in the connect-src directive of your Content Security Policy.
  • Confirm you installed the snippet on a domain allowed by the workspace’s Signals setup.
  • Confirm the publishable key and script URL came from the same Plainrouter snippet.

Signal setup still shows as incomplete

Confirm the collection hostname is active, v4.js loads, and /v1/arrival is accepted. A missing or invalid publishable key or unauthorized website origin is rejected without recording an arrival. A 429 means an arrival rate limit was reached. Fix the cause and reload the page; the snippet does not retry an arrival on its own. The identity-free verification event cannot replace a real arrival.

An older installation behaves differently

These instructions describe the current v4 channel. Older v1–v3 assets remain frozen compatibility versions and do not acquire v4 changes automatically. Replace an older installation with the complete current snippet generated by Plainrouter. The v4 script uses a one-hour cache lifetime with up to 24 hours of stale-while-revalidate caching. When testing an update, disable the browser cache and reload before comparing behavior.

Next step

Add your consent state and business events in Track events and consent. For background on how browser pixels work, see What is pixel tracking?