Use custom rules

Custom rules notify you of violations to best practices before posting changes. These notifications can appear as warnings or errors. There’s a set of built-in recommended rules set as warnings, and you can edit these to meet your needs.

Note
If you don't find the built-in rules helpful and want to hide them, you can quickly pause them in bulk in the custom rules view.

Built-in custom rules

These rules are built-in by default, but you can customise or disable any of them. Custom rules apply to all campaigns, including all enabled, paused, pending or draft campaigns. Custom rules don’t apply to removed or finished campaigns.

Description Alerting condition Rationale
Text ad needs a second description line and a third headline

If your expanded text ad doesn’t include a second description and a third headline, you’ll be reminded to enter them.

Note: See detailed explanation

More text means more room to convey your message, and can improve your click-through rate (CTR). Learn more
Tracking template uses HTTP instead of HTTPS

If your tracking template uses the HTTP protocol (instead of HTTPS), you’ll be reminded to update it. Using HTTP in the tracking template can disrupt your click measurement and redirect systems.

Note: See detailed explanation

Using HTTP in the tracking template can disrupt your click measurement and redirect systems. Learn more
Sitelinks with no descriptions

Warn if you try to add or edit sitelink feed items that don’t have description text associated with them.

Note: See detailed explanation

Sitelink extensions with description text can improve your CTR. Learn more
Fewer than four sitelink extensions  

Warn if there aren’t at least four sitelinks at the account level, Search campaign level or at least one sitelink for each ad group within the campaign.

Note: See detailed explanation

Use at least four sitelink extensions to make your ads more prominent, which can increase CTR. Learn more
 
Fewer than four callout extensions

Warn if there aren’t at least four callouts at the account level, Search campaign level or at least one callout for each ad group within the campaign.

Note: See detailed explanation

Use at least four callout extensions to make your ads more prominent, which can increase CTR. Learn more
Campaign has no ad groups

Warn if a campaign has been created but doesn’t contain any active ad groups.

Note: See detailed explanation

Your campaign can’t serve because it contains no active ad groups. Create a new ad group or change the status of an existing ad group to "Enabled". Learn more
Ad group has no ads

Warn if an ad group has been created but doesn’t contain any active ads.

Note: See detailed explanation

Your ad group contains no active ads. Create a new ad or change the status of an existing ad to "Enabled". Learn more
Non-serving Search ads 

Warn if a Search ad doesn’t contain any targeting information.

Note: See detailed explanation

Your ads can’t serve from this ad group because it has no active keywords or dynamic ad targets added to it. Learn more
Non-serving Shopping ads

Warn if Shopping ad group has no product group.

Note: See detailed explanation

Your ads can’t serve from this ad group because it has no product groups added to it. Create a product group Learn more
No structured snippet extensions

Warn if a Search campaign has been created but doesn’t contain structured snippet extensions.

Note: See detailed explanation

Use at least one structured snippet extension to make your ads more prominent, which can increase CTR. Learn more
Not targeting Search Partners

Warn if a campaign isn’t targeting Search Partners.

Note: See detailed explanation

Showing your ads on partner sites can help increase your ads' reach and traffic. Click-through rates on search partners don't affect Quality Scores on Google Search. Learn more
Manual bidding

Warn if a campaign is using manual bidding.

Note: See detailed explanation

Use Enhanced CPC or an automated bidding strategy to bid more efficiently. Learn more
No optimised ad rotation

Warn if a Search campaign isn't using optimised ad rotation.

Note: See detailed explanation

Use the "Optimise: Prefer best performing ads" setting to show your best ads. Learn more
Accelerated delivery

Warn if a campaign is using accelerated delivery.

Note: See detailed explanation

Accelerated delivery is likely to use up your campaign's limited daily budget early in the day. Use standard delivery so that the delivery of your ads is spread more evenly throughout the day. Learn more
No Search audiences

Warn if a campaign isn't using remarketing lists for search ads, customer match or audiences.

Note: See detailed explanation

Attach an audience list to get a better return on investment. Learn more 
Fewer than three ads
(applied to ad groups)

