Creating static URL’s from dynamic pages for Eloqua
Sometimes the code... it mocks me. This was the case when working with the implementation scripts from Eloqua. I followed the instructions and by default about 98% of the tracking we needed was being accomplished. The issue I encountered was trying to get Eloqua to differentiate the content being served up on a dynamic page.
One url. page.cfm?urlVariable=1 , page.cfm?urlVariable=2, page.cfm?urlVariable=3. They all showed up as page.cfm in the reports. And while Eloqua does have features that allow you to set up a query string in the admin console, you have to assign each value ahead of time and from what I have been told by folks both inside and outside of Eloqua, you are not able to use those values for certain types of behavioral tracking and filtering.
NOTE: I claim little knowledge of the inner workings of Eloqua and have had to take the word of the support folks and the documentation I could find. If you know this to be different, I would love to hear from you.
After much time spent scouring the web I found this article on an Eloqua blog.
http://eloqua.blogspot.com/2010/05/fun-with-eloqua-and-jquery-tracking-pdf.html
The author of this blog, used a secondary tracking script from Eloqua ( elqFCS.js) and leveraged this and jQuery to auto tag links to any pdf on the sample site. Seeing this approach I was pretty sure I could use this method to meet my goal.
Step 1: Add the link to the additional JS file. It should be part of the standard implementation scripts.
<SCRIPT TYPE='text/javascript' SRC='/elqNow/elqFCS.js'></SCRIPT>
Step 2: Check for the dynamic page, and if found create a "static" url to send to Eloqua.
<cfparam name="url.urlVariable" default="">
<cfif cgi.path_info EQ "/dynamicPageInQuestion.cfm" and LEN(url.urlVariable) GT 0>
<script>
$(document).ready(function(){
var fullurl = '<cfoutput>http://www.yoursite.com/NameOfYourChoosing/#url.urlVariable#</cfoutput>';
elqFCS(fullurl);
});
</script>
</cfif>
That's it! Now inside of Eloqua in addtion to seeing a visit to /dynamicPageInQuestion.cfm you will also see
http://www.yoursite.com/NameOfYourChoosing/1
http://www.yoursite.com/NameOfYourChoosing/2
http://www.yoursite.com/NameOfYourChoosing/3 etc or whatever value you need to be able to filter on.
As of now, this is working and meets the goal / need I had. I'm curious if others have dealt with this, and if so what solutions did they come up with.
Review & Thoughts: “When more is not better: Page Tags” by Eric Peterson
If you have not read Eric Peterson's latest white paper "When more is not better: Page Tags" STOP! Go read it! Then come back!
There are many, many blogs and folks that spend a lot of time talking about how to do analysis of all the data that folks are collecting with various tools, but there are not that many that really go into the topic of tagging, or implementation, or just data collection. Perhaps it us because it is more technical, geeky, and flat out just not as sexy as other topics. But this white paper really stood out for me as my main focus in web analytics is data collection.
The white paper outlined the following issues with tagging as it exists today.
In Web Analytics Demystified’s opinion, the problem with tags is three-fold:
- Tags become a panacea, replacing sound business measurement practices
- Tags can slow down page loading and degrade the consumer experience
- Tags have the potential to erode data confidence when poorly managed
I would add a fourth item to this this. Lack of skilled staff to implement/manage tags. Sure there are lots of companies and consulting shops that can do this for you, but most companies do not have this type of talent on staff, or they do not have full access to this type of IT resource .
Some of the causes listed in the white paper for the proliferation of tags were:
More Tags Does Not Mean “More Accuracy”
I agree in this statement, but what about the use of two tools for validation of trends, not the confirmation of numbers? Although with the right tag monitoring tool in place the need for this would greatly diminish.
Data Confidence
- Shoddy implementation is missing from the list. All too often I have seen or heard of this!
- Lack of good consistent documentation of implementation best practices.
- Lack of internal IT help to manage the tags
- IT has no clue what the tags do or the business requirements behind them
Load time
I have seen this first hand, and yes the tags can slow down a web site, especially when you have have multiple tagging solutions in place. ( Which is why you should track load times
) The other thing to watch out for is as more and more site use Ajax and the likes to provide a rich experience for the end user, there is a risk of double tagging a page if the developers are not careful in how they load content on a page and that can result in all sorts of wonky data.
This may all sound a bit daunting, but fear not! The white paper has a solution for this very need. A "Chief Data Officer"!! The white paper does a great job explaining the responsibilities that the CDO would have, but what it all boils down to is someone to own all aspects of data collection with regards to analytics. As a developer who is also tasked with these responsibilities I am thrilled about this. As sites become more complex and the tagging solutions evolve with them, the need for a technical person who can fill this role is crucial. My hope is that companies will read and adopt this quickly.
Clever or Creepy?
I was sitting at my desk today happily coding away when a piece of mail was dropped on my desk. It was a 5x7 brown envelope that was addressed by hand to me. Being the curious sort that I am, I opened the envelope to find this....
I was a little confused but went ahead and typed in the url and was taken to a clever micro site that had be created / customized for me. I clicked around a bit and was impressed with the interaction of the site. I did not think too much of this and went back to my code. In less than 20 minutes I received a work email from a sales guy.
Rudi,
Good afternoon. I sent that hotel keycard & napkin, and wanted to hear your thoughts of that personalized web experience.
May I request a discussion, maybe Wednesday afternoon? Let me know what works best.
I’m also happy to send additional information at your request.
Cordially,Sales Guy
Now, being more involved in the analytics space I was impressed. Here was a very clever mail to web campaign and it had worked. I went to the web site, they detected that and sent a timely email about the experience. I was thinking about responding to find out more about the site/product/solutions.
But then my desk phone rang. I still had the email from the sales guy up on my screen and the phone number on the caller id matched the email. I chose not to answer, but did listen to the voice mail. Sure enough....it was the sales guy, letting me know that they had tracked me and like Will Smith in "Enemy of the State" they knew my every move. Well maybe I paraphrased that last part.
This is where they lost me. This clever campaign went to creepy in less than 20 minutes. I thought about it for a little while and then emailed the sales guy.
Dear Sales Guy,
With the email then the voice mail it went from Clever to Creepy pretty quick.
A short time later, he responded.
Rudi,
We have no intention to creep you out. We just wanted to show you our capability of being able to put a message in front of a prospect and know in real time that they are looking at it. I want to share an actual VLG customer lead generation campaign.
This dialog marketing campaign has generated a 38% mail to web response. Just click the link below:
I'd like to answer your questions and provide more information regarding our capabilities at VLG. Please let me know a good time to have a brief discussion.
Cordially,
Sales Guy
I do not fault the intent behind this particular sales pitch, but something about it did not sit right. I am fully aware of the effort and opportunities that such a solution could have, but the creepy factor has outweighed the clever factor for me.
What do you think?
Omniture – SalesForce Integration: Take 2
In the beginner’s mind there are many possibilities.
The developer side of my brain refuses to believe that there is only one way to do things, so after spending a great deal of time and effort to integrate SalesForce data into Omniture using the standard Genesis integration I felt that there had to be another way. If you have not read the recent posts by Adam Greco on getting CRM data into Omniture, stop reading this post and go read those first. Then come back!
What I needed to do was find a way to get a few data points out of SalesForce and into Omniture SiteCatalyst. The solution also needed to be automated so that it could run every 3-4 hours. After thinking over the topics discussed is Adam's blog post I had a plan.
The Challenge:
State over time. That is what this whole exercise comes down to. How to get Omniture SiteCatalyst to store and measure the state of a data point over a set time. These data points are up to you and your specific business needs. Some examples are revenue, leads, etc..
The granular level of data you can/want to pull over is limited only by your your business objectives. For the purpose of this post, I will only be talking about getting data at a campaign level.
The Setup:
Transaction ID's and a matching key in SalesForce. If you can, I strongly recommend using the SalesForce campaign id's as your web analytics campaign ID's. It give you a great 1:1 data point between the two systems. It also makes it easy to use that campaign ID as your transaction ID.
Incrementor Events. (2 for every data point in SalesForce that you want to integrate) These are needed to accomplish the heavy lifting of the state over time. If you want to track revenue attributed to a specific campaign for example, you create 2 events. One revenue_positive event, and one revenue_negative event. Later you will create a calculated metric to get the delta of these two events to get the actual number.
State Manager. You have to have some mechanism to get the data out of SalesForce and then be able to determine the difference in the value of the data points you want to integrate into Omniture. There are numerous ways that you could accomplish this, but I chose to write a custom ColdFusion / SQL solution.
The flow chart above shows at a high level all of the steps in the process.
1) Pull a list of transaction ids/ campaign ids from Omniture and store that list in a new db table.
2) Loop over that table and query SalesForce to get the data points you want to move, and store that in a second database table.
3) The very first time you run this process you are creating the state. This copies the data into the third state database table. Each time after that, you compare the values in the 3rd table with the data in the 2nd table. This drives the values you pass into the incrementor events. If the first time you pull data from SalesForce to find the revenue for a campaign is $100.00 that gets stored in the third table. You pass 100 to the revenue_positive and 0 to the revenue_negative. The next data pull the revenue is now 110. After the comparison, you pass a 10 to the revenue_positive and 0 to the revenue_negative. Now on a future data pull, you find the revenue is down to 50. You now send a 0 in the revenue_positive and a 60 to the revenue_negative events. When you create the calculated metric you will see the new value of 50 for that calculated metric.
<cfset variables.revenuewon_str="#variables.revenue_pos_event#=0|#variables.revenue_neg_event#=0"> <cfif variables.DIF_revenuewon EQ 0> <cfset variables.revenuewon_str="#variables.revenue_pos_event#=0|#variables.revenue_neg_event#=0"> <cfelseif variables.DIF_revenuewon GT 0> <cfset variables.revenuewon_str="#variables.revenue_pos_event#=#variables.DIF_revenuewon#|#variables.revenue_neg_event#=0"> <cfelse> <cfset variables.revenuewon_str="#variables.revenue_pos_event#=0|#variables.revenue_neg_event#=#ABS(variables.DIF_revenuewon)#"> </cfif>
The code sample above evaluates the difference in the data point between tables 2 and 3 and generates the string required to send the data to Omniture.
4) Push the data to Omniture. After you create the txt file with the transaction id and the values for the events, set up an automatic ftp using the Omniture DataSources.
5) Automate. Since the controlling code to power this process was ColdFusion, all that was required was to set up a scheduled task within the ColdFusion admin and done!
The Result:
Now, right inside of SiteCatalyst, you can see SalesForce data points that matter to you in your reports. Of course, the data will look much cleaner that my mocked up image...hopefully.





