|
|
Automatically tagging PPC urls in using dynamic parameters in Google, Yahoo & MSN (Best Practice Techniques)
|
Report abuse
|
|
I am trying to work out a "best practice" way of tagging url`s by utilising the ad providers {dynamic} parameter, rather than manually tagging individual url`s.Also, I need to store the Bidword and Campaign Name in the destination url`s & ensure the urls are not longer than 1024 characters. Q1. Does adding manual url tags to adwords break GA tracking when gclid is enabled? e.g I wish to add utm_content={creative} and utm_campaign=MY_CAMPAIGN but I am concerned that dding tags will mena that cost data from adwords will not be passed or the GA tracking will break. As a work around I have used "utm_campaignX" and "utm_contentX" so parameter names are nto the same, but this is not idea. Q2. Does anyone know if double calls to dynamic parameters will work in in Google, Yahoo & MSN? E.g Google: kw={ifcontent:ContentKeyword}{ ifsearch:{keyword}}&distribution={ifsearch:search}{ifcontent:content} Yahoo:kw={YSMKEY}&utm_term={YSMKEY} MSN:kw={keyword}&utm_term={keyword}
Q3. Here is the interesting bit, comments gratefully received!... (Note:CAPITALS indicates a manual tag, not dynamic)
------------- Google - Adwords http://www.mydomain.com/landingpage.htm? source=GOOGLE kw={ifcontent:ContentKeyword}{ifsearch:{keyword}} match=MY_MATCHTYPE distribution={ifsearch:search}{ifcontent:content} site={placement} utm_contentX={creative} utm_campaignX=MY_CAMPAIGN
Google dynamic variables: {keyword} {ifsearch:search}{ifcontent:content} {placement} {creative}
------------- Yahoo - YSM http://www.mydomain.com/landingpage.htm? source=YAHOO kw={YSMKEY} match={YSMMTC:exact:broad:content} distribution={YSMMTC:search:search:content} * not sure if this works adgrpid={YSMADGRPID} utm_source=YAHOO utm_medium=CPC utm_campaign={YSMCAMPGID} utm_term={YSMKEY} utm_content={YSMADID}
Yahoo dynamic variables: {YSMCAMPGID} {YSMADGRPID} {OVRAW} {OVKEY} {OVMTC} {OVADID} {OVKWID}
Note: Capital letters MUST be used for the parameter names e.g YSMADGRPID & YSMCAMPID according to yahoo help file: :http://help.yahoo.com/l/us/yahoo/ysm/sps/screenref/16897.html#1
------------- MSN - Adcenter http://www.mydomain.com/landingpage.htm? source=MSN kw={keyword} match={MatchType} distribution=SEARCHutm_source=MSN utm_medium=CPC utm_campaign=MY_CAMPAIGN utm_term={keyword} utm_content={AdID}
MSN dynamic variables: {keyword} {QueryString} * not used {MatchType} {OrderItemId} {AdId}
Thanks
Phil.
All replies
UPDATE: I am still testing this, waiting 24hours for results.
Google: (I still am unsure if utm_content & utm_campaign will break ?gclid cost tracking)
?source=GOOGLE&kw={ifcontent:ContentKeyword}{ifsearch:{keyword}}&match=MY_MATCHTYPE&distribution={ifsearch:search}{ifcontent:content}&site={placement}&utm_content={creative}&utm_campaign=MY_CAMPAIGN
Yahoo:
?source=YAHOO&kw={YSMKEY}&match={YSMMTC:exact:broad:content}&distribution={YSMMTC:search:search:content}&adgrpid={YSMADGRPID}&utm_source=YAHOO&utm_medium=CPC&utm_campaign={YSMCAMPGID}&utm_term={YSMKEY}&utm_content={YSMADID}
MSN: the ad destination url is set to {param1}
?source=MSN&kw={keyword}&match={MatchType}&distribution=SEARCH&utm_source=MSN&utm_medium=CPC&utm_campaign=MY_CAMPAIGN&utm_term={keyword}&utm_content={AdID}
Phil.
Phil, To answer your question about whether or not using custom campaign parameters works in conjunction with AdWords auto-tagging the answer is no. If you define utm_... in your destination URL's and have auto tagging, the gclid parameter will be added as well. The utmz cookie, which captures campaign values, will record all the values, including the gclid. Therein lies the problem - GA will record what you define with utm_... variables, but when the AdWords GCLID match runs it will overwrite any custom parameters for a session. The best method for handling tagging on Yahoo and MSN as well as graceful tagging for Analytics is that I've found is below. I came up with this last year when working on a similar solution for a large automotive client. 1) use some client-side code that selectively determines what the source is and then formulates a tracking string based on the appropriate parameters, and injects them into the URI via modifying the location.hash portion of the URI before you run the GA code. Also be sure to enable the setAllowAnchor() method in your GA tag. 2) The result would be a URL loads, www.yousite.com/page.html?source=YAHOO&kw={YSMKEY}&match={YSMMTC:exact:broad: content}&distribution={YSMMTC:search:search:content}&adgrpid={YSMADGRPID}&utm_source=YAHOO&utm_medium=CPC&utm_campaign={YSMCAMPGID}&utm_term={YSMKEY}&utm_content={YSMADID}
3) The JS code above reads the values out of the URI and creates a string to inject into the hash that looks like this: "#utm_source=yahoo.com&utm_medium=cpc-search-broad&utm_campaign=campaign-name&utm_term=term&utm_content=ad-content" so the URI then changes to www.yousite.com/page.html?source=YAHOO&kw={YSMKEY}&
match={YSMMTC:exact:broad: content}&distribution={YSMMTC:search:search:content}&adgrpid={YSMADGRPID}&utm_source=YAHOO&utm_medium=CPC&utm_campaign={YSMCAMPGID}&utm_term={YSMKEY}&utm_content={YSMADID}#utm_source=yahoo.com&utm_medium=cpc-search-broad&utm_campaign=campaign-name&utm_term=term&utm_content=ad-content 4) You then run ga.js with the setAllowHash(), which will read the values from the URI in the # string and set the utmz cookie accordingly, then fire tracking hits. The rest will work as through you used standard GA tags for campaign tracking, and other tagged URL's would continue to be tracked normally.
Hope that helps!
-Caleb Whitmore www.analyticspros.com
Caleb, Thanks for the detailed reply. Yes, the "location.hash" & pageTracker._setAllowAnchor( true); solution is an elegant one.
I found a recent blog post & script using this method: http://www.e-nor.com/blog/index.php/web-analytics/tracking-traffic-from-press-releases-in-google-analytics/
JavaScript URI injection code: http://www.e-nor.com/blog/images/09/code.txt
However, I am not a developer and I am not able to easily implement onsite changes.
I am trying to figure out a generic tag solution for PPC managers like myself; that does not involve manually tagging every single keyword url, and utilises the SE dynamic parameters.
Here is as far as I have got…
I have included the dynamic parameters first, then actual value from a live advert.
CAPITALS indicate a manual tag, not a dynamic parameter.
-------- Google: “utm_content” change to “adID” “utm_campaign” change to “campaign”
?source=GOOGLE&kw={ifcontent:ContentKeyword}{ifsearch:{keyword}}&match=MY_MATCHTYPE&distribution={ifsearch:search}{ifcontent:content}&site={placement}&adID={creative}&campaign=MY_CAMPAIGN
http://www.mydomain.com/landingpage.htm? source=GOOGLE kw=tracking_test_20090219_tagged match=MY_MATCHTYPE distribution=search site= adID=2599556614 campaign=MY_CAMPAIGN gclid=CPnEuv2m8pgCFQqT3wodllxm1g
The site={placement}is empty in this example, as the advert was active on google.co.uk - if site targeting on content network is used {placement} data will be populated or you can a filter for $A2 in Referral: ^(http://|https://)([^/]*)
As Caleb pointed out the utm_content and will be overwritten by gclid from adwords. Thus I have to use this work-around to store the utm_content now called “adID” parameter:
1. Advanced Custom Filter to send value of "adID" to Campaign Content Request URI:(\?|&)^adid=([^&]*) Campaign Content:$B2
2. Advanced Custom Filter to remove adId parameter from URI Request URI:(.+)(\?|&)^adid=([^&]*)(.*) Request URI:$A1$A4
NOTE TO GOOGLE: Please add support for {MatchType} & {Campaign name} dynamic parameter in Adwords; it will make this process alot easier.
-------- Yahoo
I have change {YSMMTC:exact:broad:content} to {YSMMTC:standard:advanced:content} for simplicity.
?source=YAHOO&kw={YSMKEY}&match={YSMMTC:standard:advanced:content}&distribution={YSMMTC:search:search:content}&adgrpid={YSMADGRPID}&utm_source=YAHOO&utm_medium=CPC&utm_campaign={YSMCAMPGID}&utm_term={YSMKEY}&utm_content={YSMADID}
http://www.mydomain.com/landingpage.htm? source=YAHOO kw=tracking%20test%2020090219 match=standard distribution=search adgrpid=10424031419 utm_source=YAHOO utm_medium=CPC utm_campaign=650988031 utm_term=tracking%20test%2020090219 utm_content=23047458531 OVRAW=tracking%20test%2020090219 OVKEY=tracking%20test%2020090219 OVMTC=standard OVADID=23047458531 OVKWID=163017877531
-------- MSN - advert url’s have been set to use {param1}
?source=MSN&kw={keyword}&match={MatchType}&distribution=SEARCH&utm_source=MSN&utm_medium=CPC&utm_campaign=MY_CAMPAIGN&utm_term={keyword}&utm_content={AdID}
http://www.mydomain.com/landingpage.htm? source=MSN kw=tracking%20test%2020090219 match=e distribution=SEARCH utm_source=MSN utm_medium=CPC utm_campaign=MY_CAMPAIGN utm_term=tracking%20test%2020090219 utm_content=450250688
Note: MSN`s {MatchType} dynamic parameter only shows a single letter value: e=exact p=phrase b=broad c=content
Thus match={MatchType} will be either an e|p|b|c
It is possible to add filters in GA to change the above to exact|phrase|broad|content using:
** NOT TESTED - I will report back once I have checked these filters work in 48hours **
Request URI:(.+)(\?|&)^match=e(\?|&)$(.*) Request URI:$A1$A2match=exact$A3$A4
Request URI:(.+)(\?|&)^match=p(\?|&)$(.*) Request URI:$A1$A2match=phrase$A3$A4
Request URI:(.+)(\?|&)^match=b(\?|&)$(.*) Request URI:$A1$A2match=broad$A3$A4
Request URI:(.+)(\?|&)^match=c(\?|&)$(.*) Request URI:$A1$A2match=content$A3$A4
Then send the value to an empty field, such as User Defined:
Campaign Source:(.*) Request URI:(\?|&)^match=([^&]*) User Defined:$A1-$B2
This would display as “google-exact” or “google-phrase”
Then remove the "match=" parameter in URI Request URI:(.+)(\?|&)^match=([^&]*)(.*) Request URI:$A1$A4
Cheers
Phil.
Phil, Great post. I noted "Thus I have to use this work-around to store the utm_content now called “adID” parameter:" still won't work for you because when gclid is processed in, it's going to overwrite anything that is in that field if gclid is set in the utmz cookie. The E-Nor post is a good overview with more details. Their post and script is based on the case study I presented with the method I noted earlier. In theory, with some effort in scripting, you don't need to do a tone of work to implement location.hash solution once you've mapped your parameters. You'd simply need to script the handler to capture the variables for each engine and render them out into the location.hash field. Place that handler into your site globally in the <head> or before your GA code and you'll be set. -Caleb www.analyticspros.com
Caleb,
Removing the value of adID is happening after GA logs have been processed via a custom filter; which is extracting this from the landing page URI, thus I can not see how gclid overwriting utmz cookie will make any difference?
"simply" .. implement the location.hash solution by mapping parameters... add script handler to capture variables for each engine... render into location.hash ... place handler into global <head>... add salt... bake for 30mins ;-))
I will consult developer and see if he is able to adapt the E-Nor script to map the parameters.
Phil.
This is a very interesting thread re: overwriting utm_* tags from gclid. I too use the auto-tagging + manual tagging and in my AdWords clicks report the AdWords campaign name (as listed in AdWords) gets credit for the visit, but the "manual" campaign tag (ie. utm_campaign), get credit for the Impression, Click, Cost, etc.
The top line data all ends up being correct, but the visits and clicks are split between the two "versions" of the campaign.
Our saving grace is the fact that we don't include utm_term (keyword) in our manual tags so when we change the Clicks report to Dimension -> Keyword, everything lines up with the correct keyword.
Phil,
Yes, the bake for 30 mins is the most important part :).
Unless Google has changed ordering of operations, the gclid acts as a lookup table. the gclid doesn't overwrite the cookie, it is an actual value appended into the __utmz cookie which is then processed later and matched back to a data import from AdWords. It used to be that filters weren't able to influence fields impacted by a lookup table. If your test shows otherwise I'd love to hear about it!
Oh, and set the oven to 450 degrees (f) when baking that script - but I don't what that converts to in metric measures ;).
Best,
-Caleb
ShoreTel, That is very interesting feedback about the auto campaign getting credit for the AdWords campaign name and your manual campaign getting the impressions, etc.. attributed to it. That would indicate to me that GA is first processing the visit level data and reconciling the AdWords import with visit dimensions and then running filters, before finally adding the additional imported AdWords metrics to the report. If you cross-segment by a dimension other than campaign, i.e. go through, say, Regions, then segment by campaign, what gets attributed - AdWords or Manual? -Caleb Whitmore www.analyticspros.com
RE:Caleb post "gclid auto campaign getting credit for the AdWords campaign name and your manual campaign getting the impressions attributed to it" ... and checking... "cross-segment by a dimension other than campaign". This is confusing me. I think Caleb is suggesting that in Traffic report >> Campaign which is set by utm_campaign in Yahoo & MSN will be incorrect, but Traffic Source >> Adwords >> Adwords Campaigns will be correct? Due to the gclid assigning Impression to campaigns correctly for Adwords but not for manually tagged cmapaigns such as Yahoo & MSN. Is that right? UPDATE: Regarding ppc dynamic parameters, I have made a couple of changes to the tags. I have decided to add a parameter for SearchWord (sw) and use the YSM & MSN dynamic parameters &sw={YSMRAW} and &sw={QueryString} . There is no adwords parameter for SearchWord so I will try to use the value of try to add the search string stored in __utmz (utmctr=search-word) into trackPageview e.g trackPageview(/landingpage. htm/?source=GOOGLE&kw=tracking_test_20090219_tagged&match=MY_MATCHTYPE&distribution=search&site=&adID=2599556614&campaign=MY_CAMPAIGN&gclid=CPnEuv2m8pgCFQqT3wodllxm1g&sw=SEARCH-WORD-HERE);
Secondly, I am requested that Adwords add a {position} parameter as this would be very useful for bid management. There is a value of num= in google paid advert redirects, but this is not shown in the referrer so need to be a dynamic parameter. http://www.google.co.uk/aclk?sa=[right-side-advert]&ai=[randomclickID]&num=[ad_position]&ggladgrp=[adgroupid]&gglcreat=[adid]&sig=[clientid-encoded]&q=[desination-url]
Cheers
Phil.
P.S That would be 230º c - I will let you know when I have got the JavaScript URI injection installed correctly - hopefully I will avoid overheating the server & cookies burning ;-)
Phil, gclid isn't relevant to Yahoo or MSN since it is a custom parameter for AdWords. My thought re: ShoreTel's note was that it sounds like there is an order of operations applied with the AdWords cost data import that splits attribution of campaign names to visit metrics and application of cost-data. Two other thoughts: 1) You don't need to pass in the actual query string as a parameter since it is already available to GA. There have been filters out for years that copy the actual query string for any engine and move it into another field, usually user-defined, to allow drill-down on bidded term > actual term. I'll link to them below. 2) You don't need an AdWords position parameter as these are already available as dimensions in Google Analytics - just not normally exposed. See the post about "secret segments" on my blog at www.analyticspros.com, and use the "segkey" of "ad_slot" and "ad_slot_position". I'll try to put up a blog post about it later today with a quick-link you can just drag-n-drop onto your bookmarks toolbr for quick access. Best, -Caleb Whitmore www.analyticspros.com
Update: the reference I made to linking to blog posts about the filter for exact terms - I can't seem to find the blog post that originally covered this, so I'm going to write one of my own. Check back soon...
-Caleb
FYI: When I go to Map Overlay and choose a country (US) and then do Dimension -> Campaign the "official" AdWords Campaign name gets credit for the visit, not the utm_campaign tag. The same as the AdWords Campaigns -> Clicks report.
Ahh... so it sounds like there are some slightly strange orders of operation for reconciling gclid data to dimensions.
-Caleb
Caleb, Sorry for the delayed reply - I was on Holiday. 1) Yes, I know about the RegEx for extracting the Search Engine query string e.g $A3 in (\?|&)(q|p|query)=([^&]*) of Referral. However not all Google or Yahoo cpc search partners use a q|p|query as a SearchWord parameter. Thus using &sw={YSMRAW} for Yahoo and extracting utmctr=search-word in the __utmz cookie for Google is a more accurate way of catching all the exact searches. Just to give you an idea of scale the legacy GA code there are 12 different search parameters for the SearchWord uOkw= (q|p|query|qs|qt|encquery|k| rdata|searchExpr|szukaj|terms|text|wd|search_for) and some UK engines such as orange.co.uk & sky.co.uk are not added by default in http://www.google-analytics.com/urchin.js (uOkw=)
Secondly, I need to dissect parameters values on the landing page using Excel. Thus if I save the SearchWord on the landing page this save me time.
Thirdly, it will be an interesting test to set the internal site search parameter to the same parameter as the referring search keyword (?sw)- this might highlight some new keywords or provide a new way of using the keyword refinements report for AdWords campaign.
2) Cool - I did not know it was possible to segment by Ad Slots or Ad Positions :-)
However, this only worked for me when I clicked the apply segment button in advanced segment reports (this added &seg0=[my-saved-report-number]) to the url.
When I tried manually adding…
&segkey=1&segkey=ad_slot &segkey=1&segkey=ad_slot_position &segkey=1&segkey=ad_group
…to the url in the Adwords Campaign reports in GA - I just got this error message saying segmentation not possible: https://www.google.com/support/googleanalytics/bin/answer.py?answer=113738
Phil.
UPDATE: In order to standardise parameter definitions I have switched the naming of utm_content & utm_campaign back (i.e removed the "X" at the end) in Adwords tag. If the AdWords GCLID matching is overriding everything, then I see no harm in adding these manual tags. Secondly, I can still see the manual parameter values in my backup analytics solution which are not effected by the GCLID override. Thirdly, this means that the "utm_campaign" & "utm_content" are consistent across the 3 major cpc Search Engines. I have decided to manually name the Yahoo Campaigns and change utm_campaign={YSMCAMPGID} …to… campgid={YSMCAMPGID}. This is because I prefer to use a text name campaign rather than an ID and it means that this is consistent with Google & MSN campaign names. To rule out the possibility of an overlap in AdvertID, I have added a single character (g|y|m) infront of: Google:utm_content=g{creative} Yahoo :utm_content=y{YSMADID} MSN :utm_content=m{AdID} In order to standardise tagging further; I have added empty parameters such as adgrpid= and site= so that each Search Engine has the same number of parameters. I have added campgid= adgrpid= kwid= as suspect in the long term the SE`s will add support for these 3 parameters (see my note about SpyFu at the end of this post). CAPITALS indicates a manual tag. The “Source” & “kw” parameters have been added for 3rd party legacy tracking systems which do not support customs parameter definitions. ------------ Google: http://www.mydomain.com/landingpage.htm? source=google kw={ifcontent:contentKeyword}{ ifsearch:{keyword}} match=ENTER_MY_MATCHTYPE_HERE distribution={ifsearch:search}{ifcontent:content} site={placement} campgid= adgrpid= kwid= utm_source=google utm_medium=cpc utm_campaign=ENTER_MY_CAMPAIGN_HERE utm_term={ifcontent:contentKeyword}{ifsearch:{keyword}} utm_content=g{creative} sw=
?source=google&kw={ifcontent:contentKeyword}{ifsearch:{keyword}}&match=ENTER_MY_MATCHTYPE_HERE&distribution={ifsearch:search}{ifcontent:content}&site={placement}&campgid=&adgrpid=&kwid=&utm_source=google&utm_medium=cpc&utm_campaign=ENTER_MY_CAMPAIGN_HERE&utm_term={ifcontent:contentKeyword}{ifsearch:{keyword}}&utm_content=g{creative}&sw=
------------ Yahoo: http://www.mydomain.com/landingpage.htm? source=yahoo kw={YSMKEY} match={YSMMTC:standard:advanced:content} distribution={YSMMTC:search:search:content} site= campgid={YSMCAMPGID} adgrpid={YSMADGRPID} kwid= utm_source=yahoo utm_medium=cpc utm_campaign=ENTER_MY_MY_CAMPAIGN_HERE utm_term={YSMKEY} utm_content=y{YSMADID} sw={YSMRAW}
?source=yahoo&kw={YSMKEY}&match={YSMMTC:standard:advanced:content}&distribution={YSMMTC:search:search:content}&site=&campgid={YSMCAMPGID}&adgrpid={YSMADGRPID}&kwid=&utm_source=yahoo&utm_medium=cpc&utm_campaign=ENTER_MY_MY_CAMPAIGN_HERE&utm_term={YSMKEY}&utm_content=y{YSMADID}&sw={YSMRAW}
------------ MSN http://www.mydomain.com/landingpage.htm? source=msn kw={keyword} match={MatchType} distribution=search site= campgid= adgrpid= kwid= utm_source=msn utm_medium=cpc utm_campaign=ENTER_MY_MY_CAMPAIGN_HERE utm_term={keyword} utm_content=m{AdID} sw={QueryString}
?source=msn&kw={keyword}&match={MatchType}&distribution=search&site=&campgid=&adgrpid=&kwid=&utm_source=msn&utm_medium=cpc&utm_campaign=ENTER_MY_MY_CAMPAIGN_HERE&utm_term={keyword}&utm_content=m{AdID}&sw={QueryString}
------------ Exclude parameters to keep the landing page url`s tidy:
source, kw, site, campgid, adgrpid, kwid, sw, ovraw, ovkey, ovmtc, ovadid, ovkwid, ysmwa
I would suggest extrapolating “match” & “distribution” from the request URI to an empty filed such as user defined.
------------ Other points
* It would useful if Adwords Quality Score per keyword was visible in GA via the GCLID lookup. * Mivia & Looksmart support some dynamic parameters which I have not explored in this post. * Competitive Intelligence tools such as SpyFu & Adgooroo are being used to extrapolate ppc campaign structures based by spidering SERP`s and copying the destination urls on these pages, thus either kwID and campaignID`s must be used or forwarding url`s need to be used (e.g TradeDoubler http://tsw0.com/xxxx/xxx and Atlas http://clk.atdmt.com/xxx/xxxxxxxx/ ). Note: forwarding urls requires a manual exception to the Adwords display url policy per advert!
Cheers
Phil.
FINAL SOLUTION FOR GENERIC PPC TAGS:------------------------------ ---------------------------------------
The simplest solution is to use gclid for Google adwords. For Yahoo & MSN use:
Yahoo: ?utm_source=yahoo&utm_medium=cpc&utm_term={YSMKEY}&utm_content=y{YSMADID}&utm_campaign={YSMCAMPGID}
MSN: ?utm_source=msn&utm_medium=cpc&utm_term={keyword}&utm_content=m{AdID}&utm_campaign=msn-campaign
Note:
Yahoo "tracking urls" must be enabled and "ovraw, ovkey, ovmtc, ovadid,
ovkwid, ysmwa" should be added to your exclude website parameters
settings in Google Analytics. Capitals must be used for YSMKEY, YSMADID
& YSMCAMPGID. Where "?" is present in the url already changed
?utm_source to &utm_source. ---------------------------------------------------------------------
Here
are more comments on the dimensions error & utilising all available
dynamic parameters provided by the Search Engines`s...
I
received a response from a GA specialist (via Adwords) regarding using
utm_* manual tag when autotaging (GCLID) is enabled. I also ask them to
expand upon Caleb point about "Manual tag data is simply overwritten by the GCLID when the match is run with Adwords and cost data is imported".
GA specialist said...
If the advertiser tags his links manually & also has auto-tagging turned on, neither of them will take precedence. It will cause the cost data for these URLs not to be imported into
GA. This is because the cookies will capture both the utm_* manual tags
& the GCLID, but when GA tries to import cost data from Adwords it
gets confused and doesn't know how to apply it to the relevant Adwords Campaign.
They said this is a common problem when clients use auto-tagging & manual tags in the same account, and that they encourage either one or the other (not a mix of both) within Adwords campaigns. They suggest that there is no advantage to using manual tags if you are using Auto tagging already.
Here
is the quote from slide 27 if the GA test "If you’ve enabled auto
tagging, don’t manually tag your AdWords destination URLs. Doing so can
create conflicting data in your reports." http://services.google.com/analytics/breeze/en/campaigntracking_adwordsintegration/index.html
So... I have renamed "utm_campaign" back to "campaign", and "utm_content" renamed to "adid=", lol!
I
am using a secondary analytics program which is unable to
lookup the GCLID, so there is a disadvantage for me to only using the
auto-tagging method and beacuse I wish to standardise tagging across
all Search Engines I will need to double-tag "campaign" & "
utm_campaign" in YSM & MSN. This will mean that I will be able to
set one parameter "source", "campaign" & "kw" across all ppc
engines in my secondary analytics package.
---------- Google Adwords http://www.yourdomain.com/landingpage.htm? source=google kw={ifcontent:content-keyword}{ifsearch:{keyword}} sw= distribution={ifsearch:search}{ifcontent:content} site={placement} campgid= adgrpid= adid=g{creative} kwid= campaign=YOUR_CAMPAIGN_NAME_HERE match=YOUR_MATCHTYPE_HERE
?source=google&kw={ifcontent:content-keyword}{ifsearch:{keyword}}&sw=&distribution={ifsearch:search}{ifcontent:content}&site={placement}&campgid=&adgrpid=&adid=g{creative}&kwid=&
campaign=YOUR_CAMPAIGN_NAME_HERE&match=YOUR_MATCHTYPE_HERE
------------ Yahoo: http://www.yourdomain.com/landingpage.htm? source=yahoo kw={YSMKEY} sw={YSMRAW} match={YSMMTC:standard:advanced:content} distribution={YSMMTC:search:search:content} site= campgid={YSMCAMPGID} adgrpid={YSMADGRPID} adid=y{YSMADID} kwid= utm_source=yahoo utm_medium=cpc utm_term={YSMKEY} utm_content=y{YSMADID} utm_campaign=YOUR_CAMPAIGN_NAME_HERE campaign=YOUR_CAMPAIGN_NAME_HERE
?source=yahoo&kw={YSMKEY}&sw={YSMRAW}&match={YSMMTC:standard:advanced:content}&distribution={YSMMTC:search:search:content}&site=&campgid={YSMCAMPGID}&adgrpid={YSMADGRPID}&adid=y{YSMADID}&kwid=&utm_source=yahoo&utm_medium=cpc&utm_term={YSMKEY}&utm_content=y{YSMADID}&utm_campaign=YOUR_CAMPAIGN_NAME_HERE&campaign=YOUR_CAMPAIGN_NAME_HERE
------------ MSN http://www.yourdomain.com/landingpage.htm? source=msn kw={keyword} sw={QueryString} match={MatchType} distribution=search site= campgid= adgrpid= adid=m{AdID} kwid= utm_source=msn utm_medium=cpc utm_term={keyword} utm_content=m{AdID} utm_campaign=YOUR_CAMPAIGN_NAME_HERE campaign=YOUR_CAMPAIGN_NAME_HERE
?source=msn&kw={keyword}&sw={QueryString}&match={MatchType}&distribution=search&site=&campgid=&adgrpid=&adid=m{AdID}&kwid=&utm_source=msn&utm_medium=cpc&utm_term={keyword}&utm_content=m{AdID}&utm_campaign=YOUR_CAMPAIGN_NAME_HERE&campaign=YOUR_CAMPAIGN_NAME_HERE
-------------- Shorten Tags (e.g duplicate campaign tags have been removed)
Google: ?source=google&kw={ifcontent:content-keyword}{ifsearch:{keyword}}&distribution={ifsearch:search}{ifcontent:content}&site={placement}&adid=g{creative}&campaign=google-campaign&match=google-matchtype
Yahoo: ?source=yahoo&kw={YSMKEY}&sw={YSMRAW}&match={YSMMTC:standard:advanced:content}&distribution={YSMMTC:search:search:content}&adgrpid={YSMADGRPID}&utm_source=yahoo&utm_medium=cpc&utm_term={YSMKEY}&utm_content=y{YSMADID}&utm_campaign={YSMCAMPGID}
MSN: ?source=msn&kw={keyword}&sw={QueryString}&match={MatchType}&distribution=search&utm_source=msn&utm_medium=cpc&utm_term={keyword}&utm_content=m{AdID}&utm_campaign=msn-campaign
Exclude parameters for the above are: source,
kw, sw, match, distribution, creative, site, campgid, adgrpid, kwid,
adid, ovraw, ovkey, ovmtc, ovadid, ovkwid, ysmwa, _s_ref
--------------
To store "match-distribution" (e.g "search-exact") in the empty field user-defined change the exclude parameters to: source, kw, sw, creative, site, campgid, adgrpid, kwid, ovraw, ovkey, ovmtc, ovadid, ovkwid, ysmwa, _s_ref
Then add these 3 Custom Filter/Advanced filters:
1. Send value of "match-distribution" to user-defined field Request URI:(\?|&)match=([^&]*)(\?|&)distribution=([^&]*) User-Defined:$A2-$A4
2. Remove match parameter from Request URI Request URI:(.+)(\?|&)match=([^&]*)(.*) Request URI:$A1$A4
3. Remove distribution parameter from request URI Request URI:(.+)(\?|&)distribution=([^&]*)(.*) Request URI:$A1$A4
Hopefully that is a wrap, phew. Sorry the post went on a bit!
Cheers
Phil.
P.S just in case GA add support for auto-import of Yahoo ppc cost data
here is the url:
http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55467
Hi Phil, Great post. I have been searching for exactly this. I am not a developer, meaning I don't follow exactly what needs to be done. I understand what is happening, just not exactly what goes where, what is dynamic, and what is manual. Would you be willing to post instructions for a layman? Many thanks! Jason
Does this accomplish the same thing, from Analytics help? "The links to my site already contain my own campaign tracking variables. Can I use these variables instead of Google Analytics'?" http://www.google.com/support/googleanalytics/bin/answer.py?answer=55577&topic=11098 If you've already tagged your online links with your own tracking variables, you can map these existing variables to Google Analytics' campaign tracking variables. Your tagged links will need to contain at least 3 variables. These will map to: 1. utm_source: the source of your campaign (Google, Overture) 2. utm_medium: the medium of your campaign (cpc, banner, email) 3. utm_campaign: the name of your campaign (spring sale) For the purpose of these instructions, we will assume that your site contains the following URL: www.example.com/index.html?camp=GADS&kwd=memory&version=47&type=ppc&adver=google Step 1. Match your variables with Google Analytics' variables. Create a table following the format below: User Variable1 Google Analytics Variable Filter Field2 camp =>> _setCampNameKey() =>> Campaign Name adver =>> _setCampSourceKey() =>> Campaign Source type =>> _setCampMediumKey() =>> Campaign Medium kwd =>> _setCampTermKey() =>> Campaign Term version =>> _setCampContentKey() =>> Campaign Content 1. from the example URL above; replace the values in this table with your own custom campaign variables Step 2. Modify the tracking code on each of your pages You'll need to add the following lines (in bold) to the tracking code on your pages. The additions will be identical for each page, so you can use an include or template system to add this code. The code below is based on the example URL above: <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try{ var pageTracker = _gat._getTracker("UA-xxxxxx-x"); pageTracker._setCampNameKey("camp"); // name pageTracker._setCampMediumKey("type"); // medium pageTracker._setCampSourceKey("adver"); // source pageTracker._setCampTermKey("kwd"); // term/keyword pageTracker._setCampContentKey("version"); // content pageTracker._trackPageview(); } catch(err) {} </script> Thanks Jason
A couple of UPDATES on this post. * The exclude parameter setting in GA is limited to 255 characters - read ShoreTel`s post here on how to remove more parameter http://tinyurl.com/thank-2-ShoreTel-parameter-fix* The " source" parameter is now a reserved word because Google are now using source=web & source=iglk in SERP, so I have change to " ecruos", its source backwards :) * The {keyword} in Adwords is now the SearchWord not BidWord, I am not sure when this changed, but I have only just noticed it. Note:[exact] words will be uneffected, this only impacts "phrase" & broad. * I forgot to add " creative" parameter for the Ad Title in the above. * I am still waiting for my YSM IndexTool account activation, so I can not confirm the above tags works as secondary analyics package (Yahoo IndexTools install guide recommends using "kw", "creative" and " _s_ref" but these can be custom mapped http://tinyurl.com/Yahoo-IndexTools-Install-pg35) *Just to clarify: the MSN & Yahoo tags will work on an advert level e.g It is not necessary to use {param1} in MSN just enter the destination url as www.yourdomain.com/landingpage.htm?utm_source=msn&utm_medium=cpc&utm_term={keyword}&utm_content=m{AdID}&utm_campaign=msn-campaign" or on Yahoo " www.yourdomain.com/landingpage.htm?utm_source=yahoo&utm_medium=cpc&utm_term={YSMKEY}&utm_content=y{YSMADID}&utm_campaign={YSMCAMPGID}" * It is a good idea to add filters to change the utm_campaign={YSMCAMPGID} number to a name; as this help with identification. Simularly, adding &utm_content=y{YSMADID}| My-Ad-Title or &utm_content=m{AdID}| My-Ad-Title helps with advert indentificaton and a/b testing advert conversion rates. Also, I can`t emphasise how useful it is to be able to segment by campaign and keywords for MSN rather than view all keywords, so where possible manually enter something the campaign names for your msn in "&utm_campaign= msn-campaign". * Tip: I am using notetab.com to replace "&" with "^p" when decifering url strings. ----- Jason Dynamic = "one tag fits all" e.g in Adwords {keyword} will return the SearchWord you are advertising on and the same tag can be used for all keywords destinaton urls. Manual = manually tag every single keyword or advert url. As for the writing a layman guide, not sure I have time! Once I get Blog up and running I will re-visit this & write up. Here are two links that provide examples of the Adwords dynamic parameter
http://adwords.google.com/support/bin/answer.py?hl=en&answer=74996
http://adwords.google.com/support/bin/answer.py?hl=en&answer=75003
--------- Jason second comments The use of parameter mapping is a good suggestion. However only Yahoo provide parameters to map to by default. e.g. pageTracker._setCampTermKey(" OVKEY"); // for BidWord - (or setCampTermKey("OVRAW") for SearchWord) pageTracker._setCampContentKey("OVADID"); // content
Also source, medium & campaign are not present in Yahoo autotags. So you would need to write an onpage script that said "if landing page contains OVADID" then medium = "cpc" & source = "yahoo". But even the campaign name would still be unknown. You would need to manually tag "campaign=my-yahoo-campaign-name" or manually add "adgrpid={YSMCAMPGID}".
pageTracker._setCampNameKey("campaign"); // campaign name (or you could use use setCampNameKey("adgrpid") pageTracker._setCampMediumKey("type"); // medium pageTracker._setCampSourceKey("ecruos"); // source
Secondly, unlike Yahoo. MSN does not have an autotag and the mapping will be different for setCampTermKey & setCampContentKey e.g.
pageTracker._setCampTermKey("kw"); // BidWord - "sw" for SearchWord pageTracker._setCampContentKey("adid"); // content
Thirdly, in Adwords using a destination url of www.yourdomain.com/landingpage.htm/?campaign=my-adwords-campaign and an onpage tag of pageTracker._setCampNameKey("campaign"); would be the same as www.yourdomain.com/landingpage.htm/?utm_campaign=my-adwords-campaign so the adworsds matching bug mentionded above would re-surface.
I think in terms of time and effort adding the tags to advert or keyword urls in Yahoo & MSN, I think this is quicker thank writing a script for the onpage detection. Also, MSN is due to roll-out a new version of its desktop tool on 14th May soon so this should make tagging in msn easier: https://maf.adcenter.microsoft.com/desktop/Microsoft.adCenter.Editor.application
Cheers
Phil.
---------- Google Adwords http://www.yourdomain.com/landingpage.htm? ecruos=google kw= sw={ifcontent:content-keyword}{ifsearch:{keyword}} distribution={ifsearch:search}{ifcontent:content} creative= site={placement} campgid= adgrpid= adid=g{creative} kwid= campaign=YOUR_CAMPAIGN_NAME_HERE match=YOUR_MATCHTYPE_HERE
?ecruos=google&kw=&sw={ifcontent:content-keyword}{ifsearch:{keyword}}&distribution={ifsearch:search}{ifcontent:content}&creative=&site={placement}&campgid=&adgrpid=&adid=g{creative}&kwid=&campaign=YOUR_CAMPAIGN_NAME_HERE&match=YOUR_MATCHTYPE_HERE
------------ Yahoo: http://www.yourdomain.com/landingpage.htm? ecruos=yahoo kw={YSMKEY} sw={YSMRAW} match={YSMMTC:standard:advanced:content} distribution={YSMMTC:search:search:content} creative= site= campgid={YSMCAMPGID} adgrpid={YSMADGRPID} adid=y{YSMADID} kwid= utm_ecruos=yahoo utm_medium=cpc utm_term={YSMKEY} utm_content=y{YSMADID} utm_campaign=YOUR_CAMPAIGN_NAME_HERE campaign=YOUR_CAMPAIGN_NAME_HERE
?ecruos=yahoo&kw={YSMKEY}&sw={YSMRAW}&match={YSMMTC:standard:advanced:content}&distribution={YSMMTC:search:search:content}&creative=&site=&campgid={YSMCAMPGID}&adgrpid={YSMADGRPID}&adid=y{YSMADID}&kwid=&utm_ecruos=yahoo&utm_medium=cpc&utm_term={YSMKEY}&utm_content=y{YSMADID}&utm_campaign=YOUR_CAMPAIGN_NAME_HERE&campaign=YOUR_CAMPAIGN_NAME_HERE
------------ MSN http://www.yourdomain.com/landingpage.htm? ecruos=msn kw={keyword} sw={QueryString} match={MatchType} distribution=search creative= site= campgid= adgrpid= adid=m{AdID} kwid= utm_ecruos=msn utm_medium=cpc utm_term={keyword} utm_content=m{AdID} utm_campaign=YOUR_CAMPAIGN_NAME_HERE campaign=YOUR_CAMPAIGN_NAME_HERE
?ecruos=msn&kw={keyword}&sw={QueryString}&match={MatchType}&distribution=search&creative=&site=&campgid=&adgrpid=&adid=m{AdID}&kwid=&utm_ecruos=msn&utm_medium=cpc&utm_term={keyword}&utm_content=m{AdID}&utm_campaign=YOUR_CAMPAIGN_NAME_HERE&campaign=YOUR_CAMPAIGN_NAME_HERE
One more point. The idiot that wrote that wrote the Atlas JavaScript tags, decided to make any instance of 'google' or 'miva' in the referring source as from google or miva. I am using a form of ppc arbitrage, so as a safegurad I have changed:
ecruos=google ecruos=yahoo ecruos=msn
to...
ecruos=adwords ecruos=ysm ecruos=adcent ("er" remove as it is spelt differently in UK)
I'm not sure I follow all this. Above, you say "*Just to clarify: the MSN & Yahoo tags will work on an advert level e.g It is not necessary to use {param1} in MSN just enter the destination url as www.yourdomain.com/landingpage.htm?utm_source=msn&utm_medium=cpc&utm_term={keyword}&utm_content=m{AdID}&utm_campaign=msn-campaign" or on Yahoo "www.yourdomain.com/landingpage.htm?utm_source=yahoo&utm_medium=cpc&utm_term={YSMKEY}&utm_content=y{YSMADID}&utm_campaign={YSMCAMPGID}" Does that mean I can do just that and have my tracking, or do I have to do all this other stuff in the posts as well?
John, yes just add the tags to Yahoo & MSN. For MSN you need to add this to the Advert destination url, Yahoo I think allows both KW and Advert level tagging.
Phil.
Hello Phil, Very interesting posts! I've finally implemented dynamic parameters for all the search engines. Only if I would have found this post beforehand! This would have saved me lots of time. I'm willing to change campaign and Ad IDs to more meaningful data, but I'm not very comfortable with how filters work. Could you explain a little more "It is a good idea to add filters to change the utm_campaign={YSMCAMPGID} number to a name". I tried to look for other resources on the web but could not find anything. How would you achieve that? Thanks, Antoine
MSN has added support for a parameter clickID for auditing (e.g if you use clickforensics.com). ClickFraud on MSN search network is still very low, but if you use an auditing service it worth enabling this feature. msclkid={msclkid} http://community.microsoftadvertising.com/blogs/advertiser/archive/2009/06/17/introducing-adcenter-clickids.aspxIt is probably best to set Advert destination url to {param1} and then set KW destination url to the landing page plus ?msclkid={msclkid} or &msclkid={msclkid} The generic tag looks like this: ?utm_source=msn&utm_medium= cpc&utm_term={keyword}&utm_content=YOUR_TITLE_HERE&utm_campaign=YOUR_CAMPAIGN_NAME_HERE&msclkid={msclkid}
There is an Advanced URL change feature in MSN desktop that can partially automate this task.
It would be nice if MSN added a tick box to auto enable this feature, but looks like they are just letting advertisers do this manually.
Subscribe
|
|
|