Warn if there’s only one or two ads in an ad group and optimised ad rotation is enabled for the Search campaign.

Note: See detailed explanation

Use at least three variations of your ads in your ad groups to let optimised ad rotation show the best performing one, which may improve CTR or CVR. Learn more
Conversion tracking not set up

Warn if the account doesn’t have conversion tracking enabled.

Note: See detailed explanation

Enable conversion tracking to unlock helpful features, like better reporting and automated bidding. Learn more
Image ads but no responsive ads (applied to ad groups)

Warn if a Display ad group has image ads but not responsive ads.

Note: See detailed explanation

You have image ads but no responsive ads in your Display ad group. Use responsive ads to get many more conversions at a similar CPA. Learn more
 
Campaign flexible reach set to "Targeting"

Warn if biddable audiences are added to a Search or Shopping campaign set as “Targeting”.

Note: See detailed explanation

You have Search or Shopping interests and remarketing targeting set to “Targeting”, which restricts traffic to just the users in your audience.  Use “Observation” to target all users and adjust bids for the ones in your audience. Learn more
Ad group flexible reach set to "Targeting"

Warn if biddable audiences are added to a Search or Shopping ad group set as “Targeting".

Note: See detailed explanation

You have Search or Shopping interests and remarketing targeting set to “Targeting", which restricts traffic to just the users in your audience.  Use “Observation” to target all users and adjust bids for the ones in your audience. Learn more
Targeting optimisation disabled
(applied to ad groups)
 

Warn if an ad group in display campaign has targeting optimisation set to disabled.

Note: See detailed explanation

You have targeting optimisation disabled. Enable conservative targeting to optimise your targeting to reach people that your targeting wouldn’t otherwise reach, at around the same cost per person, automatically. Learn more
Inactive Search audience targeted
(applied to audiences)
 

Warn if an audience has fewer than 1,000 active users and is targeted by a Search campaign or ad group.

Note: See detailed explanation

Your audience has fewer than 1,000 active users and is targeted by a Search campaign or ad group. Your ads won’t serve against this list until more active users are added to it. Learn more
Inactive Display audience targeted
(applied to audiences)
 

Warn if an audience has fewer than 100 active users and is targeted by a Display ad group.

Note: See detailed explanation

Your audience has fewer than 100 active users and is targeted by a Display ad group. Your ads won’t serve against this list until more active users are added to it. Learn more

Instructions

Editing custom rules

To edit built-in custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, select the rule you want to edit.
  3. In the edit panel, make your changes. You can click Comments to add notes about the rule.
  4. Above the data view, click Apply rule changes.

To remove built-in custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, select the rule you want to remove.
  3. In the data view, click Remove.
  4. Above the data view, click Apply rule changes
Note: Bear in mind that built-in rules can’t be removed and will instead be paused if you try to remove them.
 

To restore the default settings for built-in custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, click Restore defaults.
  3. Above the data view, click Apply rule changes.

To reshow rule violations that you’ve ignored:

  1. In the sidebar below the type list, click Custom rules.
  2. In the data view, click Reshow ignored violations.
  3. Above the data view, click Apply rule changes.

Creating new custom rules

To create your own custom rules:

  1. In the sidebar below the type list, click Custom rules.
  2. Click Add custom rule.
  3. In the edit panel, fill in all the required fields.
  4. Click Edit below "Applies to" in the edit panel to select what the rule should apply to, such as keywords or text ads.
  5. Under "Violation criteria", select or enter the conditions that will violate a rule when these conditions are met. All criteria are AND-ed together. In other words, they must all be met for the item to violate the rule.
  6. Under "Severity", select whether you’d like the rule to only notify you of violations or prevent changes that violate the rule from being posted.
  7. Above the data view, click Apply rule changes.
     

Examples of rules you can create

Here are some examples of violation criteria you can use to create custom rules that notify you whenever:

  • An optional field, such as "label", isn’t entered. Use the following violation criteria:
    • label=""
  • A final URL is missing a domain. Use the following violation criteria:
    • status = enabled finalurl -: "www.exampleURLs.com"
  • The maximum CPC for a keyword exceeds a certain amount. Use the following violation criteria:
    • status = enabled maxcpc >= '4.00'
  • Call reporting hasn’t been enabled for call extensions. Use the following violation criteria:
    • status = enabled callreporting -= enabled
  • An enabled ad group doesn't contain at least two enabled expanded text ads with the text "abc"
    • status = enabled COUNT(expandedtextads, status = enabled headline1 : 'abc') < 2

