Make Phrase Match Exact

This script automatically applies phrase match negatives to your BMM and phrase match keywords to prevent them being triggered by close variant search queries.

Google’s done it again. First, they changed exact match keywords to be anything but exact, and now they’ve extended “same meaning” close variants to phrase and broad match modifier keywords.

For advertisers that rely on granular keyword matching and insights, this is another major blow. Now implied words and synonyms in search terms will also trigger phrase and BMM; along with the standard plurals, stemmings, misspellings and changes to word order.

Luckily, we’ve made a script that provides a stopgap workaround that will tide you over until Google comes to their senses.

Messing with match types – a brief history

In case you missed it: it all started with Google’s tweaks to exact match which became, well… not exact in the slightest. First, they began allowing plurals, misspellings and stemmings for all match types in 2014. In 2017, they went a step further by ignoring changes to function words and word order when deciding whether a search term triggers your keyword.

Worst of all, in late 2018 they hammered the final nail into the coffin of exact match by allowing so-called “same-meaning” searches. Regardless of if it’s a paraphrase, requires an implied word or includes a synonym, if Google judges the “intent’ of the search to be the same as your exact match keyword, that keyword will be triggered. Now they’ve done the unthinkable, and brought these same-meaning close variants to phrase and BMM keyword types.

Why this is a problem

I’ve written about why imprecise matching is an issue when I’ve covered the changes to exact match (herehere, and here – all of which include a scripting workaround for that problem). Put simply, semantics matter. You might think that word order or plurals don’t make much of a difference, but paid search experts know, for example, that “london hotel,” “london hotels” and “hotels london” keywords perform differently. Previously, we could change our bidding for each of these keywords according to their respective value with fine-tuned precision.

The broadening of “close variants” to include so-called “same intent” searches compounds the problem further, especially for BMM, which is edging ever closer to being indistinguishable from true broad match.

Google argues that advertisers are likely to see a 3-4% uplift in conversions from their phrase and BMM keywords as a result. I’m sure this is true for some Google Ads users.

PPC experts, however, rely on precise, granular insights to inform optimizations and drive performance. Moreover, we probably already had the “new” traffic covered with specific keywords. These changes risk us poaching our own traffic through less precisely matched keywords, making our insights less granular. This muddier data impedes our ability to bid appropriately and to funnel traffic effectively.

I’ve already pleaded my case to Google to make this an option that you can opt into or out of. Until they see the light, however, we’ve come up with yet another workaround to ensure you’re spending your advertising dollars most effectively, this time for phrase match and BMM keywords.

What this script does

This script automates the workaround. For PPC practitioners with extensive keyword coverage, it will help preserve your funneling system by applying relevant phrase match negatives based on data from search term reports.

How it works:

To do so, it begins by downloading a search query report. Then, it finds queries that meet two criteria:

  1. The query contains a BMM or phrase keyword from a different ad group as a substring (this enables it to identify where it “should have” matched instead).
  2. The query is not a substring of any of the other keywords in that ad group (this prevents the script from blocking ads from showing in multiple keywords per ad group situation).

It then applies this substring keyword as a phrase negative to the query’s original ad group match as selected by Google and evidenced in your search term reports. It sounds complicated, but what this means in practice is that queries will be funneled through to the most relevant keyword for the search rather than hitting on loosely related keywords judged by Google to have the same meaning or intent regardless of their spellings, function words, plurals, etc.

There are a few caveats:

  1. As it works retrospectively from search query reports, it’s not pre-emptive, i.e. the variation needs to appear and be identified before the script can negative it out. You will spend on these close variants until this happens.
  2. On a related note: as search report data does not appear the same day, you’ll always be a day behind Google’s close variants.
  3. On very large accounts, you risk the script timing out as they can only execute for a maximum of 30 minutes. Try running the script in subsections of your account by using the filters, or take advantage of the impression threshold option.
  4. Bear in mind that this script won’t stop close variant matching completely. If you have limited keyword coverage and bizarre search traffic coming through on a BMM or phrase keyword, you’ll still have to negative terms out as required. The script only knows to apply as a negative based on matches that already exist in your account – it functions to stop traffic poaching across your account, not to structure it for you entirely.

You can set it to run however often you’d like (I’d suggest weekly or monthly after the initial run). It will email you a .csv file detailing the changes it has, or would have, made.

How to set the script up

In the account you’d like the script to run, select Tools and Settings > Bulk Actions > Scripts from the top bar. Click the blue plus button in the top left of the scripts page to create a new script, give it a sensible name to make sure you can find it again later if you need to, and grant it any authorization requests that pop up.

You will then need to paste all of the code below into the input box, and modify the inputs section at the beginning of the script as below:

  • var campaignNameDoesNotContain = [];

Use this if you’d like to exclude campaigns. Add the substring you’d like to be excluded within speech marks, e.g. [“Brand”, “Competitor”] if you’d like to exclude campaigns with “brand” and/or “competitor” in the name.

  • var campaignNameContains = [];

Same logic as above, but for which campaigns you’d like to include.

  • var makeChanges = true/false;

When set to true, the script will add the phrase match negatives in in your account. If false, you will just receive an email.

  • var emailAddresses = “”;

Enter the addresses to be emailed when the script runs, separating with commas if you’d like multiple people to be notified.

  • var impressionsThreshold = 0;

If you’d only like to compare keywords with search queries that have received over a certain number of impressions (we advise you use this in larger accounts).

Once you’ve modified the inputs, save the script with the button at the bottom and navigate back to the main scripts page. From here, you can find your newly created script and set its frequency (in the third column as standard) to weekly or monthly, and you’re good to go!

The code