Two settings changes in Shopify, two changes in the site repo. Together they make ticket sales visible to Meta, which they currently are not.
Paid traffic is about to run to 10slabs.com.au/tickets. Right now the Meta pixel
fires PageView on that page and nothing else, and the checkout sits on the raw
10-slabs.myshopify.com domain, where the click ID is dropped and no events fire
at all.
The result is that no ticket sale is reported back to Meta — so ad delivery optimises toward page loads instead of buyers, and there is no cart-abandoner audience to retarget. None of that can be fixed from the ads side. It needs these four changes.
Walked live on 22 Sep at phone width with a test fbclid attached, reading network
requests and cookies at each step.
T1 and T2 are sequential — T2 depends on T1. T3 and T4 are independent and can start today in parallel.
Settings → Domains. Add the subdomain and set it as the checkout domain, so checkout
stops resolving to 10-slabs.myshopify.com.
This is the one that matters most. Because myshopify.com is a different
registrable domain, the Meta click-ID cookie set on 10slabs.com.au cannot be
read at checkout — it is dropped at the hop. Putting checkout on a subdomain of the
main site keeps the buyer inside one cookie scope, and stops them seeing an unfamiliar
domain at the moment they enter a card number.
checkout.10slabs.com.au, not 10-slabs.myshopify.com
Every purchase button on the new landing page — both Buy Now buttons on the
ticket tiers and the three Get tickets from $15 buttons in the hero, sticky bar and
footer — is currently wired to the active 10-slabs.myshopify.com checkout.
This is the part that would otherwise silently undo T1. A hardcoded
myshopify.com cart or checkout URL in the source keeps winning even after the
checkout domain is changed in Shopify, so the buttons have to be repointed at the new domain
or read it from config rather than a literal.
Worth doing as one change: put the checkout origin in a single constant or env var so it never has to be hunted across five call sites again.
myshopify.com returns no hardcoded checkout or cart URLscheckout.10slabs.com.au
Settings → Customer events → Add custom pixel. Custom pixels run in a sandboxed
frame, so the Meta base code has to be loaded inside the pixel itself — the snippet in
the site’s <head> does not reach the checkout.
Both events must carry value and currency. Without them Meta can
count sales but cannot report revenue, which makes return on ad spend impossible to calculate.
// Meta base code — required inside the custom pixel sandbox
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){
n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];
t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '1055335730825225');
analytics.subscribe('checkout_started', (event) => {
const c = event.data.checkout;
fbq('track', 'InitiateCheckout', {
value: c.totalPrice.amount,
currency: c.currencyCode,
num_items: c.lineItems.reduce((n, i) => n + i.quantity, 0)
});
});
analytics.subscribe('checkout_completed', (event) => {
const c = event.data.checkout;
fbq('track', 'Purchase', {
value: c.totalPrice.amount,
currency: c.currencyCode
});
});
InitiateCheckout then Purchase — visible in DevTools as requests to facebook.com/tr with ev=Purchasecd[value] and cd[currency] are populated, not empty1055335730825225
In the Nuxt app, alongside the existing inline pixel snippet in <head>.
fbq is already defined globally on the page, so these are just two extra calls.
Fire ViewContent when the ticket section comes into view, and
AddToCart on the Buy Now click — immediately before the redirect to
checkout. These two events are what build the retargeting pool of people who looked at
tickets and didn’t buy, which is the audience the ads will lean on hardest in the final
fortnight before the event.
// When the ticket section enters the viewport
fbq('track', 'ViewContent', {
content_type: 'product',
content_ids: [variantId],
content_name: 'General Admission',
value: 15.00,
currency: 'AUD'
});
// On Buy Now, before redirecting to checkout
fbq('track', 'AddToCart', {
content_type: 'product',
content_ids: [variantId],
content_name: ticketName, // e.g. 'VIP Early Access'
value: unitPrice * quantity,
currency: 'AUD'
});
ViewContentAddToCart with the correct variant, price and quantityOne pass, once all four are in.
Everything above was verified directly on the live site on 22 September 2026. Two test checkouts were started and abandoned at the payment form during that pass — no order was placed and no card details were entered, but they may appear as abandoned carts in the Shopify admin dated 22 September.
Once T1 is live, Veblen will verify the new checkout subdomain in Meta Business Manager and
rebuild the campaign on a Purchase objective. Nothing else is needed from the dev team after
these four. Any questions on the event specs, come back to us rather than guessing at the
parameters — the value and currency fields in particular have
to be exact for revenue reporting to work.