← Back to Blog

Exact Match Drift: 96% Off-Literal, But Higher ROAS

A few days ago, while mapping out a scaling plan, I ran into that familiar headache again: the actual search terms triggering my exact match keywords had almost nothing to do with the literal keywords I'd set.

This isn't a Google bug, and it wasn't my setup.

Google Ads exact match evolved a long time ago — it no longer matches the literal text. It matches intent. As long as the user's search has a similar intent to your keyword, it can trigger your ad, regardless of spelling, word order, or even the root words.

I first hit this back in 2018 when I started running my first DTC store. Close variants were narrow then — they'd tolerate extra spaces, typos, and plural/singular swaps, but they still stayed inside the literal meaning. Google has gotten much more aggressive over the last couple of years:

  • In 2022, the "same meaning" rule for exact match expanded to cover semantically similar phrases
  • In 2024, Google formalized "intent-based matching," letting deep user intent determine whether your ad fires

In plain terms: set an exact match keyword like running shoes today, and Google may trigger on jogging sneakers, best trainers for running, or even athletic footwear for sport.


I Wrote a Script to Pull the Data

I run several DTC accounts of my own. Theory is fine, but how badly does this actually drift in the wild? I wrote a Google Ads script to find out.

The core logic is dead simple — pull every search term triggered by an exact match keyword, then compare search_term_view.search_term against ad_group_criterion.keyword.text after lowercasing and trimming whitespace:

-- Pseudo-code. The real version ran on one ecom account over a 30-day window.
SELECT search_term_view.search_term,
       ad_group_criterion.keyword.text,
       metrics.conversions_value,
       metrics.cost_micros
FROM search_term_view
WHERE ad_group_criterion.keyword.match_type = 'EXACT'
  AND segments.date DURING LAST_30_DAYS

I dumped the output into Google Sheets, split the rows into two groups by whether search_term == keyword_text, and computed overall ROAS on each side.

Going in, my biggest worry was that the drifted traffic was just burning money.

The result surprised me.


The Numbers: 96.35% Drifted, Yet ROAS Is Higher

For that account over the last 30 days:

  • Literal match (search term identical to the exact match keyword): 3.65% of traffic, ROAS 2.45
  • Drifted (search term differs from the keyword literally): 96.35% of traffic, ROAS 4.91

The drifted bucket's ROAS is roughly 2× the literal bucket's.

I didn't believe it at first, so I ran the same script on two other accounts. The numbers weren't this extreme, but the direction held: drifted ROAS was 30-80% higher than literal ROAS on every account.

This overturned an instinct I'd carried since my first years running ads: the moment an exact match triggers a literal mismatch, kill it with a negative.

That instinct was correct between 2018 and 2020, when close variants were narrow and most drift came from typos or low-intent edge cases. It's no longer correct in 2026. Intent matching pulls in long-tail demand I wouldn't otherwise catch — and a lot of that long-tail is exactly the wording real customers use.


5 Exact Match Tactics I Actually Use

Those numbers didn't lead me to "just let it ride." Intent matching is a double-edged sword — when it works, scale happens on its own; when it doesn't, 30% of your budget is funding searches that have nothing to do with your product.

Here are the 5 tactics I've settled on after 8 years of running this stuff.

1. Look at Your Own Data First — Don't Trust the General Wisdom

Run the script above, split into "literal vs drifted," and compare overall ROAS/CPA on each side.

  • ROAS gap under 15%: intent matching is net positive for you. Leave it alone.
  • Drifted side is clearly worse: intent matching is pulling you into low-intent searches. Go through tactics 2-4 below.

Don't make this call on "theory." Category, target geo, keyword pool — every account is different, and the answer can flip the other way.

2. Use "Moderate" Bids to Control Drift

This is the single most effective controller I use, and it's the most counterintuitive — most people assume "control drift by bidding lower." It's the opposite. When your bids are low, Google's matching system expands the eligible query surface to squeeze what it can out of your tiny bid.

"Moderate" means neither aggressive nor stingy. My usual playbook:

  • Start from the market-rate middle of the bid range
  • Step up 5-10% every 2-3 days
  • The moment search term quality visibly degrades (drift ratio jumps from 30% to 60%+), hold

This matters most when I'm scaling B2B — B2B CPCs are high enough that I can't afford budget leaking to loosely related intent. I want the system to keep pulling the same lead-generating intents I've already proven out.

3. Drifted + Zero Conversions → Add Negatives to Stop the Bleed

Back to that spreadsheet: I filter for "drifted AND no conversions," then sort by cost descending.

The top rows are always the negatives to add — those search terms burned the most money and delivered nothing.

ADM (an AI agent that optimizes Google Ads automatically) runs this for me automatically. The Variant_Leak rule continuously monitors search terms triggered by exact match keywords. When a search term's CPA runs meaningfully above the original keyword's average CPA, or shows zero conversions with material spend, it emits an ADD_NEGATIVE_KEYWORD action. I just review the suggestion list and batch-approve — no more weekly script runs.

One gotcha: add these as exact match negatives, not phrase. Exact match negatives block only this specific search term without bleeding over to other legitimately relevant long-tail searches.

4. Drifted + Converted → Add as Exact Match Keywords to Scale

The other side of the spreadsheet: drifted search terms that converted. Those are gold.

I pull them into a separate list and add them straight into the original ad group as new exact match keywords. The point:

  • Before, you were passively capturing these via Google's intent matching
  • Once they're in your targeting, they become active keywords with higher weighting in the auction
  • Google reads the new keywords as "this is the correct intent," which expands the long-tail capture further

ADM's Keyword_Harvesting rule runs the same pattern: for search terms that have converted but aren't already in your keyword list, it auto-generates ADD_KEYWORD actions in exact match. The rule is a touch more careful than tactic 3 — it cross-validates against both the last 7 and last 30 days, so a fluke one-day conversion doesn't get mistaken for a real signal.

5. Testing New Products → Exact Match + Slightly Aggressive Bids

This is my standard playbook for new-product tests.

Testing has two enemies: not enough impressions to produce data, and impressions so broad they pull in garbage queries.

Exact match + slightly elevated bids handles both:

  • Higher bids push Google to prioritize your impressions
  • Exact match caps the query surface to intent-similar searches, keeping broad queries out

I typically pair this with Max Clicks bidding for 5-7 days. Once I've got 30+ search terms to look at, I decide which to promote to exact match, which to negative out, and which keywords to pause entirely.


One More Thing

The definition of "exact match" has shifted twice in the last 5 years — from literal text, to synonyms, to intent. The instinct you built around "literal match means predictable queries" is outdated.

What I do now: drop the old instinct and go back to the data. Pull the script once a month, let the "literal vs drifted" ROAS comparison tell the truth, then add negatives or harvest keywords accordingly.

If you're running a lot of exact match keywords and wondering whether you should be cleaning out your search term drift, or if you want to compare numbers on your own accounts, let me know — I'm curious how this ratio shifts across verticals.

Ready to optimize your Google Ads?

Start your 14-day free trial today.

Start Free Trial

Our site uses cookies. By continuing to use our site, you agree to the use of cookies. For more information about the use of cookies on our website, please see our Cookie Policy.