Custom rule explanations

Rule: Text ad needs a second description line and a third headline

This rule applies to ads without a second description line and a third headline.

Violation criteria:

descriptionline2 = "" status = enabled adgroupstatus = enabled headline3 = "" 

Overview

To help advertisers improve the performance of their ads, Google Ads will warn when there's the opportunity to add a second description line and third headline.

Rule: Tracking template uses HTTP instead of HTTPS

This rule applies to tracking templates that use HTTP rather than HTTPS.

Violation criteria:

Tracking template URL string includes HTTP rather than HTTPS.

Overview

Using HTTP in the tracking template can disrupt your click measurement or redirect systems. We strongly recommend that you use HTTPS.

Detailed explanation

Using HTTP in the tracking template can disrupt your click measurement or redirect systems. We strongly recommend that you use HTTPS. Learn more

Rule: Sitelinks with no descriptions

Applies to: Sitelinks

Violation criteria:

status = enabled associationtype=specific descriptionline1="" descriptionline2=""

Overview

The filter above has three root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search
  • that have sitelinks but no description text

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are three top-level conditions here and they must all match.

Status: enabled

Only look at enabled sitelinks; ignore those marked for deletion.

associationtype=specific

Only look at associations of actual shared sitelinks; ignore special <sitelinks disabled> items.

descriptionline1="" descriptionline2=""

Look for sitelinks that have both description line 1 and description line 2 empty.

