Campaign Tracking Tips and Tricks for Omniture SiteCatalyst

The standard Omniture Campaign reporting offering, based solely on a query string/tracking code pair, is pretty solid: campaign reports and all the possible classifications, paid/natural search detection and reporting, and marketing channel reporting, managed from right there in the SiteCatalyst admin console. But over time we’ve found some tips and tricks that can maximize the value of your campaign tracking efforts.

All of these tips rely on granular but intuitive tracking codes, which your s_code grabs automatically out of a query string parameter. If you do not have a well-founded system for setting your tracking codes, then that should be your focus before expanding your campaign reports. Assuming you have your marketing efforts well identified, here are some ideas to implement:

Tip #1: Custom Campaign Click-throughs

Out of the box, SiteCatalyst has the “click-throughs” metric in any campaign report, which is essentially the same as “instances” in any other conversion report. The problem is that you cannot pull your campaign click-throughs as a metric into non-campaign reports- for instance, into a campaign landing pages report, or a breakdown for any other eVar that lasts between sessions or is set on a campaign landing page. A common need is to see Campaign Click-throughs in a conversion funnel:

For this reason, many of my past clients have implemented a “custom” campaign clickthrough event, which they then have full control over.

The code for this is simple. I recommend using the Append List plugin (s.apl) to ensure the custom event does not overwrite any other events on the page. In this example, event3 has been set aside and named “Custom Campaign Click-throughs”, and the append list plugin code is included in the plugins section:

s.campaign=s.getQueryParam('cid');
if(s.campaign){s.events=s.apl(s.events,'event3',',',1)};

Tip #2: Granular, Classified Tracking Codes with a Marketing Channel prefix

This isn’t so much a tip as it is a best practice. While generally the recommendation has always been to just have a granular tracking code and all information could be uploaded afterwards using SAINT classifications, you might save yourself a lot of headache by including a marketing channel identifier in each tracking code. SAINT is a wonderful tool, but classifications cannot be used to define the (fantastic) Marketing Channel reports. So instead of relying solely on classifications to specify that tracking code “2364FS” was an email campaign, turn the tracking code into “em-2364FS”. Not only does this make it easy to filter your tracking codes report, but you can also then set up a Marketing Channel processing rule that specifies that any tracking code that beings with “em” should go into the “Email Campaign” channel:

What? You haven’t set up your Marketing Channel reports? Well, get on it! It doesn’t take long, this blog post will wait.

Tip #3: Campaign Landing Page Pathing

I’ll admit, of all the tips listed here, this is my favorite. The standard pathing reports are wonderful but not a lot of help for marketers. Campaign Landing Page Pathing uses a pathing prop to show how campaigns play into paths that users take through the site. Any time the s.campaign variable is set, it is appended to the pageName and put into a prop that has pathing enabled (“Promo Landing Page: em1435”). For all other pages, just the pageName is set:

if(s.campaign){s.prop11=s.pageName+": "+s.campaign}
else{s.prop11=s.pageName};

As a freestanding page views report, I’ll admit the data is nearly useless- a jumble of campaigns and pageNames. BUT, once viewed in a pathing report, you can now see for each campaign and landing page, what next steps a user took. You might see paths that look like this:

Landing Page A: em12543 > Page B > Page C > Exit

You can now create Fall-Out reports based on particular campaigns. You could also see a next page flow report like this, showing the full range of possible paths users are taking from a campaign landing page:

Is your campaign taking your users somewhere you didn’t expect? Is that something you can capitalize on?

You can hit two birds with one stone and use the same logic to also set a “Campaign Landing Page” eVar, if you want to see how individual landing pages contribute to conversion (see the final code of this post for an example).

Please note, this kind of trick becomes less necessary in SiteCatalyst 15 because you can now segment your pathing reports based on campaigns, but it would still be useful if you wanted to compare campaigns to each other quickly without setting up a segment for each.

Tip #4: Campaign Cross-Visit Participation

Campaign Cross-visit Participation, also known as “campaign stacking”, has been well covered elsewhere on the web, so I won’t go into too much detail, but no campaign “tips” post would be complete without it. The Marketing Channel reports can show you First and Last Touch, but not much in between. Using the crossVisitParticipation plugin, you can see all of the different campaigns a certain user touched before accomplishing a certain event. Using this plugin for my tracking codes, I could do a report filter for one specific tracking code and see how other tracking codes contributed to it leading to a conversion:

The code looks like this:

s.eVar26=s.crossVisitParticipation(s.campaign,'s_cpmcvp','90','5','>','')

While this plugin is wonderful for campaigns, the possible uses of it are limitless- any time you want to see the “path” a user takes through the values of any of your variables, and how that path affects conversion.

Altogether now

If I were to use all of the above tips and standard best practices, my final code might look something like this:

