Code Injection isn't on every plan
Site-wide Code Injection is only available on paid plans that include it. On a trial or a plan without it, GTM and pixels simply can't be added, and people paste code into code blocks that only run on one page.
This is for Squarespace site and store owners who advertise on Google or Meta and want conversions they can trust. Squarespace keeps code locked down: tracking has to go through Code Injection, the order confirmation area and a few built-in integrations, each with its own limits. I set those up properly, so orders and leads reach every ad platform once, with the right value.
Proper Squarespace tracking means installing GTM in the site-wide Code Injection header, which needs a paid plan that includes it, firing purchases from the order confirmation injection with Squarespace's order placeholders, tracking form blocks by their success message, and avoiding overlap with Squarespace's built-in Google and Meta integrations. Server-side GTM adds a Conversions API copy.
The events I set up on Squarespace, and where each one is sent.
Site-wide Code Injection is only available on paid plans that include it. On a trial or a plan without it, GTM and pixels simply can't be added, and people paste code into code blocks that only run on one page.
Squarespace can connect GA4 and the Meta Pixel natively. If the same IDs are also added through Code Injection or GTM, page views and purchases are sent twice.
You can't add scripts to the Squarespace checkout itself. The only reliable place for purchase data in the browser is the order confirmation (or order status) injection, which needs its own code.
A form block usually swaps in a post-submit message on the same page. A thank-you page trigger never fires, and a click trigger counts failed submissions.
Squarespace Scheduling and other booking tools are often embedded as iframes, so GTM on the page can't see when a booking is completed without extra work.
| Event | When it fires | Sent to |
|---|---|---|
view_item / ViewContent | Product page viewed | GA4, Meta Pixel |
add_to_cart / AddToCart | Add to cart button clicked | GA4, Meta Pixel + CAPI |
begin_checkout / InitiateCheckout | Checkout button clicked from the cart | GA4, Meta Pixel |
purchase / Purchase | Order confirmation or order status page loads | GA4, Google Ads, Meta Pixel + CAPI |
generate_lead / Lead | Form block shows its post-submit message | GA4, Google Ads, Meta Pixel + CAPI |
book_appointment | Booking confirmed in the scheduling tool | GA4, Google Ads, Meta |
contact_click | Click on a tel:, mailto: or WhatsApp link | GA4, Google Ads |
I check your plan, the built-in integrations, Code Injection and any code blocks, and compare platform numbers with your Squarespace orders and form entries.
We agree on the conversions that matter and decide which events stay with Squarespace's integrations and which move to GTM.
I install GTM, add the order confirmation purchase code, set up form and booking tracking, and add server-side GTM for Meta CAPI.
I place a test order and submit each form on the live site, and confirm every conversion arrives once with the right value.
You get an event map and a note on what to check when you change templates, forms or checkout settings.
Squarespace gives you a separate injection area for the page shown after an order, and it supports placeholders such as {orderId} and {orderGrandTotal}. I use that area to push a purchase event to the dataLayer with the order ID, total and currency, and GTM sends it on to GA4, Google Ads and Meta. Newer stores show an order status page instead of the older confirmation page, so I check which one your site uses before writing the code.
The order ID matters. It lets GA4 ignore repeat loads of the page and lets Meta match the browser purchase to the server copy, so the same order isn't counted twice.
Squarespace's built-in GA4 and Meta connections are quick and fine for basic reporting. They give you little control over event names, values for leads or server-side delivery. If you need Google Ads conversions, enhanced conversions or a proper Conversions API setup, GTM with a server container is the better base.
Whichever route you choose, it should be one route per platform. Most of the broken Squarespace setups I see have the same pixel running from an integration and from Code Injection at the same time.
Paste the GTM head snippet into the site-wide header Code Injection and the noscript snippet into the footer, then save. Code Injection is only available on paid plans that include it, so check your plan first.
Add a purchase event to the order confirmation injection using Squarespace's order placeholders for the order ID and total, then fire the Google Ads conversion from GTM on that event. Turn on enhanced conversions for better match rates.
Usually the Meta Pixel or GA4 is connected through Squarespace's built-in integration and also installed in Code Injection or GTM. Remove one of them and keep a single sender per platform.
Squarespace's Meta integration covers the basics, with limited control. For full control over parameters and matching I use server-side GTM on a subdomain of your domain, with a shared event ID so Meta deduplicates against the Pixel.
Track the post-submit message rather than the button click, or set the form to redirect to a thank-you page. I usually prefer the success message method because thank-you pages get revisited and bookmarked.
A step-by-step guide to Google Ads conversion tracking with GTM: conversion actions, the Google tag, conversion linker, values, transaction IDs and testing.

Meta merges Pixel and server events only when the event name and event ID match. Here is how to set that up correctly and prove it works.

Step-by-step GTM setups for tracking WhatsApp clicks, phone taps and form submissions in GA4, with event names, triggers and a testing checklist.
Get a free audit of your tracking and ad account. Usually replies within 1–2 hours.