Why Your Google Ads Look Fine But Sales Don't Add Up
The five structural problems hiding in almost every Shopify account. A clear order for fixing them.
Dan Kabakov · Google Ads Specialist
30 minute read onlinelabs.io - IntroA Jewelry Store, an Agency Report, and a Six-Month Revenue Plateau
- 01The Tracking Problem Nobody Talks About
- 02Your Product Feed Is Silently Killing Your Campaigns
- 03Campaign Structure: Why Most Accounts Are Set Up Wrong
- 04When Google's AI Works Against You
- 05How to Actually Read Your Performance
- EndPriority Order and What Comes Next
A Jewelry Store, an Agency Report, and a Six-Month Revenue Plateau
A jewelry store owner contacted me last year. They had been running Google Ads for 18 months with an agency. The reports showed a 4.2x ROAS and climbing each month. Everything looked fine. But their revenue had not moved in six months.
When I audited the account, here is what I found.
First: 72% of their recorded web sessions were bot traffic. Meta's ad infrastructure sends automated requests to check whether advertiser landing pages load correctly. Those requests showed up in GA4 as sessions from facebook.com referrals, with zero time on site and zero add-to-cart activity. The store's real traffic was under 30% of what the dashboard showed. Their conversion rate looked three times worse than it actually was, and their Google Ads bidding was optimizing on that contaminated signal.
Second: their Shopping campaigns had 260,000 products in Google Merchant Center. The store had about 2,000 real products. Shopify's default behavior created a separate feed entry for every variant, every color, every size. Google could not prioritize anything. Budget was spread thin across tens of thousands of near-identical listings instead of being concentrated on what actually sold.
Third: the product titles in the feed were the website product names, written for UX and brevity. "Station Clip Bracelet." "Zen Grove Ring." These are beautiful product names. They are useless to Google Shopping, which matches feed titles to search queries. Nobody types "Zen Grove Ring" into Google. They type "women's nature-inspired gold stackable ring."
The agency was not lying. They were reporting what the platform showed. The platform was showing a distorted picture because the underlying data was broken in three different ways.
This is the situation in most ecommerce Google Ads accounts, whether you are spending $5,000 a month or $50,000. Not because the people running the ads are incompetent, but because these problems do not announce themselves. They live inside normal-looking dashboards. They get smoothed over in monthly reports. And they compound quietly while you wait for results that never quite arrive.
This guide covers the five problems I find in nearly every account I audit. The goal is not to scare you off running ads. It is to give you a clear picture of what is actually happening so you can make better decisions about where your money goes.
One note before we start: this guide is written for Shopify stores spending at least $5,000 a month on Google Ads. The problems here are universal, but the specific details and examples throughout are drawn from Shopify accounts, because that is where the nuances live.
The Tracking Problem Nobody Talks About
The most common and most expensive problem in ecommerce Google Ads is invisible. It does not produce error messages. It does not trigger alerts. It just quietly feeds the wrong information to every system that depends on it.
Google Ads reported 9 conversions. Shopify showed 23 orders from paid traffic. Same account, same week.
Those 14 missing orders were not a reporting glitch. The Google tag was set up through GTM, and a large share of customers paid with Shop Pay. GTM cannot reach that checkout environment. The bidding algorithm had never seen those purchases. It was optimizing as if they did not exist.
This is tracking failure in its most expensive form: not an error message, not a broken dashboard, just quietly wrong numbers feeding every system that depends on them. Across every account I have audited in the last 12 months, the most common finding is missing or miscounted conversion data, typically understated by 20% to 40%, occasionally overstated by more when double-counting is involved.
The deeper problem is what Google's bidding algorithm does with that data. When you run campaigns on Smart Bidding (the default), the algorithm decides where to show your ads, who to show them to, and how much to bid based on conversion signals. If it is working from incomplete or distorted data, it makes worse decisions than it would otherwise, and it reports positive metrics the whole time.
The Four Most Common Tracking Gaps
- 1No enhanced conversions Enhanced conversions send hashed first-party data (email addresses from order confirmations) back to Google to fill in the attribution gaps where cookies are blocked or the user switches devices. This is the baseline for 2025, not an optional upgrade. Without it, Google is missing a significant chunk of the real purchase signal, especially on iOS devices where consent tracking is limited.
- 2Multiple purchase conversion actions set to "Include in Conversions" If you have a Shopify-imported purchase action and a Google Tag Manager tag both firing on the same purchase event, you are double-counting. Google thinks it is getting twice the signal, optimizes accordingly, and your ROAS looks better than it is. This is the most common setup error I find in Shopify accounts that had a developer or agency touch the tracking at some point.
- 3Missing micro-conversion signals Add-to-cart and begin-checkout are the early-funnel signals Google's AI uses to find likely buyers before they complete a purchase. If you only track final purchases, the algorithm has almost no early-stage data to inform where to show your ads. Setting up these events through Shopify's Google channel or GTM gives the algorithm substantially more to work with.
- 4The Shopify/Google 30-day attribution mismatch Shopify attributes a sale to the last-click channel within a short window. Google Ads uses a 30-day default attribution window. On any given month, these two numbers will disagree, and the disagreement grows the longer a customer's consideration window is. For high-AOV products (jewelry, furniture, luxury goods), where a customer might research for weeks, the gap can be 30% or more.
The Shop Pay Tracking Problem Shopify-Specific
There is a tracking issue specific to Shopify that most agencies never flag, because it is not visible in the campaign dashboard.
Shopify's checkout extension (used when customers pay with Shop Pay) runs in a restricted code environment called a Local Application Context. Standard Google Tag Manager scripts cannot reach it. If your conversion tracking is set up entirely through GTM, and your customers are completing purchases via Shop Pay, those purchases are invisible to Google.
I diagnosed this in one client account where Google Ads showed near-zero conversions from Shop Pay users despite Shopify's order history confirming dozens of Shop Pay orders in the same period. The fix is using Shopify's native Google and YouTube app pixel instead of (or alongside) GTM for purchase tracking, since the native app pixel runs in the open context that can access the checkout flow.
An industrial ecommerce store (Shopify, $200/day Google Ads budget) had Google reporting 9 conversions in its first week after launch. Shopify showed 23 orders from paid traffic in the same window. Investigation: the Google tag was set up via GTM. A large share of orders used Shop Pay. GTM could not reach those checkouts. The conversion tracking had never actually fired for Shop Pay orders.
Fix: switched to the native Google and YouTube Shopify app pixel. Added enhanced conversions with hashed email. Conversion tracking went from partially firing to fully verified within 48 hours. The bidding algorithm immediately had 2x the signal to work with.
The Bot Traffic Problem Shopify + Meta
For stores running Facebook and Instagram ads alongside Google, there is a data quality problem inside GA4 that can make your Google Ads performance look worse than it is, and can silently distort your bidding decisions.
Meta's ad infrastructure automatically sends test requests to advertiser landing pages to verify they load correctly. Those requests show up in GA4 as sessions from facebook.com and l.facebook.com referrals. They have near-zero session duration and zero conversion activity. They inflate your total session count and suppress your observed conversion rate.
In the jewelry account from the introduction, these bot sessions represented 72% of all recorded GA4 traffic. The real conversion rate from human visitors was nearly three times better than what the dashboard showed. More importantly, any GA4-imported audience or signal being fed back to Google Ads was contaminated by that non-human traffic.
In GA4, build an Exploration report. Set dimensions: Session source and City. Add metric: Sessions. Filter for Session source contains "facebook." Look at the city breakdown. If you see places like Prineville (Oregon), Luleå (Sweden), Forest City (North Carolina), Fort Worth (Texas), or Dublin (Ireland) showing high session volumes, those are Meta data center locations, not real shoppers.
A clean view of your real traffic in GA4: create a segment that excludes sessions where Source contains "facebook" and Country is not "United States" (or your target market). Compare conversion rates with and without that filter. The gap tells you how distorted your data is.
Go to Google Ads and open Tools & Settings, then Conversions. Look at what is marked "Include in Conversions." You should have one primary purchase action, not two. If you see both a Shopify-imported purchase action and a GTM-based one, you are likely double-counting.
Then ask: is enhanced conversions active on your purchase action? If not, that is a gap worth closing before any campaign optimization conversation.
Your Product Feed Is Silently Killing Your Campaigns
For Shopping and Performance Max campaigns, Google Merchant Center is the engine everything runs on. Most store owners know it exists. Very few know what state it is actually in or how much it is costing them.
Shopping and Performance Max campaigns do not target keywords the way Search campaigns do. They target your product feed. Google reads your product data, including titles, descriptions, prices, categories, and images, and uses that data to decide which searches to match your products to, who to show them to, and how to bid.
This means your feed quality directly determines what your Shopping and PMax campaigns can achieve. A weak feed is a ceiling that no amount of bid optimization, budget increase, or campaign restructuring can break through.
Disapproved products do not appear in Shopping at all. Not "rarely." Not "less often." Not at all. If 15% of your catalog is disapproved, 15% of your potential Shopping inventory is completely invisible regardless of how much you are spending.
The Variant Explosion Problem Shopify-Specific
This is the most under-discussed feed problem in Shopify stores, and the one with the biggest performance impact when it is not caught.
Shopify creates a separate product entry in the feed for every product variant by default. A product with 10 colors and 5 sizes creates 50 feed entries. A store with 500 products and a modest variant count can end up with 20,000 to 50,000 items in Google Merchant Center. Stores with larger catalogs have gone much higher. I have seen one with 260,000 entries where the real product count was around 2,000.
Google's Shopping algorithm cannot prioritize within a feed that size. Budget gets spread thin across thousands of near-identical listings. Products that sell get the same bid treatment as products that do not. Your bestsellers have no structural advantage.
The fix is a feed management layer. Simprosys or DataFeedWatch are the two I use most with Shopify clients. They consolidate variants and send Google one listing per product, typically at the lowest price point. This alone can meaningfully change Shopping performance within weeks, not because you changed a campaign setting but because you gave the algorithm a coherent inventory to work with.
A jewelry store (US, Shopify, $10/day Shopping budget) had Google Merchant Center showing 260,000 items from a catalog of roughly 2,000 products. The variant explosion meant the daily budget was too thin to make any product competitive. Shopping campaigns had spent months looking underperformative without anyone diagnosing why.
Feed spec sent to developer: one listing per product, lowest-price variant, engagement ring exception to include carat weight variants (since searchers do search by carat). Target: approximately 2,000 items.
The Four Other Feed Problems That Cost Money
- 1Price mismatches Google disapproves products where the price in the feed does not match the price on the landing page. Promotions, sales, and manual price updates can create temporary gaps between the feed and the live page. If you ran a sale and then ended it, the feed may still show the sale price while the page shows the regular price. This creates disapprovals silently and in volume.
- 2Weak product titles Your product titles were written for your store's navigation and aesthetics, not for Shopping match quality. A well-optimized Shopping title puts the most important keywords first: product type, material, relevant attributes, then the brand name. The difference in match quality between a weak title and a strong one is larger than most bid strategy changes.
- 3Image quality issues Google's image requirements are specific: minimum 100x100 pixels for non-apparel, 250x250 for apparel, no watermarks on the main image, no added promotional text over the image. Lifestyle images that include other products in the frame can also cause review flags.
- 4Missing custom labels Custom labels are optional feed attributes you control completely. Most stores leave them blank. Used well, they let you segment campaigns by margin, bestseller status, seasonal relevance, or any category that matters to your business, without changing your main catalog structure.
Log into Google Merchant Center and open the Products section. Look at the count of active vs. disapproved products. More than 5% disapproved is worth investigating immediately. More than 20% is a serious performance constraint.
Click into the disapprovals and read the reason codes. Most are fixable within a few hours once you know what they are. Price mismatch, missing required attribute, and image quality issues account for the majority.
Also check your total product count. If it is more than 3x your actual SKU count, the variant explosion problem is worth investigating.
Campaign Structure: Why Most Accounts Are Set Up Wrong
This is the chapter most agencies would prefer you not read. The default recommendations around Performance Max can work, but there is a specific way the structure inflates reported ROAS while quietly underperforming on what actually matters.
Performance Max is Google's current recommendation for most ecommerce accounts. One campaign, all your products, across all of Google's inventory: Search, Shopping, YouTube, Display, Gmail. Let the AI figure out where to spend.
It can work very well. I run it for clients and have seen strong results. But two structural mistakes make PMax look better than it is while capping what it can actually do, and both are widespread.
Problem One: The Single Asset Group
When you put all your products into one PMax campaign with one asset group, you are asking Google to find the right buyer for every product using a single blended signal. For stores with a diverse catalog, this creates a real targeting problem.
A store selling $80 earrings and $4,500 engagement rings needs to reach completely different buyers at completely different stages of the purchase decision. These are not the same audience, and they do not respond to the same creative, messaging, or timing.
If both product types are in the same asset group, the algorithm is getting mixed signals. It will find an audience that is somewhere between these two profiles, which is optimized for neither.
The fix is segmentation by product type, price range, or intent. Separate asset groups let you write different creative, assign different audience signals, and give the algorithm coherent targets to optimize toward. This is an hour of setup work that pays back over months of better targeting decisions.
Problem Two: Brand Traffic Inflating Your ROAS
This is the most expensive hidden problem in Shopify Google Ads, and it makes accounts look significantly better than they are.
When someone types your brand name into Google and clicks your ad, they were almost certainly going to buy from you regardless of the ad. The purchase was going to happen. But if your Shopping or PMax campaign captures that brand search traffic and counts it as a conversion, your ROAS gets credit for a sale it did not actually drive.
Here is a real scenario: a store's PMax campaign reports a 4.8x ROAS. Investigation shows that 35% of conversions came from searches containing the brand name. Remove those from the calculation and the actual new-customer acquisition ROAS is closer to 2.8x. At that store's margins, 2.8x barely breaks even. The 4.8x number was real, it just was not measuring what the owner thought it was measuring.
Add a dedicated brand Search campaign (exact match keywords on your brand name and common brand variants) with intentionally low bids, since the intent is already there. Then add brand exclusions to your PMax and Shopping campaigns so they only compete for non-brand searches.
This restructure usually requires a few weeks of adjustment, but the result is two separate, readable numbers: what you are spending to retain existing customers who search by name, and what you are spending to acquire new customers who do not know you yet. Only the second number represents real growth.
The Order-of-Operations Problem
There is one more structural issue worth addressing: a lot of accounts launch Performance Max before fixing the feed. This is backwards.
PMax draws from your product feed for its Shopping inventory, from your asset groups for its other placements, and from your conversion data for its bidding. If the feed has disapprovals, variant bloat, or weak titles, PMax inherits all of those problems. It will run, it will spend, and it will optimize toward the limited, distorted inventory and signal it has access to.
Fix the feed first. Then launch or restructure PMax on top of a clean foundation. In almost every case, this sequence produces better results than optimizing a campaign structure built on unresolved feed issues.
Open your Search Terms report in Google Ads. For Shopping campaigns, it is under Insights. Look for your brand name appearing as a search term. If it is generating a meaningful share of your conversions, you are likely mixing brand and non-brand in your ROAS number.
Ask your specialist, or check it yourself: what is the non-brand ROAS? If no one can answer immediately, it likely means brand and non-brand are not separated in the account structure.
When Google's AI Works Against You
Google's automation is genuinely good at certain things. But it has real limitations, and there are specific ways the way most people use it actively produces worse results than doing less.
Google's AI is faster than any human at processing auction data, adjusting bids in real time, and finding audiences that match a conversion pattern. Trying to manually outperform Google's bidding algorithm is not a good use of your time or money.
But there are three specific ways the AI fails, and they are the same three places most campaigns underperform without anyone diagnosing why.
The AI Does Not Know Your Margins
Google optimizes for the conversion value you give it. If every sale looks the same to the algorithm because you are passing the same signal regardless of product, it will find whichever products generate the most conversions at the lowest cost and concentrate spend there. That sounds good. But a $90 bracelet at a 30% margin and a $4,000 engagement ring at a 45% margin have completely different profit pictures, and the algorithm treats them identically unless you tell it otherwise.
The practical fix is passing margin-adjusted conversion values rather than revenue to Google. This requires a feed management layer that maps product types to margin tiers, which is more setup work than most agencies offer proactively, but it changes the optimization target from "maximize revenue" to "maximize profit."
The AI Does Not Know Your Ideal Customer
Google can optimize for people who buy. It cannot distinguish between a first-time buyer who will return ten times over three years and a one-time discount hunter who clipped a promo code and will not be back. Both count as conversions. Both look identical to the algorithm unless you tell it otherwise.
The best way to tell it otherwise is through offline conversion imports. If your CRM or Shopify data can identify high-LTV customers, you can upload those events back to Google. The algorithm begins to find more people who match that profile. Over time, the customer composition from paid acquisition improves.
The Learning Period Trap
Performance Max and Smart Bidding campaigns go through a learning period after any significant change: a budget increase, a bidding strategy switch, adding audience signals, or making major creative changes. During this period the algorithm is recalibrating, performance is worse than it will be, and every metric in the dashboard looks bad.
The natural response to a performance dip is to make another change. This is exactly the wrong move. Every change resets or extends the learning period. If you are making changes during learning, the algorithm never gets the stable period it needs to find its equilibrium.
A Shopify store's PMax campaign ROAS dropped from approximately 2x to 0.35x over three weeks following a budget increase. The initial response was to raise the Target ROAS target and review the asset group. Both changes were made in the same week.
Post-audit diagnosis: the budget raise happened during an ongoing learning reset from an earlier campaign configuration change. The new Target ROAS target added a second constraint while the algorithm was mid-learning. Two simultaneous changes on an under-conversion-volume campaign.
Fix: reverted Target ROAS to a realistic number, held all other settings for 30 days while the algorithm gathered stable data. Added audience signals (purchaser and cart-abandoner lists) as the only structural change during that hold period.
The Right Order for Bidding Strategy
- 1New campaign or fewer than 30 conversions per month Start on Maximize Conversions with no target. Let the algorithm gather data. Setting a ROAS target before you have enough conversions is like asking for driving directions before the GPS has a signal.
- 230 to 50 conversions per month consistently Introduce a Target ROAS close to your current actual ROAS. Do not set an aspirational target. The algorithm needs room to stay within range, not a constraint it cannot hit.
- 3Scaling Target ROAS gradually Move it up in small increments once performance is stable, not in a single jump. Each significant target change starts a new learning cycle.
How to Actually Read Your Performance
Agency reports look good. They are designed to. Nicely formatted, year-over-year comparisons, headline ROAS numbers in the subject line. Here is how to read past the surface.
ROAS Without Margins Is Meaningless
A 4x ROAS sounds strong. But whether it is profitable depends entirely on your gross margin. Here is what the math actually looks like across different cost structures.
| Your Gross Margin | Breakeven ROAS | What It Means |
|---|---|---|
| 25% | 4.0x | A "4x ROAS" account at this margin is barely covering ad spend before overhead |
| 30% | 3.3x | Common for fashion, accessories, and costume jewelry categories |
| 40% | 2.5x | Average healthy margin for Shopify DTC brands with good unit economics |
| 50% | 2.0x | Fine jewelry, premium beauty, high-margin DTC. More room to run profitably. |
Breakeven ROAS = 1 divided by Gross Margin. These numbers cover ad spend only, before overhead, returns, and payment fees. Your actual minimum ROAS for profitability is typically 15 to 25% higher than the breakeven number shown.
Non-Brand ROAS Is the Real Number
As covered in Chapter 3, if your account is mixing brand and non-brand conversions into one reported ROAS number, the non-brand performance could be significantly worse than what your report shows. A 4.8x blended ROAS with 35% brand traffic mixed in might be a 2.8x non-brand ROAS. At thin margins, that is the difference between a growth channel and a money sink.
Separate this out yourself or ask your specialist for the non-brand ROAS specifically. If it cannot be produced quickly, that is a sign of either a structural issue or a reporting gap. Both are worth pressing on.
The Two Metrics That Actually Matter
Most Google Ads reporting focuses on platform metrics: ROAS, CPA, CTR, impression share. These are useful for campaign management. But the metrics that tell you whether ads are working as a business investment are different.
- New customer acquisition cost. What does it cost to bring in a customer who has never bought from you before? Returning customers who would have come back anyway do not count as acquisition. ROAS can look good entirely on retention spend. New customer acquisition cost tells you whether you are growing your customer base or just recirculating existing demand.
- Repeat purchase rate from paid traffic. If customers acquired via Google Ads come back to buy again, the campaign is building real business value beyond the initial transaction. Repeat purchase rate is the difference between building an asset and renting a revenue number.
Four Questions That Tell You How Well Your Account Is Managed
- 1"What is our non-brand ROAS this month?" A specialist doing the work well knows this number immediately. If they have to go look for it, the separation does not exist.
- 2"What is broken in the account right now?" A good specialist always has a list of active problems and what is being done about them. "Everything is good" is almost never the real answer.
- 3"What are we changing in the next 30 days and why?" Not "we are continuing to optimize." A specific plan: what changes are going in, what signal prompted them, and what you expect to see.
- 4"Can we see the Search Terms report together?" This shows the actual searches your ads are appearing for. Any specialist who is doing the work should be comfortable walking you through it. Reluctance to do this in a client call is a flag worth noting.
None of these questions are hostile. A specialist who is doing good work wants to answer them, because they have real answers. If these questions produce defensiveness or vague responses, that is itself useful data about the relationship.
The best specialists I know actively bring these numbers to clients before being asked. That is the standard worth holding.
Where to Start
If you recognize two or three of these problems in your own account, you are not alone. Most Shopify stores running Google Ads have at least some version of all five, regardless of who manages the account or how long it has been running.
These problems persist not because they are complicated to fix, but because they do not announce themselves. Tracking gaps appear as clean-looking dashboards. Feed issues produce low-level disapprovals that do not trigger any alerts. Brand traffic makes ROAS look better than the underlying acquisition work justifies. None of these scream "problem." They just quietly cap how much your ads can do for you.
The order that consistently produces the biggest impact:
These are not quick wins. Most take a few hours each to do properly. But they compound. Once tracking is clean and the feed is healthy and brand traffic is separated, everything else you do with bids, ad copy, and budget allocation starts to actually move the needle instead of optimizing on top of broken infrastructure.
Free Tools: Use These While You Work Through This
Not ready for a full audit yet, or want to start investigating on your own first? These two tools are free, built for Shopify stores running Google Ads, and can be used right now without booking anything.
See what your competitors are running in Shopping. Check their product titles, see which products they are pushing, and spot the gap between your feed and theirs.
onlinelabs.io/google-shopping-spy ↗An interactive framework showing where your account is in its development and what the logical next lever is. Covers the same five-layer structure in this guide.
onlinelabs.io/google-ads-scaling-map ↗Want to Know Exactly What's Broken in Your Account?
I offer a free Google Ads audit for Shopify stores spending at least $5,000 a month on ads. I go through the account personally. Not a junior account manager. Not a template scan. I look at the five areas covered in this guide and give you a clear, direct summary of what is working, what is not, and what to fix first.
- Conversion tracking review: setup, Shop Pay coverage, enhanced conversions status
- Merchant Center check: product count, disapprovals, feed sync health, title quality
- Campaign structure review: brand separation, asset group segmentation, bidding alignment
- Performance analysis: non-brand ROAS, margin-adjusted profitability check
- Written priority list you can act on directly or take to your current agency
onlinelabs.io/free-google-ads-audit · Turnaround: 3 to 5 days · For stores spending $5,000 or more per month