/* Campaign tracking */
if (s.getQueryParam('cid'))
{s.campaign=s.getQueryParam('cid');                                             //capture campaign ID
s.events=s.apl(s.events,'event7',',',1)   ;                                    //custom Campaign Clickthroughs
s.eVar26=s.crossVisitParticipation(s.campaign,'s_cpmcvp','90','5','>','');     //campaign "stacking"
s.eVar24=s.prop11=s.pageName+" : "+s.campaign ;                                //campaign landing page eVar and pathing prop
s.eVar25=s.campaign=s.getValOnce(s.campaign, 'cid_cookie', 0);                  //campaign eVar with original allocation
}else{s.prop11=s.pageName}  ;                                                      //campaign landing page pathing

The final result is a set of marketing reports that paint a fuller picture of campaign behavior on your site.

Code for the Append List and GetValOnceplugin can be found in the Help section of SiteCatalyst, under Product Documentation > Implementation > Plugins. Contact your friendly implementation consultant if you need information about implementing Cross-Visit Participation.

Keystone Solutions Speakers Series Austin Event

The Keystone Solutions Speakers Series inaugural event PROVIDING RELEVANT EXPERIENCES WITHOUT STALKING in Austin, TX is right around the corner! It takes place September 26th, at the Renaissance Austin Hotel, and if you havent registered yet, Keith is here to show you what you could be missing out on! Be sure to check out John Lovett’s Social Media Metrics Secrets and Jeff Jarvis’ Public Parts.

Plus, as a friend of Keystone Solutions we offer a 50% OFF Coupon Code to take half off the already awesome event price: ksspeakerseries_austin11_kscustomer

Be sure to visit HERE to learn more about the event and register ASAP!!

We would like to thank our sponsors:

Resistance is a part of progress, embrace it!

You’ve seen them. The all mighty project list and timeline guaranteeing your success when followed to the letter. Right? Flash out of that make believe land and into reality!

For the past 6+ years I’ve been helping clients upgrade their web analytics solutions, with the majority containing implementation changes of some kind. While project management and scheduling are very important to the completion of any project, in practice, adhering to these steps can be difficult if not impossible. Projects like life rarely run in a linear line. Re-prioritization of tasks, resource allocation changes, and more can force unseen changes.  Additional delays can occur as leadership and team members seek better understanding to the overall benefits of the efforts. This plea for understanding normally comes across as resistance and push back.
 
This push back and resistance will often sound like:
 
“We know the tracking isn’t correct, but it is inflating our traffic numbers, and if we correct it our numbers are going to dip and ad sales is going to kill us.”

“Do we really need to label that differently?  It is already tagged.”

“It’s close enough, let’s call it good.”

“But the folder structure isn’t like that.”
“I understand that this is the better solution, and now all of the parts will equal the whole, but my numbers are going to go down.  Can we keep it the old way.”
 
…..and I am often tempted to reply with the following:
 
“If your salesman hasn’t figured out how to manipulate numbers yet, that’s the first problem.”

“Yes – do you really have two separate pages named Home and home?” 

“This isn’t horseshoes”

“Is your site a directory?”

“Good point . . . everyone always asks that we give 110%.”
 
I don’t respond this way, because it does not drive us towards better understanding and resolution.  The biggest key to getting the best efforts and focus of your team is to share a common goal with agreed upon outcomes. . 
 
Recently, I was working on a project with my team and the team of our client. We were putting together a measurement and execution plan for some extensive video measurement validations.  The video starts and completes were tracking just fine, but some of the finer details were not tracking correctly.  As I pointed out the need for changes new dev sites would bubble up with the exact same issues.  Even though I provided good examples for why the naming and tagging should be a certain way, it wasn’t until the developer and I sat in the same room and revisited the goals and outcomes that we were able to come to a better understanding.   Coming to this understanding created a complete 180. Instead of butting heads on low impact details, priority number 1 now became how to solve the problems. 

How to force all Adobe SiteCatalyst variables to Lower Case

Recently when viewing some reports in Adobe SiteCatalyst, I ran into a problem. It seems like I had many of the same values with different cased versions. Some all lowercase, some all uppercase, some were a mix between the two. This made pulling reports more challenging than it should have, so I decided to add a little bit of code to the s_code file to make sure this would never be an issue again with any variables I decided to use.

for(var a=1;a<=75;a++)s["prop"+a]&&(s["prop"+a]=s["prop"+a].toLowerCase().replace(/^d=/,"D=")),s["eVar"+a]&&(s["eVar"+a]=s["eVar"+a].toLowerCase().replace(/^d=/,"D=")),a<=5&&s["hier"+a]&&(s["hier"+a]=s["hier"+a].toLowerCase().replace(/^d=/,"D="));for(var b=["products","pageName","channel","campaign"],a=0;a<b.length;a++)s[b[a]]&&(s[b[a]]=s[b[a]].toLowerCase().replace(/^d=/,"D=")):

Give this a try and let me know how it works for you. If you need a tip to help a problem your having please leave me some feedback in the comments and we'll address it here in our next Omniture Tips and Tricks.