Executive summary
The core issue: this is a checkout/conversion problem wearing a paid-media costume, and it's mobile-weighted. Clarity session-recording data confirms real, reproducible technical faults in the booking flow — 1,520 sessions hit a dead click during checkout over the full period (Apr 1–Jul 13), 53% of them on Mobile, carrying the most serious bugs (payment-session handling, JSON parsing, a Safari/iOS-specific WebKit fault); PC's 671 sessions are mostly generic script errors. A separate site-wide Clarity pull shows the same faults at much larger scale (51,039 sessions with a dead click site-wide), including errors specific to in-app/WebView browsers — the path most Meta ad clicks take. See the Checkout funnel tab for the full breakdown.
Why this shows up as a CPA problem: every US campaign runs Maximize Conversions bidding. When the checkout flow silently breaks for a meaningful slice of traffic, purchases dry up, which weakens the conversion signal the bidding algorithm relies on — so it bids less efficiently, pulls in less qualified traffic to compensate, and CPA rises further. That's a self-reinforcing loop: broken checkout → fewer purchases → weaker signal → worse bidding → less qualified traffic → still fewer purchases. This is consistent with what the Path to purchase tab shows: volume down across the board (sessions -32%, purchases -24% PoP) while on-site quality metrics (bounce rate, PDP rate) actually improved — the funnel isn't attracting worse traffic, it's losing real, qualified traffic at the payment step.
Timeline: CPA broke on June 1 (external targeting bug + a deliberate tCPA change), but performance genuinely worsened from June 30 onward — the same window Clarity's checkout error data covers. That's not a coincidence: the sale ending, new creative entering its learning phase, and the checkout faults compounding all landed in the same two-week stretch. Year-on-year, sessions are flat (+4.7%) but purchases are down 7.7% and conversion rate down 11.8% — confirming this isn't seasonal, it's a real degradation in the ability to convert traffic that didn't exist in the same window last year.
On the tracking gaps flagged elsewhere in this dashboard (Meta's GA4 channel-grouping mismatch, the checkout-step tracking gap): these are known, pre-existing measurement quirks, not new discoveries requiring urgent action — deprioritised below in favour of the checkout fix.
Action plan for recovery
This has been building for a while and leadership is watching closely — sequencing matters here.
Immediate (this week)
- Get the checkout JavaScript errors in front of the dev team as a P1: the "active payment session" conflict and the coupon function error ("z is not a function") are the most actionable — both look like concrete, fixable bugs rather than vague friction.
- QA the full checkout flow end-to-end, with mobile as the priority — it carries 53% of checkout dead-click sessions and all three of the most serious device-specific bugs (payment session, JSON parse, WebKit messageHandlers). PC's issues are comparatively minor and generic.
- Hold current bidding and targeting settings steady where possible — avoid further tCPA changes until it's clear whether the checkout fix (not another bid adjustment) is what moves CPA.
Short-term (2–4 weeks)
- Once a checkout fix ships, monitor purchase volume and rage/dead-click counts weekly (Checkout funnel tab) to confirm the fix is working before declaring victory.
- Allow Maximize Conversions bidding 1–2 weeks to relearn against a cleaner, stronger conversion signal once purchase volume recovers — resist the urge to intervene again mid-relearn.
- Re-run the Path to purchase comparison to check whether purchase conversion rate and abandonment move back toward last year's levels.
Medium-term (4–8 weeks)
- With the technical block removed, revisit whether the Southern/Northern Occasions tCPA settings and the Meta creative/audience mix still need adjustment — several of these were reactive changes made while the real problem was still checkout, so some may no longer be necessary.
- Stand up a recurring (weekly or fortnightly) Clarity review as a leading indicator for checkout health, since standard GA4/ad-platform reporting didn't surface this on its own.
Blended US CPA vs target
Daily CPA against the $58 target, with major account changes and seasonal activity overlaid. Hover for exact values.
Actual CPA
Target ($58)
Change / seasonal event
Key events
- May 1: US (Northern) Meta Advantage+ campaign goes live.
- May 10: Mother's Day (global) campaign switches off.
- May 25: Father's Day NH campaign live.
- May 28 – Jun 1: Advantage+ targeting issue across US/CA/UK caused the GA4 session spike (7–10k sessions/day, 80%+ bounce) — identified May 28, fixed June 1.
- Jun 1 CPA inflection point, same week as the targeting issue and a $100 tCPA cap added to Southern Occasions (Jun 9).
- Jun 16: tCPA reduced from $100 to $95 on Southern Occasions in response.
- Jun 21: Father's Day NH campaign switches off.
- Jun 23–26: US/CA/UK prime sale live — CPA holds in the high $70s.
- Jun 30 – Jul 1: sale ends; mass automated pause, manual re-activation, NH summer campaigns live Jul 1. This is also where Clarity shows checkout JS errors and rage/dead clicks concentrating — the point performance genuinely breaks, not just a bidding-settings issue.
- Jul 6: tCPA increased +10% ($95 → $104.5) on both Northern and Southern Occasions — a reaction to the CPA spike, likely treating a symptom rather than the checkout root cause.
- Jul 9–12: mobile Safari sessions showed a multi-day zero-purchase streak. Clarity data now explains it — a WebKit-specific JavaScript error ("window.webkit.messageHandlers" undefined, 471 occurrences sitewide, Apr–Jul) breaks checkout specifically in Safari/iOS in-app browser contexts. Not a one-off; part of the same chronic checkout fault documented on the Checkout funnel tab.
CPA by channel: Google Ads vs Meta
Hover to see exact CPA for either channel on any day
Google Ads CPA
Meta Ads CPA
Why CPA spiked — by channel and period
| Period | Google CPA | Meta CPA | Likely driver |
CPS by channel: Google Ads vs Meta
Cost per session, using real session counts filtered to amazingco.me/us pages by source/medium (google/cpc vs meta/facebook-pd) — corrected from the previous GA4 channel-grouping approach, which was undercounting Meta sessions by roughly 700×.
Google Ads CPS
Meta Ads CPS
Core insight
Both channels are converting cheap, real traffic worse than they should — and the checkout technical faults (see Checkout funnel tab) are the more likely explanation than creative quality alone. With real session data, Meta is actually cheaper per session than Google (roughly $0.61 vs $0.96 CPS), and both channels are bringing in comparable session volumes. A higher Meta CPA than Google's isn't because Meta traffic is expensive or unqualified — it's that a meaningful share of sessions on both channels are hitting a broken checkout step downstream, which no amount of channel-level optimisation fixes. Every campaign here runs Maximize Conversions bidding, so as purchases dry up from checkout friction, the bidding signal weakens and both channels drift toward less efficient delivery — a feedback loop, not two independent channel problems.
The GA4 channel-grouping mismatch that under-counted Meta sessions in an earlier version of this dashboard is a known, pre-existing measurement quirk (Meta's UTM tagging isn't recognised by GA4's default rules) — not a new finding, and not the priority here. It's worth a low-effort fix at some point but shouldn't compete with the checkout issue for attention.
Recommendations
- Both channels: hold current bidding/targeting steady and prioritise the checkout fix (Checkout funnel tab) before making further channel-level changes — CPA read is unreliable while the underlying conversion signal is broken.
- Google Ads: once checkout is fixed and signal recovers, revisit whether the reactive tCPA increases (Occasions at $104.5) are still needed, and resume the Empire State Building / Shopping generics tROAS work.
- Meta: hold off on creative/audience changes until checkout is confirmed fixed — testing new creative against a broken checkout step will just produce more noisy, hard-to-interpret results.
Weekly view (Mon–Sun). The first week (30 Mar–5 Apr) and last week (13 Jul–19 Jul) are partial — only a few days of data — so treat their totals as directional only.
Clarity findings: what's actually breaking in checkout
Microsoft Clarity session recordings, checkout pages specifically, Apr 1 – Jul 13, 2026 (full period)
Sessions with a dead click in checkout
1,520
Top JavaScript errors in checkout
"Page already has an active payment session" (17 occurrences) is the clearest, most fixable checkout-specific bug here — a real fault in payment-session handling, not vague friction. The two "is not a function" errors ("z is not a function" on coupon logic, plus a second "I is not a function") look like the same class of bug recurring under different minified variable names, suggesting a broader pattern of broken function references in the checkout bundle rather than one isolated incident. The WebKit messageHandlers errors (3 + 2 = 5) confirm Safari/iOS in-app browsers hit a distinct fault on top of the general checkout bugs. The "Unexpected token" syntax error (12) is unusual — that's the kind of error that can block an entire script from parsing, potentially explaining a chunk of the 1,520 dead-click sessions on its own.
Dead click sessions by device (checkout pages)
| Device | Dead click sessions |
Top JavaScript errors by device (checkout pages)
This is a mobile-weighted problem. Mobile carries the most dead-click sessions in checkout (813, ~53% of the 1,520 total), ahead of PC (671, ~44%) and well ahead of Tablet (36, ~2%). The error breakdown makes it sharper still: the payment-session bug (17), the JSON parse error (23), and the WebKit messageHandlers fault (3) are all logged on Mobile specifically in this device-level pull — PC's errors are limited to generic script errors (48) and a largely benign ResizeObserver warning (7). That reframes the priority: mobile checkout carries both more sessions and the more serious, more fixable bugs, while PC's issues look comparatively minor and generic.
Site-wide Clarity findings (Apr 1 – Jul 13) — this isn't limited to checkout
A broader Clarity pull across the whole site, not just checkout, confirms the same fault is much bigger and much older than the checkout-only view above suggests.
Sessions with a quickback click
17,849
Sessions with a dead click
51,039
Top JavaScript errors site-wide
The JSON Parse error is the real headline — 10,553 occurrences site-wide vs 23 on checkout pages specifically. It's overwhelmingly a site-wide problem that also reaches checkout, rather than something rooted in the checkout flow itself. "Script error." shows the same pattern (1,480 site-wide vs 153 on checkout) — both errors are pervasive across the site and simply show up wherever a user happens to be, including checkout.
Several of the next-biggest site-wide errors are specific to in-app / WebView browsers, not standard Chrome or Safari — "Can't find variable: _AutofillCallbackHandler" (607), "Error invoking postMessage: Java object is gone" (41, Android WebView), and two more WebKit messageHandlers errors (471 + 19, iOS WebView). This is the pattern you get when a user taps a link inside the Facebook or Instagram app and it opens in that app's built-in browser instead of full Safari or Chrome — exactly the path most Meta ad clicks take. This gives the Meta bounce-rate gap (55–56% vs Google's 17%, Channel performance tab) a much more concrete explanation than creative or audience quality: a meaningful share of Meta's traffic may be landing in a broken WebView environment before it ever gets a fair chance to convert.
Quickback click spikes
Spike dates (Apr 23–24, May 3, May 10, Jun 3–4, Jun 15–16, Jul 4) don't cluster around any single campaign change, sale, or creative launch in the change log — another signal this is a standing technical issue that flares up periodically rather than something triggered by a specific paid-media decision.
Sessions by device (weekly)
Purchases by device (weekly)
Purchase conversion rate by device (weekly)
Begin checkout — weekly volume & % change
Using the "CheckoutStepCompleted" event as the begin-checkout equivalent (this site doesn't fire a standard-named begin_checkout event). Bars = weekly count, line = week-on-week % change.
Checkout abandonment rate (weekly)
1 − (purchases ÷ begin checkout), by week
Consolidated insights & recommendations
One root cause, multiple data sources pointing at it. Checkout abandonment sits flat at a very high 83–85% every week regardless of the sale, the Advantage+ issue, or any bidding change. Clarity explains why at two scales: 1,520 sessions with a dead click on checkout pages specifically (Apr 1–Jul 13), driven by payment-session bugs, a recurring class of broken function references, and a Safari/iOS WebKit fault; and a much bigger, chronic JSON parsing error running at scale across the entire site (10,553 occurrences site-wide vs 23 on checkout pages) that reaches checkout without being rooted there. Both show up as the same symptom — dead clicks, quickback navigation, and abandoned carts — with WebView-specific errors adding a distinct, additional fault disproportionately affecting in-app browser traffic (likely Meta's).
Mobile carries both more checkout dead clicks and the more serious bugs. Of the 1,520 sessions with a dead click in checkout, 813 (53%) are on Mobile, 671 (44%) on PC, and only 36 (2%) on Tablet. The device-level error breakdown sharpens this further: the payment-session conflict, the JSON parse error, and the WebKit messageHandlers fault are all logged specifically on Mobile, while PC's errors are limited to generic script errors and a largely benign ResizeObserver warning. This lines up with, and now explains in more detail, the Jul 9–12 mobile Safari zero-purchase streak flagged on the Overview tab — it wasn't an isolated event, it's the visible tip of an ongoing, mobile-weighted checkout fault.
Desktop converts better than mobile in the weekly charts — and the device data now explains why. Mobile carries 813 of the 1,520 checkout dead-click sessions (53%) plus the most serious bugs (payment session, JSON parse, WebKit messageHandlers), while PC's 671 sessions are tied mostly to generic script errors and a largely benign warning. Desktop isn't unaffected, but it's genuinely less broken than mobile right now, not just perceived that way.
Mobile conversion rate dipped visibly from late June into July, the same window the checkout-specific Clarity error data covers — and the WebKit-specific error (Jul 9–12 mobile Safari zero-purchase streak, see Overview) is very likely the same underlying fault showing up in a third data source.
Recommendations
- This is now a dev-team problem, not a paid-media one. Two fixes matter most: the JSON parse error (by far the highest-volume, site-wide, not just checkout) and the payment-session/coupon bugs specific to checkout. Both should go to the tech team as a P1.
- Specifically test the in-app browser / WebView path for Meta traffic (tap an ad from within the Facebook/Instagram app, don't just test in standalone Chrome/Safari) — the WebView-specific errors suggest this is a distinct bug from the general checkout faults and could materially explain Meta's bounce-rate gap.
- QA checkout end-to-end with mobile as the priority — it carries the majority of dead-click sessions and all three of the most serious device-specific bugs (payment session, JSON parse, WebKit messageHandlers). PC's issues look comparatively minor and generic by contrast, so treat it as secondary, not equal priority.
- Once fixes ship, watch this tab's weekly abandonment rate and the next Clarity pull's dead-click/quickback volume to confirm it actually moved — don't rely on CPA alone, since bidding takes 1–2 weeks to reflect a cleaner signal.
- Since "CheckoutStepCompleted" wasn't tracked in 2025, there's no YoY baseline for this specific abandonment measure — worth keeping this weekly view running going forward so a comparable YoY read exists next year.
- Don't over-index on tablet numbers for any budget or bidding decisions — the sample size is too thin for the swings to mean anything.
Path to purchase: period comparison
Jun 1 – Jul 13, 2026 (current) vs Apr 19 – May 31, 2026 (previous, same 43-day length) vs Jun 1 – Jul 13, 2025 (year-on-year). US only. Channel bounce-rate rows shaded grey.
PoP % chg = (Current − Previous) ÷ Previous. YoY % chg = (Current − same period last year) ÷ last year. Colour reflects whether that direction is actually good or bad for each metric — not just the sign.
| Metric |
PoP comparison |
YoY comparison |
| Jun–Jul 2026 (curr) |
Apr–May 2026 (prev) |
% chg |
Jun–Jul 2025 (YoY) |
% chg |
Insights & recommendations
Top-of-funnel got more efficient; bottom-of-funnel got worse — and that split is the whole story. Impressions (-29%), clicks (-46%), and sessions (-32%) all declined, but purchase conversion rate (sessions → purchase) actually improved (2.01% → 2.24%) and sessions-to-PDP rate improved (57% → 65%) — the pruning work in the change log (pausing underperforming keywords, adding negatives, narrowing targeting) is doing exactly what it should, bringing in fewer but better-qualified visitors. But cart abandonment rose over the same window (41.7% → 44.3%) — so of the people who make it to cart, more are failing to complete the purchase now than before. That's the checkout technical fault (see Checkout funnel tab) showing up numerically: the funnel is doing a better job attracting the right people and a worse job letting them finish buying.
This also explains the CPA mechanism, not just the symptom. Every campaign runs Maximize Conversions bidding. Fewer completed purchases (down 24% PoP) means a weaker, noisier signal for the algorithm to bid against — which pushes it toward less efficient delivery and can pull in less qualified traffic to compensate, further suppressing purchases. The volume drop isn't purely a deliberate pruning outcome; some of it is this feedback loop responding to checkout friction that started around June 30.
Google and Meta bounce rates are essentially unchanged period-over-period (Google ~17.4% both periods, Meta ~55.6-56.1% both periods) — the Meta creative/audience quality gap is a persistent, separate characteristic of that channel, not something that shifted recently, and not the current priority given the checkout finding.
This isn't a seasonal issue — sessions are flat-to-up year-on-year (+4.7%), but purchases are down 7.7%, purchase conversion rate is down 11.8%, and cart abandonment is up (39.6% → 44.3% YoY). If this were seasonal, traffic and conversion rate would move together. Instead, a similar volume of traffic is converting meaningfully worse than it did last year, with abandonment climbing steadily both YoY and PoP — pointing to a checkout/conversion problem that has been building for longer than this quarter's specific events (Advantage+ bug, sale timing, creative refresh), consistent with the CEO-level concern about sustained growth decline.
Recommendations
- Fix checkout first, then reassess volume strategy. Rebuilding qualified volume only pays off once the cart-to-purchase step stops leaking — right now, sending more traffic into a broken checkout just means more people hitting the same JS errors.
- Use the current period's purchase conversion rate (2.24%) and cart abandonment rate (44.3%) as the two numbers to watch post-fix — conversion rate should hold or improve, and abandonment should fall back toward last year's ~40% once the payment-session and coupon bugs are resolved.
- Since Meta's bounce rate gap versus Google is stable and structural, it's a genuine channel-level issue worth a creative/audience review — but sequence it after the checkout fix so results aren't confounded by the same technical fault.
- Given abandonment has been trending up for longer than this quarter's known events, this likely predates June and warrants the tech team looking at checkout error logs further back than Jun 30 once they're engaged — the Clarity window only covers the most recent stretch.