Contents
The client’s request
Analyze the current ad campaigns and give practical recommendations to increase the number of leads. Check: the ad account structure; Search campaigns; keywords and search terms; negative keywords; ads and their performance; bids and budget; conversion setup and tracking accuracy; target audience; opportunities for launching new campaigns.
Expected outcome: a list of issues found, improvement recommendations, a list of concrete actions, an assessment of whether the current settings are correct, and recommendations on new campaigns or changes.
Overall conclusion
The audit covered three interconnected blocks: conversion tracking and analytics, the client’s website and the Google Ads account. All three problem areas reinforce each other, and that is the root of why the current budget isn’t delivering the desired result.
The conversion data flowing into Google Ads is unreliable (duplicate phone clicks, no calls as a separate event). Any automated bidding strategy learns from this skewed data and physically can’t work properly — no matter how many optimizations are made inside the account itself.
The website, in turn, loses part of the traffic before it ever converts: mobile speed is critically low (32-40 PageSpeed points, real users fail Core Web Vitals), and a single-page structure for every line of business lowers landing page relevance for specific queries.
The ad account right now is a single Performance Max campaign with no negative keywords, no clear structure and a budget too small for the chosen strategy to work. That means money goes to broad, poorly filtered traffic, which then lands on a slow, non-specialized website.
Conclusion: the problem isn’t in one place, it’s in the whole chain “ads → website → tracking → data → optimization.” Fixing just one block won’t give the expected effect — you need step-by-step work following the plan at the end of this document.
Summary list of issues found
| Block | Issue | Priority |
|---|---|---|
| Tracking | A click on the phone number is counted as a call, even though it isn’t one | 🔴 Critical |
| Tracking | Phone clicks aren’t deduplicated — one user creates several conversions | 🔴 Critical |
| Tracking | Conversions are sent only to Google Ads, not GA4 — no in-depth analytics | 🔴 Critical |
| Tracking | Google Tag Gateway (Cloudflare) isn’t connected — loss of data quality and speed | 🟠 High |
| Website | Mobile site speed is critical — 32-40 PageSpeed points, Core Web Vitals: Failed | 🔴 Critical |
| Website | Microsoft Clarity isn’t connected — no visibility into where users drop off | 🟠 High |
| Website | One landing page for every direction instead of separate landing pages | 🟡 Medium |
| Website | The address (local business) is visible only in the footer at the very bottom of the page | 🟡 Medium |
| Website | Text overlapping elements on the mobile version | ⚪ Low |
| Ads | The single Performance Max campaign lacks the resources (budget/conversion volume) to work | 🔴 Critical |
| Ads | No account-level negative keywords — irrelevant traffic (competitors, cities, unrelated topics) | 🔴 Critical |
| Ads | No separate brand campaign — brand and irrelevant queries run together | 🟠 High |
| Ads | Geo-targeting is too broad (7-8 km) for a local business | 🟠 High |
| Ads | Ads showing in the mobile games and apps category — a source of junk traffic | 🟠 High |
| Ads | The Maximize clicks strategy optimizes for traffic, not leads | 🟡 Medium |
| Ads | Broad match keywords instead of phrase match | 🟡 Medium |
| Ads | Ad performance can’t be evaluated — no proper tracking and no A/B tests | 🟡 Medium |
Block 1. Conversion tracking and analytics
Proper tracking is the foundation of everything that follows. If the data the ad system learns from is unreliable, any optimization in the account will be based on false signals.
1. A phone click is counted as a call
Priority: 🔴 Critical · 10/10
Issue: The phone is the main channel customers use to get in touch, but the system tracks a “click on the phone number” event rather than an actual call. The number of calls in the ad account reports doesn’t reflect reality — there could be more real calls, or fewer.
Recommendation: Connect dynamic call tracking — an external service that shows each unique visitor a unique phone number and passes the fact of a call into analytics systems. Approximate cost: 1,300–1,500 UAH/month ($29–33). How I set it up: call tracking for Google Ads and GA4.
2. Phone clicks aren’t deduplicated
Priority: 🔴 Critical · 10/10
Issue: One user who taps the phone number several times creates the same number of separate conversions in the system. Tested live: 3 clicks from one visitor — 0 real calls — and the system recorded 3 conversions.
Recommendation: If call tracking isn’t being implemented right now, the minimum fix is to add code that counts only one unique click per user per day/week instead of every tap.
3. Conversions aren’t sent to Google Analytics (GA4)
Priority: 🔴 Critical · 10/10
Issue: All goals are set up to send data only to Google Ads. This data never reaches GA4, so there’s no way to see deeper analytics — which devices book more often, the geography of calls/bookings, the user journey and so on.
Recommendation: Set up parallel sending of events (call, booking) to GA4 — even if this data isn’t used directly in advertising.
4. Google Tag Gateway (via Cloudflare) isn’t connected
Priority: 🟠 High · 8/10
Issue: According to Google, connecting Google Tag Gateway improves the quality of analytics data reaching the system by up to ~14%. On top of that, Cloudflare speeds up the site and improves protection against DDoS/hacking.
Recommendation: Connect it via Cloudflare — it’s free, and setup takes about 10 minutes.
Until items 1–3 are fixed, no automated bidding strategy (Maximize conversions, Performance Max) can work correctly — they literally learn from this very skewed data.
Block 2. The client’s website
The website is part of ad performance. Even a perfectly set-up campaign won’t deliver results if the landing page doesn’t convert or physically can’t load in time on the user’s phone.
1. Critically low site speed on mobile devices
Priority: 🔴 Critical · 10/10
Issue: ~90% of traffic is mobile. A dozen PageSpeed Insights runs (mobile version) consistently show 32-40 points. Real Core Web Vitals data (28 days, live users) confirms it: the assessment is “Failed” — LCP 2.5s (borderline), INP 377ms (the main reason for failing, in the “needs improvement” zone), CLS 0 (all good here).
Cause: According to PageSpeed Insights diagnostics, the main cause is unoptimized images and heavy interactive elements on the page.
Recommendation: Optimize/compress images and review the heavy interactive elements on the page.
Impact on ads: A slow site lowers conversions (some people don’t wait for it to load) and hurts Quality Score in Google Ads through Landing Page Experience — the ad ranks lower and each click costs more.
2. Microsoft Clarity isn’t connected
Priority: 🟠 High · 8/10
Issue: No session recordings or heatmaps — there’s no way to see at which exact step people leave the site. This is where a website CRO audit starts.
Recommendation: Connect Microsoft Clarity (a free tool) to see how users actually behave on the site.
3. One landing page for every line of business
Priority: 🟡 Medium · 7/10
Issue: All traffic — for “VR games,” “VR quests” and “birthday parties” alike — lands on one generic page. That page isn’t as relevant as it could be to the user’s specific search query.
Recommendation: Create separate landing pages for each direction (VR games, VR quests, birthday parties) with a relevant headline and description. This is directly required for clustering the Search campaigns (see Block 3).
4. The local business’s address is hidden
Priority: 🟡 Medium
Issue: The address appears only in the footer, at the very bottom of the page. A user who lands on the site doesn’t immediately understand the location or whether it’s relevant to them.
Recommendation: Add a short location reference right on the first screen/in the headline of the landing pages.
5. Overlapping text on the mobile version
Priority: ⚪ Low
Issue: In some places elements/text overlap each other, especially noticeable on phones — it hurts readability.
Recommendation: Check the layout at real mobile resolutions and fix the CSS conflicts.
It’s also worth setting up a page scroll percentage event in GA4 — even without Clarity, it will show whether the problem is the first screen (a sharp drop in scrolling at ~25% signals that users don’t understand where they’ve landed).
Block 3. The Google Ads account
Current state: a single Performance Max campaign with the Maximize conversions strategy, budget ~6,000–7,000 UAH/month ($133–156).
1. Performance Max lacks the resources to work properly
Priority: 🔴 Critical · 10/10
Issue: Performance Max needs (a) quality conversion data and (b) enough volume: at least 3-5 conversions/day to ramp up. Right now the data is skewed (Block 1) and the volume is only 20 conversions in 60 days. Even if you trust the current (unreliable) cost per conversion of ~308 UAH ($6.8), the campaign itself would need a budget of ~1,000 UAH/day ($22) to work normally.
Recommendation: Drop Performance Max as the main tool until there’s a separate, sufficient budget for it. Shift the focus to Search campaigns. If PMax stays anyway, test an asset group without audience signals.
2. No account-level negative keywords
Priority: 🔴 Critical · 10/10
Issue: Not a single negative keyword has been added at either the account or the campaign level. The search terms report shows a significant volume of irrelevant traffic: competitor brands, names of other shopping malls, cities outside Kyiv, unrelated topics (board games, laser tag, shooting galleries), informational queries (“birthday song for a boy”).
Recommendation: Build negative keyword lists by category (competitors, malls, cities — keep only Kyiv, in all grammatical cases, unrelated topics) and apply them at the account level (shared lists) and at the level of each campaign.
3. No separate brand campaign
Priority: 🟠 High
Issue: Brand queries, general VR club queries and unrelated informational queries all run inside one campaign with no separation.
Recommendation: Create a separate Search campaign exclusively for brand queries, phrase match, budget ~50 UAH/day ($1.1). Take the keywords from the search terms already accumulated in the current campaign.
4. Geo-targeting is too broad for a local business
Priority: 🟠 High
Issue: The current radius is ~7-8 km. For local services this lowers recognition and conversion — the closer the radius to the location, the higher the chance of an actual visit. On top of that, Performance Max tends to go beyond the set geo even with districts excluded.
Recommendation: Start with a minimal radius (2-3 miles) that covers the key residential areas near the business, and don’t cover the most distant districts at launch. Also fully exclude other regions and cities outside the target area.
5. Ads showing in the mobile games and apps category
Priority: 🟠 High
Issue: Ads show inside mobile games and apps (the “Games” category in content suitability settings) — a source of accidental clicks while playing or using an app, which drains the budget and further pollutes conversion data with accidental site interactions.
Recommendation: Fully exclude the “Games” category and mobile apps from placements (this has been partly started — finish it). Also remove the irrelevant “kids’ playroom” category.
6. The Maximize clicks strategy optimizes for traffic, not leads
Priority: 🟡 Medium
Issue: The Search campaign uses the automated Maximize clicks strategy with a max CPC limit of ~15 UAH ($0.33). That’s a traffic-volume strategy, not a results strategy.
Recommendation: After tracking is fixed (Block 1), switch to Maximize conversions. Until then — manual bidding, with the ability to adjust bids at the ad group and keyword level within each query cluster.
7. Broad match keywords
Priority: 🟡 Medium
Issue: Broad match is in use — and it’s exactly what generates the huge volume of irrelevant queries described in item 2.
Recommendation: Switch to phrase match as the default. Use broad match only when traffic volume is lacking — and then add irrelevant queries as negatives manually every day.
8. Ad performance can’t be evaluated
Priority: 🟡 Medium
Issue: Without proper tracking, there’s no way to tell which ads actually work and which just generate spend.
Recommendation: Once tracking is fixed, test 3 ads with different messages in each ad group and keep the winners based on real data.
Recommended campaign structure
- Brand Search campaign — phrase match, ~50 UAH/day ($1.1)
- Local campaign — goal “phone click” (not “get directions”), ~50 UAH/day ($1.1), starting with a 1-2 mile radius
- Search campaign with 3 ad group clusters: each cluster has its own ads matched to its intent and (eventually) its own landing page.
- General queries (“VR club Kyiv,” “VR room Kyiv”)
- VR Quest
- VR games
Query priority by “temperature”: first exhaust the hot ones (clear intent — “VR quest Kyiv”), then the warm ones, and only after that, with a bigger budget, test cold informational queries (“where to go with a kid in Kyiv,” “where to celebrate a birthday”).
Action plan by priority
The sequence matters: each next step builds on the previous one. There’s no point launching bid optimization or Performance Max before tracking is fixed — the system will simply keep learning from false data.
| № | Step | What it includes |
|---|---|---|
| 1 | Fix call tracking | Deduplicate phone clicks (minimum) or connect dynamic call tracking (optimal). Set up event sending to GA4. Connect Google Tag Gateway. |
| 2 | Speed up the website | Optimize images and heavy interactive elements (per PageSpeed Insights recommendations), connect Microsoft Clarity. |
| 3 | Clean up the ad account | Add account-level negative keywords, narrow geo-targeting, exclude the “Games and apps” category, switch to phrase match. |
| 4 | Rebuild the campaign structure | Create brand, local and clustered Search campaigns instead of a single Performance Max. |
| 5 | Create separate landing pages | One for each direction (VR games, VR quests, birthday parties) — so the traffic matches the user’s query. |
| 6 | Test ads on real data | Once tracking is stable — A/B test ads in each ad group, switch to Maximize conversions. |
Another common cause of irrelevant requests is inserting the search query into the ad headline automatically. I explain why in the article on dynamic keyword insertion (DKI).
Where to find me
Message me on Telegram or by email — I respond quickly. Telegram channel and YouTube are for those who want to see real cases before reaching out and understand my approach.