How To Add Custom Tracking To Google AdWords

Many advertisers use keyword level tracking in AdWords destination URLs. This allows your server to track the source of paid search traffic hitting the site. Recording this data with each inbound paid click allows you to collect your own data for analysis. It is possible to track the search engine, account, campaign, ad group, keyword, […]

Chat with SearchBot

Many advertisers use keyword level tracking in AdWords destination URLs. This allows your server to track the source of paid search traffic hitting the site. Recording this data with each inbound paid click allows you to collect your own data for analysis. It is possible to track the search engine, account, campaign, ad group, keyword, and so on, augmenting what is available from Google AdWords and Analytics reports.

Why go to this additional effort? Maybe you have a local data warehouse, the ability to track the actual user search (from the referrer URL), or you want to watch for click fraud. Another useful thing to do is customize the landing page and user experience based on the specific search term that triggered a visit.

This post discusses some undocumented functionality from Google that has been around for awhile, including the recently (and quietly) released {MatchType} parameter.

Let’s Start With The Basics

Many advertisers start with just a single destination URL for all paid search, such as:

https://www.widgets.com

Advertisers often find it useful to create more specific landing pages for campaigns or ad groups, such as:

https://www.widgets.com/gadgets

But it’s possible to get even more granular, to get even deeper insights. One way track keywords is to use keyword level destination URLs, providing a unique destination URL for each keyword. Here’s an example for the keyword “blue gadget,” along with other parameters associated with the keyword:

https://www.widgets.com/gadgets?SearchEngine=Google&Account=WidgetsPPC&Campaign=Gadgets&AdGroup=BlueOnes&Keyword=Blue_Gadget&MatchType=Broad

That’s pretty straightforward, and you can do that in Excel or your keyword tool of choice prior to uploading keywords. Each URL includes easy to understand, plain-text, useful information. If you get this far you are doing most of what is possible. Read on for some advanced considerations and to see how to do this much easier at the ad level rather than the keyword level.

Recognizing The Difference Between Search And Content Ads

If you use the display network (content) in your paid search campaigns, Google randomly chooses a keyword from your content campaign to assign the click to. It would be nice to know if this click was from a content or a search ad when the user reaches your site. Here is where we get into dynamic URLs—this example shows how we can differentiate between the two.

https://www.widgets.com/gadgets?SearchEngine=Google&Account=WidgetsPPC&Campaign=Gadgets&AdGroup=BlueOnes&Keyword=Blue_Gadget&MatchType=Broad&Distribution={IfSearch:Search}{IfContent:Content}

Note that when you see a click is from content campaigns, you should simply ignore the keyword and match type, because the ad is randomly chosen from “key terms” identified by Google in your account as the theme for the ad group. Just about the only useful thing to do with these would be to try to sort out what words Google thinks are your key terms (something you can’t otherwise find out). But many smart advertisers are already building tightly grouped ad groups with 50 terms or less for content anyway, using a documented feature called ValueTrack.

Ad Level Dynamic Destination URLs

There are a few advantages to working at the ad level rather than the keyword level, and it is possible to do so without losing any tracking information.

Doing so keeps the keyword-adding process nimble and light, unencumbered by the extra step of forming destination URLs as we add keywords. This is a big productivity boost and allows us to use various keyword tools without pausing to generate destination URLs.

Using ad level destination URLs also facilitates A/B testing. Start with two otherwise identical copies of an ad, then vary destination URLs to point to the landing pages you wish to test. Now place them in an ad group and set the ad delivery to rotate (rather than optimize). You will get balanced, randomized traffic sent to the two URLs.

You can look at the performance of the two ads and get a decent idea of which landing page performs better. A word of caution: it is frequently the case that even though the two ads are visually identical, Google’s system decides one performs better CTR-wise on some traffic versus the other and then favors that ad on specific keywords. This happens because Google keeps track of performance metrics for each ad + keyword combination to optimize results, yet it is a level of optimization we frequently don’t get insight into. If this happens and your ads have wildly different CTRs at the end of your test despite being visually identical, you should consider redoing the test.

To recap, using ad level destination URLs over keyword level destination URLs keeps the keyword adding process nimble and light, reduces the chance of error and enables A/B testing.