Rule: Fewer than four sitelink extensions

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = search OR( AND( EXIST(sitelinks, associationtype = specific) COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4 ) AND( NOTEXIST(sitelinks) CONTAINER( COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4 ) ) ) EXIST(adgroups, status = enabled NOTEXIST(sitelinks, approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(sitelinks, associationtype -= specific))

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search
  • and that don't have the minimum of four resolved sitelinks or explicitly disable them
  • and that have at least one ad group that has no sitelinks and doesn't disable them either

If all these conditions are true, the campaign will be marked with a warning, the default severity for all custom rules.

Note: if you'd like to simply change the number of sitelinks required, there are two separate "four" values to change: the count for sitelinks at the campaign level and the count at the account level, both of which are in the overall OR function.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = search 

Only those enabled campaigns that have a type of Search can be flagged.

OR( AND( EXIST(sitelinks, associationtype = specific) COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4 ) AND( NOTEXIST(sitelinks) CONTAINER( COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4 ) ) )

The OR function is a little more complicated, so let's look at the pieces from the inside out.

EXIST(sitelinks, associationtype = specific) checks if at least one shared sitelink associated with the campaign exists. The associationtype = specific condition tests if sitelinks refer to a shared sitelink from the shared library. Other sitelinks, such as <sitelink disabled> entries, wouldn't pass this filter condition.

Next, COUNT(sitelinks, approvalstatus -= (disapproved, sitesuspended)) < 4 checks if there are fewer than four approved sitelinks associated with the campaign. These two conditions are grouped in an AND function, meaning that they both have to match. So this portion asks: Are any shared sitelinks associated with this campaign, and if so, are there fewer than four approved?

The next AND condition is similar, but uses NOTEXIST to check if no sitelinks, even special entries like <sitelink disabled>, are associated with the campaign. It also wraps the COUNT portion in a CONTAINER function to count sitelinks for the owning container: the account. Putting these two together in an AND function, it asks: Are there no sitelinks associated with this campaign (not even special sitelinks), and if not, are there fewer than four of them approved at the account level?

Because those two questions are wrapped in an OR function, this filter condition asks if the answer to at least one of those two questions is 'yes'. In other words, it's asking: If there are any shared sitelinks associated with this campaign, are there fewer than four approved, but if there are none at the campaign level, and the campaign doesn't explicitly disable sitelinks, are there fewer than four approved at the account level? Or, seeing that when the campaign has no sitelinks, they will be 'inherited' from the account, the question is more simply: Does the campaign have fewer than four resolved sitelinks and not disable them?

EXIST(adgroups, status = enabled NOTEXIST(sitelinks, approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(sitelinks, associationtype -= specific))

This EXIST function is checking if there are any ad groups in the campaign that meet the specified filter, in which all conditions must match an ad group for it to be counted. The first condition, status = enabled, is only looking for enabled ad groups in the campaign.

NOTEXIST(sitelinks, approvalstatus -= (disapproved, sitesuspended)) then looks for ad groups that have no approved sitelinks attached.

Finally, NOTEXIST(sitelinks, associationtype -= specific) restricts it even further to look for ad groups that don't have any special sitelinks, such as <sitelink disabled> entries. So overall, this filter condition checks if the campaign contains at least one ad group that has no sitelinks and doesn't disable them either.

Rule: Fewer than four callout extensions

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = search OR( AND( EXIST(calloutextensions, associationtype = specific) COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4 ) AND( NOTEXIST(calloutextensions) CONTAINER( COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4 ) ) ) EXIST(adgroups, status = enabled NOTEXIST(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(calloutextensions, associationtype -= specific))

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search
  • and that don't have the minimum of four resolved callout extensions or explicitly disable them
  • and that have at least one ad group that has no callout extensions and doesn't disable them either

If all these conditions are true, the campaign will be marked with a warning, the default severity for all custom rules.

Note: if you would like to simply change the number of callout extensions required, there are two separate "four" values to change: the count for callout extensions at the campaign level, and the count at the account level, both of which are in the overall OR function.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = search 

Only those enabled campaigns that have a type of Search can be flagged.

OR( AND( EXIST(calloutextensions, associationtype = specific) COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4 ) AND( NOTEXIST(calloutextensions) CONTAINER( COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4 ) ) )

The OR function is a little more complicated, so let's look at the pieces from the inside out.

EXIST(calloutextensions, associationtype = specific) checks if at least one shared callout extension associated with the campaign exists. The associationtype = specific condition tests if callout extensions refer to a shared callout extension from the shared library. Other callout extensions, such as <callout extensions disabled> entries, wouldn't pass this filter condition.

Next, COUNT(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) < 4 checks if there are fewer than four approved callout extensions associated with the campaign.

These two conditions are grouped in an AND function, meaning that they both have to match. So this portion asks: Are any shared callout extensions associated with this campaign, and if so, are there fewer than four approved?

The next AND condition is similar, but uses NOTEXIST to check if no callout extensions, even special entries like <callout extensions disabled>, are associated with the campaign. It also wraps the COUNT portion in a CONTAINER function to count callout extensions for the owning container: the account. Putting these two together in an AND function, it asks: Are there no callout extensions associated with this campaign (not even special callout extensions), and if not, are there fewer than four of them approved at the account level?

Because those two questions are wrapped in an OR function, this filter condition asks if the answer to at least one of those two questions is 'yes'. In other words, it's asking: If there are any shared callout extensions associated with this campaign, are there fewer than four approved, but if there are none at the campaign level, and the campaign doesn't explicitly disable callout extensions, are there fewer than four approved at the account level? Or, seeing that when the campaign has no callout extensions, they'll be 'inherited' from the account, the question is more simply: Does the campaign have fewer than four resolved callout extensions and not disable them?

EXIST(adgroups, status = enabled NOTEXIST(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(calloutextensions, associationtype -= specific))

This EXIST function is checking if there are any ad groups in the campaign that meet the specified filter, in which all conditions must match an ad group for it to be counted. The first condition, status = enabled, is only looking for enabled ad groups in the campaign.

NOTEXIST(calloutextensions, approvalstatus -= (disapproved, sitesuspended)) then looks for ad groups that have no approved callout extensions attached.

Finally, NOTEXIST(calloutextensions, associationtype -= specific) restricts it even further to look for ad groups that don't have any special callout extensions, such as <callout extensions disabled> entries. So overall, this filter condition checks whether the campaign contains at least one ad group that has no callout extensions and doesn't disable them either.

Rule: Campaign has no ad groups

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype -= universalapp NOTEXIST(adgroups, status = enabled)

Overview

The filter above has three root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that don't have a type of Universal App (App campaigns)
  • and that have no enabled ad groups.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are three top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged. 

campaigntype -= universalapp 

Only those enabled campaigns that don't have a type of Universal App (App campaigns) can be flagged.

NOTEXIST(adgroups, status = enabled) 

This function checks if there are no ad groups contained in the campaign, but only considers ad groups that pass the status = enabled check. So if the campaign has some paused or removed ad groups, but no enabled ad groups, this condition will still pass and the campaign will be flagged with the warning.

Rule: Ad group has no ads

Applies to: Ad groups

Violation criteria:

campaignstatus = enabled status = enabled NOTEXIST(ads, status = enabled)

Overview

The filter above has three root-level conditions. From top to bottom, it's looking for:

  • Ad groups within enabled campaigns
  • that are also enabled themselves
  • and that have no enabled ads

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are three top-level conditions here and they must all match.

campaignstatus = enabled 

Only ad groups whose owning campaign is enabled can be flagged.

Status: enabled 

Only enabled ad groups can be flagged.

NOTEXIST(ads, status = enabled) 

This function checks if there are no ads, of any type, contained in the ad group, but only considers ads that pass the status = enabled check. So if the ad group has some paused or removed ads, but no enabled ads, this condition will still pass and the ad group will be flagged with the warning.

Rule: Non-serving Search ads

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = search NOTEXIST(dynamicadtargets; keywords, status = enabled) 

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • and are within campaigns with a type of Search
  • and that have no enabled criteria

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = search

Only enabled ad groups whose owning campaign is enabled and has a type of Search can be flagged.

NOTEXIST(dynamicadtargets; keywords, status = enabled) 

This function checks whether there are no criteria applying to Search campaigns contained in the ad group, but only considers criteria that pass the status = enabled check. So if the ad group has some paused or removed criteria, but no enabled criteria, this condition will still pass and the ad group will be flagged with the warning.

Rule: Non-serving Shopping ads

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = shopping NOTEXIST(productgroups)

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • and are within shopping campaigns
  • and that have no product groups

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = shopping

Only enabled ad groups whose owning campaign is enabled and has a type of Shopping can be flagged.

NOTEXIST(productgroups) 

This function checks if there are no product groups in the ad group. If none exist, the ad group will be flagged.

Rule: No structured snippet extensions

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = search OR( AND( EXIST(structuredsnippetextension, associationtype = specific) COUNT(structuredsnippetextension, approvalstatus -= (disapproved, sitesuspended)) < 1 ) AND( NOTEXIST(structuredsnippetextension) CONTAINER( COUNT(structuredsnippetextension, approvalstatus -= (disapproved, sitesuspended)) < 1 ) ) ) EXIST(adgroups, status = enabled NOTEXIST(structuredsnippetextension, approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(structuredsnippetextension, associationtype -= specific))

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search
  • and that don't have any resolved structured snippet extensions or explicitly disable them
  • and that have at least one ad group that has no structured snippet extensions and doesn't disable them either

If all these conditions are true, the campaign will be marked with a warning, the default severity for all custom rules.

Note: if you would like to simply change the number of structured snippet extensions required, there are two separate "1" values to change: the count for structured snippet extensions at the campaign level, and the count at the account level, both of which are in the overall OR function.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = search 

Only those enabled campaigns that have a type of Search can be flagged.

OR( AND( EXIST(structuredsnippetextensions, associationtype = specific) COUNT(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) < 1 ) AND( NOTEXIST(structuredsnippetextensions) CONTAINER( COUNT(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) < 1 ) ) )

The OR function is a little more complicated, so let's look at the pieces from the inside out.

EXIST(structuredsnippetextensions, associationtype = specific) checks if there exists at least one shared structured snippet extension associated with the campaign. The associationtype = specific condition tests if structured snippet extensions refer to a shared structured snippet extension from the shared library. Other structured snippet extensions, such as <structured snippet extensions disabled> entries, wouldn't pass this filter condition.

Next, COUNT(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) < 1 checks if there are no approved structured snippet extensions associated with the campaign. These two conditions are grouped in an AND function, meaning that they both have to match. So this portion asks: Are any shared structured snippet extensions associated with this campaign, and if so, are there fewer than one approved?

The next AND condition is similar, but uses NOTEXIST to check if no structured snippet extensions, even special entries like <structured snippet extensions disabled>, are associated with the campaign. It also wraps the COUNT portion in a CONTAINER function to count structured snippet extensions for the owning container: the account. Putting these two together in an AND function, it asks: Are there no structured snippet extensions associated with this campaign (not even special structured snippet extensions), and if not, are there fewer than one approved at the account level?

Because those two questions are wrapped in an OR function, this filter condition asks if the answer to at least one of those two questions is 'yes'. In other words, it's asking: If there are any shared structured snippet extensions associated with this campaign, are there fewer than one approved, but if there are none at the campaign level, and the campaign doesn't explicitly disable structured snippet extensions, are there fewer than one approved at the account level? Or, seeing that when the campaign has no structured snippet extensions, they'll be 'inherited' from the account, the question is more simply: Does the campaign have no resolved structured snippet extensions and not disable them?

EXIST(adgroups, status = enabled NOTEXIST(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(structuredsnippetextensions, associationtype -= specific))

This EXIST function is checking if there are any ad groups in the campaign that meet the specified filter, in which all conditions must match an ad group for it to be counted. The first condition, status = enabled, is only looking for enabled ad groups in the campaign.

NOTEXIST(structuredsnippetextensions, approvalstatus -= (disapproved, sitesuspended)) then looks for ad groups that have no approved structured snippet extensions attached.

Finally, NOTEXIST(structuredsnippetextensions, associationtype -= specific) restricts it even further to look for ad groups that don't have any special structured snippet extensions, such as <structured snippet extensions disabled> entries. So overall, this filter condition checks if the campaign contains at least one ad group that has no structured snippet extensions and doesn't disable them either.

Rule: Not targeting Search Partners

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = (search, shopping) includesearchpartners = disabled

Overview

The filter above has three root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search or Shopping
  • and that have Include search partners disabled

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are three top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = (search, shopping) 

Only those enabled campaigns that have a type of Search or Shopping can be flagged.

includesearchpartners = disabled 

Only those enabled campaigns of the specified types which have Include search partners disabled can be flagged.

Rule: Manual bidding

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = (search, shopping, display) accountsupportsconversions = enabled bidstrategytype = manualcpc enhancedcpc = disabled

Overview

The filter above has five root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search, Shopping or Display
  • that are within accounts which support conversion tracking
  • that have a bid strategy of Manual CPC
  • and that have Enhanced CPC disabled

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are five top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = (search, shopping, display) 

Only those enabled campaigns that have a type of Search, Shopping or Display can be flagged.

accountsupportsconversions = enabled 

Only those enabled campaigns of the specified types which are in accounts that have conversion tracking enabled can be flagged.

bidstrategytype = manualcpc enhancedcpc = disabled 

And finally, those campaigns must have a bid strategy type of Manual CPC and have Enhanced CPC disabled for the campaign to be flagged.

Rule: No optimised ad rotation

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = search adrotation = rotateindefinitely COUNT(ads, status = enabled) > 1

Overview

The filter above has five root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Search
  • and where the ad group has an ad rotation of "Rotate ads indefinitely"
  • and at least two enabled ads of any kind.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are five top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = search 

Ad groups must exist in enabled campaigns that have a type of Search

adrotation = rotateindefinitely 

Only those enabled ad groups whose ad rotation is set to "Do not optimise: Rotate ads indefinitely" can be flagged.

COUNT(ads, status = enabled) > 1 

But only if they have at least one ad of any type that passes the status = enabled filter. If the ad group has one enabled ad and another paused ad, for example, it won't be flagged.

Rule: Accelerated delivery

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = (search, shopping, display) deliverymethod -= standard 

Overview

The filter above has three root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search, Shopping or Display
  • and that aren't using a standard delivery method

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are three top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = (search, shopping, display)

Only those enabled campaigns that have a type of Search, Shopping or Display can be flagged.

deliverymethod -= standard 

Only those enabled campaigns of the specified types that aren't using a standard delivery method can be flagged.

Rule: No Search audiences

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = (search, shopping) NOTEXIST(audiences, status = enabled) EXIST(adgroups, status = enabled NOTEXIST(audiences, status = enabled))

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search or Shopping
  • that don't have enabled audiences
  • and then have at least one enabled ad group that doesn't have enabled audiences

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = (search, shopping) 

Only those enabled campaigns that have a type of Search or Shopping can be flagged.

NOTEXIST(audiences, status = enabled) 

Only those enabled campaigns of the specified types which don't have enabled audiences can be flagged.

EXIST(adgroups, status = enabled NOTEXIST(audiences, status = enabled)) 

This function checks for the existence of an ad group which meets all of the child conditions. Those are status = enabled, meaning that the ad group must be enabled, and NOTEXIST(audiences, status = enabled), meaning that the ad group must contain no audiences meeting the status = enabled filter condition. In other words, a campaign can only be flagged if it contains at least one enabled ad group that itself contains no enabled audiences.

Rule: Fewer than three ads

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = search adrotation = optimise COUNT(ads, status = enabled approvalstatus -= (disapproved, sitesuspended)) < 3 

Overview

The filter above has five root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Search
  • and where the ad group has an optimised ad rotation
  • and fewer than three enabled and approved ads of any kind

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are five top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = search 

Enabled ad groups must exist in enabled campaigns that have Search as a campaign type.

adrotation = optimise 

Only those enabled ad groups whose ad rotation is set to "Optimise: Prefer best performing ads" can be flagged.

COUNT(ads, status = enabled approvalstatus -= (disapproved, sitesuspended)) < 3 

Ad groups can only be flagged if they have fewer than three ads of any type that pass the child conditions here. They are status = enabled, meaning that the ads must be enabled, and approvalstatus -= (disapproved, sitesuspended), meaning that the ads must be approved (or simply not disapproved).

Rule: Conversion tracking not set up

Applies to: Campaigns

Violation criteria:

status = enabled accountsupportsconversions = disabled

Overview

The filter above has two root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that are within accounts that don't have conversion tracking enabled.

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are two top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

accountsupportsconversions = disabled 

Only those enabled campaigns within accounts that don't support conversion tracking will be flagged.

Rule: Image ads but no responsive ads

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = display CONTAINER(accountsupportsconversions = enabled) EXIST(imageads, status = enabled approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(responsiveads, status = enabled approvalstatus -= (disapproved, sitesuspended))

Overview

The filter above has six root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Display
  • which are within accounts with conversion tracking enabled
  • and where the ad group has enabled, approved image ads
  • but no enabled, approved responsive ads

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are six top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = display CONTAINER(accountsupportsconversions = enabled) 

Ad groups must exist in enabled campaigns that have Display as a campaign type, and whose owning accounts have conversion tracking enabled.

EXIST(imageads, status = enabled approvalstatus -= (disapproved, sitesuspended)) NOTEXIST(responsiveads, status = enabled approvalstatus -= (disapproved, sitesuspended))

This does very similar checks for two different types of ads. For each check, it's only considering ads which pass the two child filter conditions of status = enabled, which means that the ad must be enabled and approvalstatus -= (disapproved, sitesuspended), which means that the ad must be approved (or not disapproved). The ad group can only be flagged if it has image ads that meet those conditions, but no responsive ads that meet those conditions.

Rule: Campaign flexible reach set to "Targeting"

Applies to: Campaigns

Violation criteria:

status = enabled campaigntype = (search, shopping) interestsandremarketing = targeting EXIST(audiences, status = enabled)

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled campaigns
  • that have a type of Search or Shopping
  • that have interests and remarketing reach set to "Targeting"
  • and that have enabled audiences

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled campaigns can be flagged.

campaigntype = (search, shopping) 

Only those enabled campaigns that have a type of Search or Shopping can be flagged.

interestsandremarketing = targeting 

Only those enabled campaigns of the specified types that have "Targeting" for their "Interests and remarketing" flexible reach can be flagged.

EXIST(audiences, status = enabled) 

And finally, the campaigns must contain at least one enabled audience for them to be flagged.

Rule: Ad group flexible reach set to "Targeting"

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = (search, shopping) interestsandremarketing = targeting EXIST(audiences, status = enabled)

Overview

The filter above has five root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Search or Shopping
  • and where the ad group has interests and remarketing reach set to "Targeting"
  • and that has enabled audiences

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are five top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = (search, shopping)

Ad groups must exist in enabled campaigns that have Search or Shopping as the campaign type.

interestsandremarketing = targeting 

Only those enabled ad groups which have "Targeting" for their "Interests and remarketing" flexible reach can be flagged.

EXIST(audiences, status = enabled) 

And finally, the ad groups must contain at least one enabled audience for them to be flagged.

Rule: Targeting optimisation disabled

Applies to: Ad groups

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = display targetingoptimization = disabled 

Overview

The filter above has four root-level conditions. From top to bottom, it's looking for:

  • Enabled ad groups
  • that are within enabled campaigns
  • which have a type of Display
  • and where the ad group has targeting optimisation disabled

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are four top-level conditions here and they must all match.

Status: enabled 

Only enabled ad groups can be flagged.

campaignstatus = enabled campaigntype = display 

Ad groups must exist in enabled campaigns that have Display as the campaign type.

interestsandremarketing = targeting 

Only those enabled ad groups which have "Targeting" for their "Interests and remarketing" flexible reach can be flagged.

targetingoptimisation = disabled 

And finally, the ad groups must have targeting optimisation disabled for them to be flagged.

Rule: Inactive Search Network audience targeted

Applies to: Audiences

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = search noofsearchusers < 1,000 CONTAINER(status = enabled)

Overview

The filter above has five root-level conditions. From top to bottom, it's looking for:

  • Enabled audiences
  • that are within enabled campaigns
  • which have a type of Search
  • and where the audience has fewer than 1,000 active users
  • and exists in an active container (ad group or campaign).

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are five top-level conditions here and they must all match.

Status: enabled 

Only enabled audiences can be flagged.

campaignstatus = enabled campaigntype = search

These audiences must exist in enabled campaigns that have Search as the campaign type.

noofsearchusers < 1,000 

Only those enabled audiences which have fewer than 1,000 active users can be flagged.

CONTAINER(status = enabled) 

And finally, their containing ad group or campaign must be enabled for them to be flagged. For campaign-level audiences, the container being checked by this condition is the campaign, which makes this check redundant with the campaignstatus = enabled condition above, but for ad group-level audiences, this will add an extra check to make sure that the owning ad group is enabled in addition to the campaign.

Rule: Inactive Display Network audience targeted

Applies to: Audiences

Violation criteria:

status = enabled campaignstatus = enabled campaigntype = display noofusers < 100 CONTAINER(status = enabled)

Overview

The filter above has five root-level conditions. From top to bottom, it's looking for:

  • Enabled audiences
  • that are within enabled campaigns
  • which have a type of Display
  • and where the audience has fewer than 100 active users
  • and exists in an active container (ad group or campaign)

Detailed explanation

Unless wrapped in an OR function, multiple filters listed together must all match the item being tested for it to be flagged (marked as an error or warning) by the custom rule. There are five top-level conditions here and they must all match.

Status: enabled 

Only enabled audiences can be flagged.

campaignstatus = enabled campaigntype = display 

The audiences must exist in enabled campaigns that have Display as the campaign type.

noofusers < 100 

Only those enabled audiences which have fewer than 100 active users can be flagged.

CONTAINER(status = enabled) 

And finally, their containing ad group or campaign must be enabled for them to be flagged. For campaign-level audiences, the container being checked by this condition is the campaign, which makes this check redundant with the campaignstatus = enabled condition above, but for ad group-level audiences, this will add an extra check to make sure that the owning ad group is enabled in addition to the campaign.

Was this helpful?
How can we improve it?