The JavaScript Error Nobody Noticed
Lead generation had always been inconsistent. Six weeks of zero quote requests didn’t feel alarming enough to investigate. GA4 had been trying to tell them something for weeks.
The scenario
Pennant Studio is a small web and brand design studio — three people: Leo, who handles the creative direction and client relationships; a junior designer; and a project manager who keeps everything from becoming chaos. They do good work, their clients generally come back, and their main source of new business is a quote request form on the Pricing page. It's not glamorous lead generation, but it had always worked: six to ten form submissions a month, enough to keep the pipeline moving and allow Leo to pick projects he was actually interested in.
Lead volume had always been lumpy in the way small studio lead volume always is. A strong month might bring ten enquiries, a slow one might bring three. The rhythm was familiar enough that Leo had learned not to read too much into short stretches of quiet. When the form went quiet after a site update in early spring — a routine dependency upgrade the developer handled in an afternoon — he wasn't alarmed. He'd been heads-down on a large rebrand project. He figured the lull was coincidence. He'd check the pipeline properly once the rebrand wrapped.
The confident wrong conclusion
By week eight of silence, Leo had started to question things he'd previously taken for granted. Were the prices wrong? He'd raised rates modestly at the start of the year — maybe that was it. A competitor studio had relaunched with a slicker website and a more aggressive social presence; he'd noticed they were showing up in the same conversations he used to dominate. Maybe clients were going there instead. Or maybe the market had simply softened — he'd heard from a few contacts that discretionary creative spend was tightening across the board.
He drafted a post for LinkedIn: Pennant's first project of the summer, 20% off for the right brief. A reduced-rate offer felt like a reasonable response to a market that wasn't responding. It was a confident, well-reasoned reaction to the evidence in front of him. It was also about to solve a problem that didn't exist.
The overlooked conversion event
Before he posted the offer, Leo decided to check one thing first: whether the Pricing page had actually lost traffic. If people weren't visiting, the rate reduction made some sense. If they were visiting and not enquiring, that was a different problem — possibly a copy problem, possibly a positioning problem, possibly the price point itself.
He opened GA4 and pulled up the Pricing page metrics. Sessions were fine — slightly above average for that period, actually. Average engagement time was 2 minutes 40 seconds, which meant people were reading the page, not bouncing. Nothing in the traffic data suggested the page had lost its ability to attract the right visitors. And then he clicked over to the Conversions report, where he tracked a custom key event called quote_request — a GA4 event that fired whenever someone successfully submitted the form.
The graph showed the same 7 to 8 conversions per month that had been consistent for over a year. And then, on the exact date of the spring site update, it dropped to zero. Not a gradual decline. Not a soft dip that bounced back. Zero, sustained for eight consecutive weeks, with no change in the traffic or engagement metrics that would explain it commercially.
Leo flagged it to their developer that evening. Within an hour they'd identified the cause: the dependency upgrade had broken the event listener attached to the form's submit button. From the user's perspective, the form appeared to work perfectly — you filled it in, clicked submit, the fields cleared, a confirmation message appeared. But the underlying data submission to their project management tool was silently failing, and the quote_request GA4 event was never firing. Eight weeks of quote requests — somewhere between 48 and 80 potential enquiries based on the historical rate — had submitted into a void, received no response, and presumably gone elsewhere.
The corrected interpretation
It was not a market problem. Not a pricing problem. Not a competitor problem. A single broken event listener, introduced in a routine update that nobody had tested end-to-end on the form submission path, had silently swallowed eight weeks of inbound enquiries. The GA4 Conversions report had been showing the exact shape of the problem from the day it started: stable traffic, stable engagement, zero conversions, coinciding precisely with a deployment. That pattern — traffic and engagement unchanged, conversions at zero — is almost definitionally a technical failure rather than a commercial one. The market doesn't turn off in a single day.
The fix took less than two hours once the developer knew where to look. The more uncomfortable reckoning was how close Leo had come to announcing a 20% discount in response to a broken JavaScript event listener. The discount would have done nothing. Worse, it might have trained his audience to expect reduced rates, making future projects harder to price correctly. The real cost of not reading GA4 wasn't just the eight weeks of missed enquiries — it was the downstream decisions those unread numbers were about to produce.
What to do next
Conversion tracking isn't just a reporting tool. It's an early warning system — and it only works if someone is actually looking at it after deployments.
- After every site update or deployment, check your GA4 Conversions report within 48 hours — a conversion drop that coincides with a deployment is almost always a technical failure, not a commercial one, and catching it early limits the damage
- Set up a key event for every meaningful action on your site: form submissions, booking requests, purchases, newsletter signups — if an action isn't tracked, you have no visibility when it breaks
- Never assume a conversion drop is a market or pricing problem before ruling out a technical failure first — traffic stable and engagement stable while conversions fall to zero is a broken feature or broken tracking, not a positioning problem
- Test your forms end-to-end after any deployment: submit a real entry from a real browser and confirm the submission arrives in your inbox, CRM, or project management tool — a confirmation message on screen is not the same as a successful data submission
- Use GA4 DebugView during QA to confirm that custom events are firing correctly before pushing changes to production — DebugView shows events in real time and will reveal immediately if a
quote_requestor similar event is failing to fire
For a guide to the warning signals in GA4 that point to broken technical infrastructure, see How to Spot Technical Problems Using GA4.
Get the numbers read for you
WebSignalytics connects to your Google Analytics and emails a plain-language report every Monday — what changed, why it matters, and what to do next. No dashboards, no second-guessing what a metric means.
Start your free trialPennant Studio and Leo are illustrative — a composite created to demonstrate a real and common pattern.
← Back to all case studies