However, to do so and retain our ability to track performance at the keyword level, we need to generate ad level destination URLs with keyword-level information. We need dynamic insertion that will insert keyword level information into an ad level destination URL. Because any keyword in the ad group can trigger the ad, Google doesn’t know which keyword triggers the ad until it serves the ad. At that time Google can fill in the keyword level information, if you set it up correctly. Read on to find out how.

Dynamic Insertion in Google AdWords Destination URLS

Google tracks the following tags in AdWords destination URLs:

  • {Keyword} = PPC Keyword that triggered this ad
  • {MatchType} = Keyword Match type
  • {Creative} = Ad ID
  • {Placement} = Placement name / URL
  • {IfSearch:Search} & {IfContent:Content} = If this is search traffic, then the value after IfSearch is written, and likewise for content (never both). You can substitute your own values after the colon.

So here is a URL that behaves as expected at the ad level, dynamically filling in keyword level information at the time of the click:

https://www.widgets.com/gadgets?SearchEngine=Google&Account=WidgetsPPC&Campaign=Gadgets&AdGroup=BlueOnes&Keyword={Keyword}&MatchType={MatchType}&Distribution={IfSearch:Search}{IfContent:Content}&AdID={Creative}&Placement={Placement}

Some Practical Tips

To separate parameters, you can choose any delimiter you prefer. The common choices are to use the standard “?” and “&” (for the first and subsequent delimiters, respectively). Google itself has started using “#” and “&” to separate parameters. Java often uses “?” and “;”. The variety of encoding schemes these days is dizzying.

https://www.widgets.com/gadgets#SearchEngine=Google;Account=WidgetsPPC

You can also cram all that information into a single parameter, mixing your delimiters:

https://www.widgets.com/gadgets?CID=Google++WidgetsPPC++BlueOnes++Blue_Gadget++

This might be useful if your particular setup only allows tracking of one parameter, as with Omniture’s CID code.

It’s a good idea to limit your use of special characters in the names of your accounts, campaigns, etc. if you are using “&” as your delimiter. If you include an “&” in your campaign name, that might foul up your ability to parse the rest of the URL.
URLs often arrive slightly modified from their original form. Somewhere along the way, either Google or your server typically replace spaces with “%20” or “+”. You will need to “undo” this replacement in order to make sense out of your keywords.

Be sure not to name your parameters anything that will conflict with parameters you pass around your site. If you use Google Analytics and auto tagging () be sure to avoid adding a parameter whose key conflicts with one of the auto-tagging keys (don’t add one named GCLID, though I have no idea why you would want to).

A Matter Of Style

As a matter of style, I prefer not to use long parameter names in my URLs. I typically use a set of easily discernible but short three letter acronyms. They just have to be long enough that they will be unique and not conflict with any other parameters you are passing around your site. Here is a set I like—the letter “P” in each case represents “paid”:

  • PSE = Search Engine
  • PAC = Account
  • PCA = Campaign
  • PAG = ad group
  • PKW = Keyword
  • PMT = Keyword match Type
  • PDS = Distribution (Search / Content)
  • PPL = Placement
  • PAD = Ad ID

The Final Product

Here’s an example of what a custom URL with your tracking codes will look like:

https://www.widgets.com/gadgets?PSE=Google&PAC=WidgetsPPC&PCA=Gadgets&PAG=BlueOnes&PKW={Keyword}&PMT={MatchType}&PDS={IfSearch:S}{IfContent:C}&PPC={Placement}&PAD={Creative}

If you’re using a Google AdWords editor bulk sheet, here’s a handy Excel formula you can use in the destination URL column—just insert this formula into the destination URL column (column G) and replace the site URL and account name:

https://www.YourSite.com?SearchEngine=Google&Account=YourAccountName&Campaign="&A2&"&AdGroup="&B2&"&Keyword={Keyword}&MatchType={MatchType}&Distribution={IfSearch:Search}{IfContent:Content}&AdID={Creative}&Placement={Placement}

Conclusion

If you are collecting keyword level data with AdWords, you can use ad level destination URLs to track this data. Using ad level destination URLs keeps your keyword-adding work easy, reduces the chances of error with destination URLs and enables you to A/B test your landing pages. To do so, use dynamic insertion in your ad level destination URLs with a combination of documented and undocumented features to produce a destination URL that Google can fill in with keyword level information when it serves the ad.


Opinions expressed in this article are those of the guest author and not necessarily Search Engine Land. Staff authors are listed here.


About the author

Crosby Grant
Contributor

Get the must-read newsletter for search marketers.