|
|
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.
Replies 1 - 33 of 33
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.
When using GA + ClickForensic/YahooIndextools at the same time = both a manual tagging & GCLID need to be present. However, GA specialist said previously...
If the advertiser tags his links manually AND 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 & doesn't know how to apply it to the relevant Adwords Campaign.When I spoke to a GA specialist at eMetrics he added...
There is a work-around: enable customised campaign tracking url & then manually tag urls with the new parameters. The result is that GA import engine does not get confused, as there are no utm* tags present in the url.So, adding these to the global footer on page tag:pageTracker._setCampSourceKey( "my_source"); // source pageTracker._setCampMediumKey("my_medium"); // medium pageTracker._setCampNameKey("my_campaign"); // campaign pageTracker._setCampTermKey("my_term"); // keyword pageTracker._setCampContentKey("my_content"); // content adTitle pageTracker._setCampNOKey("my_nooveride"); // cookie overide From: http://code.google.com/apis/analytics/docs/gaJS/gaJSApiCampaignTracking.html
Then manually change ppc destination urls to: http://www.mydomain.com/landingpage.htm/?my_source=google&my_medium=cpc&my_campaign=ENTER_MY_CAMPAIGN_HERE&my_term={ifcontent:ContentKeyword}{ifsearch:{keyword}}&my_content=ENTER_MY_CONTENT_HERE
I have not tested the above, but interested to know if this works!
Cheers
Phil.
Both ClickForensic/YahooIndextools allow for url parameters to be customized within their import settings, so the my_source|my_medium|my_term can be set to anything.
Yahoo ppc have update their auto-tagging to include OVCAMPGID, OVADGRPID by default on 13th January 2010. So... Remember to add OVCAMPGID, OVADGRPID (in CAPITALS) exclude parameters in order to keep your landing URI`s page tidy in GA! OVRAW, OVKEY, OVMTC, OVADID, OVKWID, OVCAMPGID, OVADGRPID http://www.advertiser.com/landingpage.htm? OVRAW=blue%20widget (searchword) OVKEY=widgets (bidword) OVMTC=standard (matchtype) OVADID=9166058030 OVKWID=76177891530 OVCAMPGID=412947530 OVADGRPID=6084417411I welcome this change, but I am annoyed I was not warned about it. Also it would be nice if they added a dynamic paramter for {CampaignName}, {AdGroupName} and {AdTitle} and fix the annoying feature that disabled the ysmwa clickID every 14 days for accounts if no ysm conversions have been triggered. http://www.ysmblog.com/blog/2010/01/14/new-search-improvements/ (no mention of this URL Tracking change in announcement) http://video.yahoo.com/watch/6773996/17603801 (yahoo new features video 14th January) http://www.ysearchblog.com/http://twitter.com/YahooAdBuzz
I found an interesting was to use the Google Adwords parameter, I have called this... "gparam", results are shown in the content drilldown report. gparam_opt1=/{ifsearch:search/ {keyword}/{creative}}{ifcontent:content/{placement}/{creative}}
Result would be... /search/bidword/123456 /content/publisher.com/123456
Or you can display this in a different folder structure here:
gparam_opt2=/{ifsearch:search/{creative}/{keyword}}{ifcontent:content/{creative}/{placement}}
Result would be... /search/123456/bidword /content/123456/publisher.com
I think I have a final resolution for this post (yippie!), plus a few extras thrown in for good luck... I have NOT TESTED this yet... but it should work.
xParam1 & xParam2 are extra features for the data hungry ;) SiteSearch category:sw (tick the box that says remove search query from url)
I suggest using the Category SiteSearch to store
SearchWords, beacuse it is urlDecoded so contains no HTML gunk, and leave the User-defined field free, but it will inflate the onsite searches count. If you are using the category search already or the % of users using sitesearch is important remember to add "sw" to exclude parameters. GA exclude parameters settings:
gparam1, gparam2, yparam1, yparam2, mparam1, mparam2, distribution, network, site, OVRAW, OVKEY, OVMTC, OVADID, OVKWID, OVCAMPGID, OVADGRPID, ysmwa, msclkid, ("sw" is optional)
AD_TITLE & CAMPAIGN_NAME need to be filled in manally as no
network supports a dynamic varible for these, although Yahoo and MSN
support ID`s for these (e.g. my_content=AD_TITLE&my_ campaign=CAMPAIGN_NAME).
langing page global footer needs to include: pageTracker._setCampSourceKey("my_source"); // source pageTracker._setCampMediumKey("my_medium"); // medium pageTracker._setCampNameKey("my_campaign"); // campaign pageTracker._setCampTermKey("my_term"); // keyword pageTracker._setCampContentKey("my_content"); // content adTitle
------Google PPC http://www.yourdomain.com/landingpage.htm? my_source=google my_medium=cpc my_term={keyword} my_content=AD_TITLE my_campaign=CAMPAIGN_NAME distribution={ifsearch:search}{ifcontent:content} site={placement} gparam1=/{ifsearch:search}{ifcontent:content}/{creative} gparam2=/distribution={ifsearch:search/{keyword}/{creative}}{ifcontent:content/{placement}/adID={creative}} gclid=xxx [automatically added]
------Yahoo PPC http://www.yourdomain.com/landingpage.htm? my_source=yahoo my_medium=cpc my_term={YSMKEY} my_content=AD_TITLE my_campaign=CAMPAIGN_NAME distribution={YSMMTC:search:search:content} match={YSMMTC:standard:advanced:content} sw={YSMRAW} yparam1=/{YSMMTC:search:search:content}/{YSMADID} yparam2=/distribution={YSMMTC:search:search:content}/match={YSMMTC:e:b:c}/campaignID={YSMCAMPGID}/adgrpID={YSMADGRPID}/adID={YSMADID}/kwID={YSMKWID} ysmwa=xxx [automatically added]
------MSN PPC http://www.yourdomain.com/landingpage.htm? my_source=msn my_medium=cpc my_term={keyword} my_content=AD_TITLE my_campaign=CAMPAIGN_NAME match={MatchType} sw={QueryString} mparam1=/search/{AdId} mparam2=/distribution=search/match={MatchType}/adgrpID={OrderItemId}/adID={AdId} msclkid={msclkid} [manually added]
**** OPTIONAL SPECIAL FEATURES FOR THE DATA HUNGRY ***
* There dynamic ID & values from Adwords, Adcenter & YSM that are not stored in GA. * The more data values stored in GA the better; as more can be mined from this data (assuming it is useful data). * With this in mind I have invented the xParam (gPram, yParam, mParam) to store these extra values.
*** gParam
distribution={ifsearch:search}{ifcontent:content}
site={placement}
adID={creative}
kw={keyword}
*** yParam
distribution={YSMMTC:search:search:content}
match={YSMMTC:e:b:c}
campaignID={YSMCAMPGID}
adgrpID={YSMADGRPID}
adID={YSMADID}
kwID={YSMKWID}
*** mParam
distribution=search
match={MatchType}
adgrpID={OrderItemId}
adID={AdId}
--- xParam1 (simular to s_kwcid= used by Omniture)
gParam1=/{ifsearch:search}{ifcontent:content}/{creative} Example: /search/123456 or /content/123456
yParam1=/{YSMMTC:search:search:content}/{YSMADID} Example: /search/123456 or /content/123456
mParam1=/search/{AdId} Example: /search/123456
--- xParam2 gparam=/distribution={ifsearch:search/{keyword}/{creative}}{ifcontent:content/{placement}/adID={creative}}
Example: /distribution=search/bidword/adID=123456
Example: /distribution=content/publisher.com/adID=123456
yParam=/distribution={YSMMTC:search:search:content}/match={YSMMTC:e:b:c}/campaignID={YSMCAMPGID}/adgrpID={YSMADGRPID}/adID={YSMADID}/kwID={YSMKWID} Example: /distribution=s/match=e/campaignID=123/adgrpID=123/adID=123/kwID=123
mParam=/distribution=search/match={MatchType}/adgrpID={OrderItemId}/adID={AdId} Example: /distribution=search/match=e/adgrpID=123/adID=123
Let me know what you think... and confirm it works!
Thanks
Phil.
Google Adwords: ?my_source=google&my_medium=cpc&my_term={keyword}&my_content=AD_TITLE&my_campaign=CAMPAIGN_NAME&distribution={ifsearch:search}{ifcontent:content}&site={placement}&gparam1=/{ifsearch:search}{ifcontent:content}/{creative}&gparam2=/distribution={ifsearch:search/{keyword}/{creative}}{ifcontent:content/{placement}/adID={creative}}
YahooSearchMarketing: ?my_source=yahoo&my_medium=cpc&my_term={YSMKEY}&my_content=AD_TITLE&my_campaign=CAMPAIGN_NAME&distribution={YSMMTC:search:search:content}&match={YSMMTC:standard:advanced:content}&sw={YSMRAW}&yparam1=/{YSMMTC:search:search:content}/{YSMADID}&yparam2=/distribution={YSMMTC:search:search:content}/match={YSMMTC:e:b:c}/campaignID={YSMCAMPGID}/adgrpID={YSMADGRPID}/adID={YSMADID}/kwID={YSMKWID}
MSN Adcenter: ?my_source=msn&my_medium=cpc&my_term={keyword}&my_content=AD_TITLE&my_campaign=CAMPAIGN_NAME&match={MatchType}&sw={QueryString}&mparam1=/search/{AdId}&mparam2=/distribution=search/match={MatchType}/adgrpID={OrderItemId}/adID={AdId}&msclkid={msclkid}
Footer Notes:
* Google Adwords is the ONLY provider NOT to support
{SearchWord} or {MatchType} dynamic parameter - Google your getting
behind Bing & Yahoo - this is a fundemental feature - ADD it now!
sw={GoogleSearchWord}
match={exact|phrase|broad|content|placement}
* No ppc network currently supports {position} or {RightHandSide|LeftHandSide} parameter.
Google appears to have added gglAdGrp, gglCreat & position values to PPC referral url`s on google.com & google.co.uk http://www.google.com/urlq=search word url=/aclk sa=l ai=gobble-degook num=5 ggladgrp=5638343534277209496 gglcreat=16688867964745241834q= http://www.ppc-domain.com/destination-url.htmsig=gobble-degook rct=j ei=gobble-degook usg=gobble-degook If you are storing the referal in in used-defined, you test this by searching for ggladgrp|gglcreat)=.+ or (ggladgrp|gglcreat|num)=.+ Note:num= position for ppc is only visible in on right-hand-side advert, it is omitted on top-left-hand side adverts.
I am in the process of compiling this posts, just posting some ROUGH notes...
Recipe for ppc Dynamic tagging parameters------------------------------ ----------------------------------------
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.
{Dynamic} = One tag fits all - a database element which changes depending on the field value e.g in Adwords {keyword} will return the BidWord you are advertising on and the same tag can be used for all keywords destination urls.
Manual = manually tag every single keyword or advert url.
-------------------------------- Google dynamic variables: {keyword} {creative} {placement} {ifsearch:search} {ifcontent:content} http://adwords.google.com/support/aw/bin/answer.py?answer=14816 http://adwords.google.com/support/aw/bin/answer.py?answer=74996 http://www.google.com/intl/en/adwordseditor/index.html
Google specials combinations {ifcontent:contentsite={placement}} {ifsearch:search/{keyword}|{creative}} {ifcontent:content/{placement}|{creative}}
-------------------------------- Yahoo dynamic variables: {OVRAW} {OVKEY} {OVMTC} {OVADID} {OVKWID} {OVCAMPGID} {OVADGRPID} {OVNDID} * YSM added on 10th Jan 2010 http://help.yahoo.com/l/us/yahoo/ysm/sps/screenref/16897.html#1 http://help.yahoo.com/l/us/yahoo/ysm/sps/screenref/2847584.html#7 http://www.google.com/support/analytics/bin/answer.py?answer=55467 http://tinyurl.com/ysm-tracking-url-tags (pdf file deleted)
Must be CAPITALS To enable ysmwa clickID, account must be spending over £1500 It is not necessary to enable urls tagging feature in YSM once these tags have are added.
IndexTools installation guide http://tinyurl.com/Yahoo-IndexTools-Install-pg35
-------------------------------- MSN dynamic variables: {keyword} {QueryString} {MatchType} e|p|b|c exact|phrase|braod|content {OrderItemId} {AdId} {msclkid} {param1} dynamic advert destination url #{param2} alternate Adtext - not used #{param3} alternate Adtext - not used http://advertising.microsoft.com/learning-center/best-practices/dynamic-text-types http://maf.adcenter.microsoft.com/desktop/setup/en/setup.exe (adcenter Desktop contains an Advanced change URL feature) http://advertising.microsoft.com/learning-center/downloads/adcenter-desktop-tips-tricks-tutorial
* Save Time by adding all in one go. * Emphasise usefulness of seeing "Campaign" field in Yahoo & MSN * Best to create include profile for Google/Yahoo/MSN ppc only profiles - more accurate than advanced segment moving forward * Assume SiteSearch category:ga_sw not being used in ppc only profiles * Store Bidword, Campaign name, SearchWord, Match type + other values provided by the SE`s. * Clickforensics / Urchin / YWA - url parameters mapping ga_source|ga_medium|ga_term * 1024 chacter limit destination urls * ANSCI characters are auto-encoded by the SE`s - white spaces are fine. * The “source”, "campaign" “kw” parameters - use ga_source * "#" is better instead of "?" - remember to enable setAllowAnchor() Where "?" is present in the url already changed ?ga_source to &ga_source. Where "#" is present in the url already changed #ga_source to &ga_source. * Tidy up visual urls by placing parameters in virualpageview or serverside URI injection e.g. .trackpageview(document.location.pathname + document.location.search + document.location.hash) * Rel=no referral HTML5 http://www.lunametrics.com/blog/2010/01/15/html5-analytics/ * 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, so best to either avoid uisng utm_* parameters, use utm_id not used hide behind 301 redirects (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! http://adwords.google.com/support/aw/bin/answer.py?answer=6313 * CHECK - SpyFu & Adgooroo might be a way to block these tools from spidering the sites using robot.txt
JavaScript URI injection method: http://www.e-nor.com/blog/index.php/web-analytics/tracking-traffic-from-press-releases-in-google-analytics/ JavaScript URI script: http://www.e-nor.com/blog/images/09/code.txt
Tip: When using 301 redirects avoid losing the tracking parameter, here is an .htaccess example DONT USE - redirect 301 /OLD-Landing-Page.htm /NEW-Landing-Page.htm [NC] DO USE - redirectMatch 301 ^/NEW-Landing-Page\.htm(.*)$ ^/NEW-Landing-Page\.htm$l.*$ [NC]
Tip: use notetab.com to replace "&" with "^p" when deciphering url strings and "=" with "^t", then pasting into Excel.
-------- ID or Name
1) Preference (not recommended) “utm_content” change to “adID” “utm_campaign” change to “campaign”
2) Preference2 &utm_content=y{OVADID}|My-Ad-Title &utm_content=m{AdID}|My-Ad-Title
3) Lookup tables/filters on ID`s...
utm_campaign=g[MANUAL CAMPAIGN ID] utm_content=g{creative} utm_campaign=y{OVCAMPGID} utm_content=y{OVADID} utm_campaign=m{OrderItemID} - check is this KW id? utm_content=m{AdID}
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{OVADID} MSN :utm_content=m{AdID}
1. Inserting “ID” Parameters into URLs:
"Initially, I gave instructions for placing ad group & campaign ID parameters into the utm_content= & utm_campaign= sections of the URL. This is not very helpful, unless you are mapping to an offline keyword database. These are literally ID numbers given to each campaign & adgroup use by Yahoo & MSN. Solution: Insert the actual name of your ad groups & campaigns into these sections of the URL. This will allow you to filter your data by ad group, by campaign, etc. within Analytics." john @ ppchero .com
http://www.ppchero.com/the-secret-of-tracking-yahoo-keyword-data-in-google-analytics/ (old) http://www.ppchero.com/url-tagging-tracking-ppc-campaigns-google-analytics/ (new)
I would also recommend changing... Yahoo & MSN ID`s from:
utm_campaign=m{OVCAMPGID} utm_content=y{OVADID}
utm_campaign=m{OrderItemID} utm_content=m{AdID}
To...
utm_campaign=YOUR_CAMPAIGN_NAME_HERE utm_content=YOUR_TITLE_HERE
utm_campaign=YOUR_CAMPAIGN_NAME_HERE utm_content=YOUR_TITLE_HERE
Note: GA import engine removes parameters & goals first, then applies filters.
---------------------------
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
GA specialist at eMetrics added...
There is a work-around: enable customised campaign tracking url & then manually tag urls with the new parameters. The result is that GA import engine does not get confused, as there are no utm* tags present in the url.
So, adding these to the global footer on page tag:
pageTracker._setCampSourceKey("ga_source"); // source pageTracker._setCampMediumKey("ga_medium"); // medium pageTracker._setCampNameKey("ga_campaign"); // campaign pageTracker._setCampTermKey("ga_term"); // keyword pageTracker._setCampContentKey("ga_content"); // content adTitle pageTracker._setCampNOKey("ga_nooveride"); // cookie overide From: http://code.google.com/apis/analytics/docs/gaJS/gaJSApiCampaignTracking.html
Then manually change ppc destination urls to: http://www.mydomain.com/landingpage.htm/?ga_source=google&ga_medium=cpc&ga_campaign=ENTER_ga_CAMPAIGN_HERE&ga_term={ifcontent:ContentKeyword}{ifsearch:{keyword}}&ga_content=ENTE R_ga_CONTENT_HERE
Cookie extraction method...
1) You don't need to pass in the actual query string as a parameter since it is already available to GA.
__utmz (utmctr=search-word) into trackPageview e.g
function googleCookieReferrer() { var feed=readCookie("__utmz"); feed=feed.split("|"); feed=feed[0].split("="); return feed[1]; } http://padicode.com/blog/behavioral-targeting/behavioral-targeting-actions/
trackPageview(/landingpage.htm/?source=GOOGLE&kw=tracking_test_20090219_tagged&match=MY_MATCHTYPE&distribution=search&site=&adID=2599556614&campaign=MY_CAMPAIGN&gclid=CPnEuv2m8p gCFQqT3wodllxm1g&sw=SEARCH-WORD-HERE http://padicode.com/blog/behavioral-targeting/behavioral-targeting-actions/
2) setCamp mapped parameters
"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
pageTracker._setCampNameKey("camp"); // name pageTracker._setCampMediumKey("type"); // medium pageTracker._setCampSourceKey("adver"); // source pageTracker._setCampTermKey("kwd"); // term/keyword pageTracker._setCampContentKey("version"); // content
Yahoo provide parameters to map to by default. e.g.
pageTracker._setCampTermKey("OVKEY"); // for BidWord - (or setCampTermKey("OVRAW") for SearchWord) pageTracker._setCampContentKey("OVADID"); // content pageTracker._setCampNameKey("OVCAMPGID"); // campaign name (or you could use use setCampNameKey("OVADID") pageTracker._setCampMediumKey("ga_medium"); // medium - missing pageTracker._setCampSourceKey("ga_source"); // source - missing
source, medium are not present - thus URI injection script must be used - landing page contains OVADID - change medium=cpc then source=yahoo.
Disadvantages: * campaign name would still be unknown. * advert name would still be unknown. * only works for Yahoo, not MSN. * probably lost after Yahoo changes to bing in Q1 2011. * development time to add to site take longer that adding to campaign
Could not be used for Google manaul tags, due to Utm_campaign /gclid overide. www.yourdomain.com/landingpage.htm/?campaign=my-adwords-campaign pageTracker._setCampNameKey("campaign");
www.yourdomain.com/landingpage.htm/?utm_campaign=my-adwords-campaign?gclid=123 // default pageTracker._setCampNameKey("utm_campaign");
-----------------------
xParam1 & xParam2 are extra features for the data hungry ;)
SiteSearch category:ga_sw (tick the box that says remove search query from url)
I suggest using the Category SiteSearch to store SearchWords, beacuse it is urlDecoded so contains no HTML gunk, and leave the User-defined field free - it will inflate the onsite searches count, but this is not a big deal.
GA exclude parameters settings: gparam1, gparam2, yparam1, yparam2, mparam1, mparam2, distribution, network, site, OVRAW, OVKEY, OVMTC, OVADID, OVKWID, OVCAMPGID, OVADGRPID, OVNDID, ysmwa, msclkid, ("sw" is optional)
Tip: "OVMTC" not "ovmtc" within exclude parameter setting http://www.google.com/support/forum/p/Google+Analytics/thread?tid=6a060e9477607c8f&fid=6a060e9477607c8f0004706d6559ed09
AD_TITLE & CAMPAIGN_NAME need to be filled in manally as no network supports a dynamic varible for these, although Yahoo and MSN support ID`s for these (e.g. ga_content=AD_TITLE&ga_campaign=CAMPAIGN_NAME).
langing page global footer needs to include: pageTracker._setCampSourceKey("ga_source"); // source pageTracker._setCampMediumKey("ga_medium"); // medium pageTracker._setCampNameKey("ga_campaign"); // campaign pageTracker._setCampTermKey("ga_term"); // keyword pageTracker._setCampContentKey("ga_content"); // content adTitle pageTracker._setCampNOKey("ga_nooveride"); // cookie overide attibution
------Google PPC http://www.yourdomain.com/landingpage.htm? ga_source=google ga_medium=cpc ga_term={keyword} ga_content=AD_TITLE ga_campaign=CAMPAIGN_NAME ga_distribution={ifsearch:search}{ifcontent:content} ga_site={placement} gparam1=/{ifsearch:search}{ifcontent:content}/{creative} gparam2=/distribution={ifsearch:search/{keyword}/{creative}}{ifcontent:content/{placement}/adID={creative}} gclid=xxx [automatically added]
------Yahoo PPC http://www.yourdomain.com/landingpage.htm? ga_source=yahoo ga_medium=cpc ga_term={OVKEY} ga_content=AD_TITLE ga_campaign=CAMPAIGN_NAME ga_distribution={OVMTC:search:search:content} ga_match={OVMTC:standard:advanced:content} ga_sw={OVRAW} yparam1=/{OVMTC:search:search:content}/{OVADID} yparam2=/distribution={OVMTC:search:search:content}/ga_match={OVMTC:e:b:c}/campaignID={OVCAMPGID}/adgrpID={OVADGRPID}/adID={OVADID}/kwID={OVKWID} ysmwa=xxx [automatically added]
------MSN PPC http://www.yourdomain.com/landingpage.htm? ga_source=msn ga_medium=cpc ga_term={keyword} ga_content=AD_TITLE ga_campaign=CAMPAIGN_NAME ga_match={MatchType} ga_sw={QueryString} mparam1=/search/{AdId} mparam2=/distribution=search/ga_match={MatchType}/adgrpID={OrderItemId}/adID={AdId} msclkid={msclkid} [manually added]
**** OPTIONAL SPECIAL FEATURES FOR THE DATA HUNGRY ***
* There dynamic ID & values from Adwords, Adcenter & YSM that are not stored in GA. * The more data values stored in GA the better; as more can be mined from this data (assuming it is useful data). * With this in mind I have invented the xParam (gPram, yParam, mParam) to store these extra values.
*** gParam distribution={ifsearch:search}{ifcontent:content} site={placement} adID={creative} kw={keyword}
*** yParam distribution={OVMTC:search:search:content} match={OVMTC:e:b:c} campaignID={OVCAMPGID} adgrpID={OVADGRPID} adID={OVADID} kwID={OVKWID}
*** mParam distribution=search match={MatchType} adgrpID={OrderItemId} adID={AdId}
--- xParam1 (simular to s_kwcid= used by Omniture)
gParam1=/{ifsearch:search}{ifcontent:content}/{creative} Example=/search/123456 or /content/123456
yParam1=/{OVMTC:search:search:content}/{OVADID} Example=/search/123456 or /content/123456
mParam1=/search/{AdId} Example=/search/123456
--- xParam2 gparam=/distribution={ifsearch:search/{keyword}/{creative}}{ifcontent:content/{placement}/adID={creative}} Example=/distribution=search/bidword/adID=123456 Example=/distribution=content/publisher.com/adID=123456
yParam=/distribution={OVMTC:search:search:content}/ga_match={OVMTC:e:b:c}/campaignID={OVCAMPGID}/adgrpID={OVADGRPID}/adID={OVADID}/kwID={OVKWID} Example=/distribution=s/match=e/campaignID=123/adgrpID=123/adID=123/kwID=123
mParam=/distribution=search/ga_match={MatchType}/adgrpID={OrderItemId}/adID={AdId} Example=/distribution=search/match=e/adgrpID=123/adID=123
Let me know what you think... and confirm it works!
Thanks
Phil.
Google Adwords: ?ga_source=google&ga_medium=cpc&ga_term={keyword}&ga_content=AD_TITLE&ga_campaign=CAMPAIGN_NAME&ga_distribution={ifsearch:search}{ifcontent:content}&ga_site={placement}&gparam1=/{ifsearch:search}{ifcontent:content}/{creative}&gparam2=/distribution={ifsearch:search/{keyword}/{creative}}{ifcontent:content/{placement}/adID={creative}}
YahooSearchMarketing: ?ga_source=yahoo&ga_medium=cpc&ga_term={OVKEY}&ga_content=AD_TITLE&ga_campaign=CAMPAIGN_NAME&ga_distribution={OVMTC:search:search:content}&ga_match={OVMTC:standard:advanced:content}&ga_sw={OVRAW}&yparam1=/{OVMTC:search:search:content}/{OVADID}&yparam2=/distribution={OVMTC:search:search:content}/ga_match={OVMTC:e:b:c}/campaignID={OVCAMPGID}/adgrpID={OVADGRPID}/adID={OVADID}/kwID={OVKWID}
MSN Adcenter: ?ga_source=msn&ga_medium=cpc&ga_term={keyword}&ga_content=AD_TITLE&ga_campaign=CAMPAIGN_NAME&ga_match={MatchType}&ga_sw={QueryString}&mparam1=/search/{AdId}&mparam2=/distribution=search/ga_match={MatchType}/adgrpID={OrderItemId}/adID={AdId}&msclkid={msclkid}
Tip: capture value xparam
1. send value of "xparam" to Campaign Content Request URI:[?&]xparam=([^&]+)& Campaign Content:$A1
2. remove adId from URI Request URI:(.+)[?&]xparam=([^&]+)&(.*) Request URI:$A1$A3
-------- Notes * Adwords is the ONLY provider NOT to support {SearchWord} or {MatchType} - this is a fundamental feature ga_sw={GoogleSearchWord} ga_match={exact|phrase|broad|content|placement} * MSN need to added a tick box to auto-enable tags & msclkid. * Miva, Looksmart, Ask.com ignored but they do support dynamic parameters. * Adwords QS & Min firstpage bid should be added to GA
"segkey" of "ad_slot" & "ad_slot_position". &segkey=1&segkey=ad_slot &segkey=1&segkey=ad_slot_position &segkey=1&segkey=ad_group
SearchWord filter on Referal [?#&](q|p|query|qs|qt|encquery|k|rdata|searchExpr|szukaj|terms|text|wd|search_for)([^&]+)&
gglAdGrp, gglCreat & position - PPC referrals on google.com & google.co.uk Note:num=position for ppc is only visible in on right-hand-side advert, it is omitted on top-left-hand side adverts. 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]
http://www.google.com/url q=search word url=/aclk sa=l ai=gobble-degook num=5 ggladgrp=5638343534277209496 gglcreat=16688867964745241834 q=http://www.ppc-domain.com/destination-url.htm sig=gobble-degook rct=j ei=gobble-degook usg=gobble-degook
If you are storing the referal in in used-defined, you test this by searching for ggladgrp|gglcreat)=.+ or (ggladgrp|gglcreat|num)=.+
Google Webmaster Tools exclude parameters (20 fields) http://searchengineland.com/google-lets-you-tell-them-which-url-parameters-to-ignore-25925 http://www.flickr.com/photos/23148333@N06/3927048854/
Yahoo Sitemaps exclude parameters (10 fields) http://help.yahoo.com/l/us/yahoo/search/siteexplorer/dynamic/ http://www.flickr.com/photos/rustybrick/1188618922/
YSM Example OVRAW=blue%20widget (searchword) OVKEY=widgets (bidword) OVMTC=standard (matchtype) OVADID=9166058030 OVKWID=76177891530 OVCAMPGID=412947530 OVADGRPID=6084417411
Subscribe
Tell us how we're doing:
Please answer a few questions about your experience to help us improve our Help Center.
|
|
|