Keyword-Level Demographics
On Tuesday I made my speaking debut at SMX East 2011 on a panel with Lena Flanigan (Life Technologies) and the creator of Google Webmaster Tools Vanessa Fox (Nine by Blue). The session was called “Using Searcher Personas to Connect Search to Conversions” and I unveiled a methodology that I think is potentially game changing. Now I want to share this breakthrough with the community that has helped me build a name for myself. As you can tell from my tone and lack of cartoons in this one, I have my serious hat on right now! Without further adieu ladies and gentlemen of the SEOmoz community I present to you Keyword Level Demographics.
Keyword-Level Demographics Methodology
At MozCon Mat Clayton from MixCloud delivered a mind-blowing presentation called Social Design: How to Co-Mingle Social Features & Earn Traffic in which he revealed that if you add your site as an object on Facebook’s OpenGraph and a user then opts-in you are able to get all of their data. That’s right. Status updates, interests, friend – all of it. I immediately understood how that could affect conversion, in fact Mat told us that their application of this resulted in a decrease in bounce rate of 55% and an 80% increase of signups. Wow!
I’m not quite sure when the idea hit me—and hit me it did—but one day I realized that if you can pull a user’s data from Facebook and couple it with Referrers from Search the result is demographics at a keyword level!
We are about to time travel folks and keyword-level demographics are the flux capacitor. Getting the flux capacitor to work is a three part process. The assumption is that you have read through Mat’s awesome presentation, you know how to add your site to the Facebook’s OpenGraph and have users opt-in to your application. It’s about to get code-heavy here so if you don’t know anything about JavaScript skip to the Keyword Demographics Applications section below, however if you don’t know code and you are feeling daring I promise you I make it simple.
1.Pull the referrer from Search and sessionize it – You do this as soon as the user arrives on the page because they may decide to opt-in later during their session. If you were to pull the referrer at a later opt-in then it would just be whatever the last page on your site that they visited and that will not give you the search referrer.
Unfortunately JavaScript does not natively support session variables, but I found a function by a guy named Thomas Frank that does allow you to sessionize variables in JavaScript and it is required for this code to work.
This function is called first. It pulls the referrer URL makes sure the person comes from either Google, Bing or Yahoo at which point it pulls out the variable from the “q=” parameter. Now that we have the query that was used in the search it strips the URL encoding to give you a keyword in its clean form. Visually, the code does the following:
- Step 1: https://www.google.com/search?sourceid=chrome&ie=UTF-8&q=seomoz+is+awesome
- Step 2: seomoz+is+awesome
- Step 3: seomoz is awesome
Here is the Search Referrer function:
-
Check if the user is authenticated, then pull data from Open Graph API – The barrier to entry is that the user has to opt-in in order for you to get this data so you will have to incentivize the opt-in. See Mat’s presentation for more on incentivizing and how asking for more permissions leads to a lower opt-in rate. The key takeaway on permissions is that you should ask only for what you need. For this proof-of-concept I request standard permissions plus birthday and location but you can get anything you want. I’m only going to be pulling five fields of data here because Google Analytics Custom Variables only allows up to 5 values. A better application of this would be to model the persona in the code on the site and just store the persona name rather than the specific data.
The code first checks to see if the user is connected to Facebook, that means are they both logged in and connected to your application. If so it logs you in and then pulls the data and calls the function to push it to Google Analytics. If you’re not connected to the application or not logged into Facebook it does nothing.
Here is the JavaScript code I’ve developed (with help from Joshua Giardino) based on the code Mat Clayton wrote that allows you to pull data from Facebook’s Open Graph API:
- Push it to Google Analytics – As much as people don’t believe in Google Analytics as a world class analytics platform, they really make incredibly complicated things like putting in data that doesn’t otherwise belong EASY! The function for custom variables is very simple you’re just making a bunch of predefined calls to Google Analytics to take your data. This really could have just been a loop and not a function. Here it is:
One very important caveat, as this is a proof of concept, I’ve just done the bare minimum to make this work. Facebook’s Terms of Service says that you can’t store identifiable user data with third parties and if you do you have to use the third party id. What you can do is use an open source analytics platform such as PiWik and store the data on your own site but PiWik is virtually a GA clone and it only allows 5 custom variables as well. Ultimately I’m going to build a tool for collecting the data server side and ten just push the persona name with one custom variable.
You can download the Keyword Demographics Source Code from my Github repository. I would definitely love to hear from you if you implement it.
Keyword-Level Demographics Applications
So now you have all these keyword-level demographics but what does it mean and what can you do with it? There’s a variety of actionable concepts that are brought to life ultimately revolving around the ability to determine how valuable a keyword is with regard to your business goals (you do have business goals, right?). Before you get to this point you should have already defined your personas based on social listening because it is the application of those hypotheses that makes this data powerful.
Keyword Ownership
Now that you have this data you can test your assumptions against your personas and figure out which of them is the owner of a given keyword. This is powerful because if you determine that one gives substantially more traffic and conversions than the others you no longer have to target messaging toward the other personas and therefore you can target the keyword owner more specifically and improve conversion that way.
In this example Curious George searches for the given keyword 5000 times monthly and converts at 5% and is a significantly more valuable persona than the other three. These personas are actually from a real client (albeit with faux data) that we’re working on right now and we’ve already pre-determined that we’re not going to get the Gamer, Film Purist and Tech Geek to budge too much. However as per Justin Brigg’s post on using personas in link building we’ve used them to figure out who to contact during our outreach process.
Dynamic Targeting
The data you get from Facebook is available at load time and as such you can use it to tailor the experience directly to the user. You can get quite granular with this approach once you’ve successfully identified key characteristics of your personas. Keep in mind that you’re not limited to just their demographic information but their likes, interests, status updates, etc. And while this is outside of my programming ability there are some very smart people putting together algorithms to that allow you to map this type of data to your user to determine how closely they fit your persona. Google has some machine learning APIs that can aid in these determinations.
To keep it simple in this example on the left is the normal broad messaging view that any logged out user (and Google will see). However we have figured out that our “Curious George” persona is between 18 and 32, male, loves indie rock and wishes he had a beard. Therefore whenever this persona comes to the LG site or sees our ad he’s presented with a hipster cartoon manifestation that is similar to his ideal self along with messaging that says “Guys with Beards Love LG Cinema 3D.” People respond to people that look like them in advertising and it is highly likely that conversions for the Curious George persona will skyrocket.
Keyword Arbitrage
The next application is a concept called “arbitrage” that I’ve commandeered from the algorithmic stock market. Arbitrage is the capitalizing upon the difference in price when you are buying and selling something at the same time. Being able to get the Facebook data allows us to know who converted, if they have completed subsequent conversions and then to group those by persona. This is going to give way to keyword matrices which will allow us to understand long term values of initial keywords.
Ultimately we will be able to better understand where to spend our money.
For example, if I am FootLocker.com and Curious George purchases a $50 pair of sneakers via the keyword “sneakers” from Search and he enjoys his experience so much that when he goes to purchase a windbreaker he buys it from Footlocker.com. Therefore the keyword “sneakers” is worth more than the initial $50, it’s actually worth that plus the price of the windbreaker and therefore it would be a smart move to put more money into initial keyword “sneakers.”
Also the subsequent channel does not necessarily have to be Search, since we are now able to attribute the visit via Facebook data we can track the subsequent conversion cross-channel .
Now that you have all this data about what keywords lead to subsequent conversions for certain personas you can then aggressively target people after their original conversion. That is to say once I know there’s a 60% chance that Curious George will buy a windbreaker after buying a pair of sneakers I know to follow up with him on deals via email or through retargeting. This is very powerful information because again it tells you where to effectively spend your inbound marketing dollars.
Annual Keyword Value
All of these applications lead up to a concept of annual keyword value. I don’t like to work with lifetime customer value because that’s not as actionable as you may think. Think about it how long do you truly have to gather data for a campaign and how would you match that up with your traffic reports to make it actionable? Exactly.
Again influenced by algorithmic stock trading, Tony Effik developed two equations to help determine where to spend your money; Keywords-Earnings Ratio and Keywords-Earnings Yield. The Keywords-Earnings Ratio is a valuation of how much you’re spending versus how much you’re earning on a keyword. You want to spend more on keywords with lower earnings ratios. Whereas the earnings yield is how much you make per keyword. You want to spend more on keywords with the higher yields.
Search ROI
I led off my SMX talk saying that SEOs have been acting like the big kids in the strollers and that we have to grow up and embrace the fact that we are full-fledged digital strategists rather than just people who do SEO. In fact just Rand recently illustrated, our responsibilities as SEOs have grown up.
With that said, this methodology allows Search to grow up with us by making initial and subsequent conversions attributable and the ROI directly quantifiable and forecastable.
The game has changed and you now have the cheat code.
The Keyword Demographics Project
I had an amazing time presenting at SMX and I of course love to share with the Moz community but this is not just a one and done thing. Keyword Demographics is my baby and I want to continue seeing it grow so if you implement this please ping me on Twitter or reach out to me in some other fashion. I’m looking to pull the data together and gather more insights on how well it performs so I can do future posts on how we can better incorporate it into our Search efforts. Also expect more insights from my own work in the near future.
On a final note, I want to announce that I am the newest SEOmoz associate and I am very proud of that. Look for me in the Q&A and to keep bringing wild ideas to the table. Also look for me at the SearchLove NYC event that Distilled is hosting October 31st & November 1st. Thank you to the whole community for the love and support over the past months; it’s an honor to be a part of something so incredible.
This is inspired stuff. Thanks for sharing. Wow!
Thanks Richard, coming from a wizard such as yourself that really means a lot!
High fives good buddy, high fives :-)
Extremely interesting! Do you think you could put together a video explaining this as well. It may be more easy to understand if you show us how to put this to practice. Thank you!
A screencast?
I'll see what I can do ;)
I also Like to see in video so i wont make a mistake in it.
Well the other option is to go with something called Pzyche. There's a price involved but it's probably a lot easier than dealing with the OpenGraph. It's also unclear what the data sources are. Check it out: https://pzyche.com
Hola Mike,
since that great preso by Mat Clayton at MozCon, I've started to implement this kind of integration of a couple of clients' sites into the Facebook Open Graph, and I can confirm it is surely a revelation tactic.
Not only it is actually helping especially one of my clients in understanding better who are its users, but also what they really look for in its site and - even more important - why.
Thanks to all the informations we are collecting, we are now able to focus even better the content/inbound strategy... finally: to do better SEO using a social media graph.
Gianluca,
That's awesome man. Would you be keen to share some of specific insights or is that under NDA?
Thanks for all the tweets of the post, man.
-Mike
Under NDA, unfortunately. What I can add is that we too were thinking to create a tool in order to solve the 5 custom variables issue.
All good. I understand. The other way to do it is to model the persona in the code and just push the persona name to a custom variable but you will still want to keep the data for later validation. That part is easy though, you could easily write a script to takes the data and pops it into a mysql db.
-Mike
Yep... thanks for the feedback Mike.
Hey gfiorelli,
Would you call yourself a curious George...? As I can see, your avatar actually HAS a beard, and I know you've been around for some time as a mozzer, so... ;)
I'd prefer to be defined as "retro-sexual", lol :)
One word - epic.
The difficult bit is getting users to authenticate, particularly for e-commerce sites, but if you're giving something back and not asking for too much (as you said, the more permissions you ask for the less likely people are to give them to you) response rates are generally quite high.
Your presentation was fantastic, I was watching all the #impressed tweets and read through the slideshare. We have been putting our heads together over here about it. Great job!
I'm not experienced with the FB Open Graph. To work, do you have to have a site that asks users to login to FB to enter your website? Let's take, for example, it's an eCommerce website and the only way we have FB integrated into our website is having the 'Like' button on our homepage and some of the interior pages. Can we still add in this code and make it somehow work?
Hey Kristi,
Happy to hear I got you guys thinking over there.
You do in fact have to ask the user to authenticate with Facebook as shown here: https://developers.facebook.com/docs/authentication/
The Like button is not enough.
You could potentially have a JavaScript overlay for when people first enter the site asking them to Login with Facebook and also just have a login with facebook button in some prominent position on every page in case they want to opt-in later.
-Mike
Thanks for the reply, Mike!
Truly Impressive stuff to get excited about
Great article! I agree SEO has expanded and the SEO marketers that will be successful will adapt their way of thinking to reflect the ever changing medium. I feel usability is the biggest knowledgebase SEOs are lacking. I've seen larger ROI from landing page and usuablity testing than from trying to increase my traffic levels.
I'll echo the prevailing sentiment on these comments: great stuff!
One question: how did you build the various personas? I.e. what model did you use, and which variables that you were able to harvest via the OpenGraph did you feed in to that model to come up with the personas?
Check out my deck from SMX it talks about our methodology for persona development but basically what we do is
Here are some other resources on persona development in usability.
-Mike
This is so good, I actually dribbled a bit.
Congratulations on your speaking debut and joining the MOZzers.
Outstanding post. wow. Seriously good work. :)
Great article Michael!
It opens up a whole new dimention for my clients to track and understand their users! It is for sure something I will have to implement and test in the next few days.
Hi,
I've got a question about this passage: "in which he revealed that if you add your site as an object on Facebook’s OpenGraph and a user then opts-in you are able to get all of their data. That’s right. Status updates, interests, friend – all of it" - what (if any) are the ethical considerations when working with this kind of information? I read elsewhere that this information can be accessed whether the user is logged into Facebook or not (something about cookies?). I'm no expert in this sort of thing, but using this kind of information as a commodity when a user is not even logged into the site through which they are being observed seems inproper? How do Facebook account privacy settings affect the visibility of this information?
Thanks :)
Mind = blown.
Thank you Mike - you've really pushed the envelope out, at least of what I thought was possible.
I enjoyed your Curious George demographic example. It left me very curious as to what actual data from FB OpenGraph API looks like, besides age range and gender.
For example, for music taste, I assume we'd need to crunch individual bands people like into categories?
-Tasman.
Hey Tasman,
Thanks for reading!
Everything is available as long as you have the appropriate permissions from the user.
You can get a sense of what the data looks like at the Graph API reference.
So in answer to your question you will have to parse the individual bands into genre if that's what you are after.
Give me a shout if you implement!
-Mike
This is one of the baddest posts I've seen on this blog. wow. Tremendous brilliance, Michael!
This is one of the best posts I’ve seen in a while! Amazing stuff and really taking keyword research to a new level. Well done and thanks for sharing this!
OK, this guy's a genius.
:Genuflecting:
Good stuff! We actually use sessionvars on our sites as a replacement for cookies and I have to say, they work very well for us. Very easy to implement!
Thanks for sharing
Thanks for reading Shelly!
Yeah I was pretty excited about how easy it was to use as well. Thomas Frank really made a useful library.
-Mike
Great post, already looking in to how I can implement this.
Oh
My
Word.
That's some heavy stuff right there. I didn't even know something like this was possible, and you've given a full-on tutorial of HOW to do it. Excellent post. Very impressive.
Really cool. Also kind of creepy.
Thanks.
Certainly not more creepy than retargeting I'd say.
Excellent post and we will definitely give it a shot at steripen.com One thing I would note to GA users who implement. To initially test, make sure you create a temporary Google Analytics profile first to ensure your GA code is working properly given all the javascript you are adding. If I hadn't worked an all-nighter last night, I'd implement this tonight!
Thanks!
I definitely agree, make a dummy profile to test otherwise you'll have some wonky data in your main profile.
Let me know how it goes and if you're down to share some data!
-Mike
This is amazing. Way to keep coming up with innovative ideas.
This is a big Hit Mike… As i am not a free hand developer and playing with APIs take lot of my time but this thing is surely a game changer and I am going to try this on one of my project pretty soon.. will surly gonna hit you with the results…
Thanks again for this BIG shot!
If you could manage to put it in the code let me know. Thanks.
No prob Moosa. I'm just trying to free the data!
Def let me know when you get it up and running
-Mike
Typo: "I would definitely love to hear from you implement it."
Hi Mate, amazing post I really enjoy the level you go to in all your work and also the classy images you use to back up all the data spot on mate.
Do you have a personal blog with even more of this fantastic content?
Ive sent you a tweet too and promoted all this post =)
Thanks James!
I do but it's not quite ready for consumption. I'll announce it on twitter soon.
Great and mindblowing post Mike!
I have a question. When Mat Clayton is talking about Open Graph and opting in, is this referring to using Facebook Connect to allow users to opt in to your site? Or can the use of Open Graph without Facebook Connect still be used to accomplish everything you are talking about in your post?
Pardon my ignorance, I'm pretty new at all of this Open Graph and schema.org stuff, but I am very curious and want to learn everything!
Thanks!
Dana
Oh my goodness, this is heavy stuff.
Great post Mike, im feeling motivated all of a sudden. But thanks for a refreshingly clear-cut approach to a process so innovative and intricate. I am curious, have you witnessed any notable changes to bounce-rate with the Facebook authentication requirement?
Hey Michael,
This is an amazing idea. It's almost scary to combine demographics AND behavior! Very cool!
Excellent post! Went through your prezo the other night, very impressive.
Thanks Yousaf, I appreciate it! Thanks for helping to get it on the front of slideshare.
-Mike
Mike
This is some pretty SWEET stuff going on here! I read it about three times, and its all making sense, except for one thing:
"Facebook’s Terms of Service says that you can’t store identifiable user data with third parties and if you do you have to use the third party id."
Not sure what this means? Is the way you're doing it now in violation of FB's terms?
I have one site in particular I'd like to try this on, and if I get a chance to do it I will DEF share results.
Thanks!!
Yes the way this proof of concept is built is in violation of both the Google Analytics and Facebook Terms of Services in that they are saving identifiable information. Facebook has something called the "third_party_id" that is not directly identifiable and can be saved.
I wasn't exactly clear on what they consider identifiable but I'd venture to guess they don't want you saving names and user ids. Grab the third_party_id or just grab the regular user id and run an md5 hash on it and save it. There's plenty of ways around it.
-Mike
This is excellent information. Expecially considering you're a rapper. I wonder if you've written an SEO rap? Maybe SEO ain't dead could be the lead in with a nice strong basso ostinato... Hum, maybe not! Awesome stuff thanks
Hey Gabriela,
Don't think I'll ever do an SEO rap (unless that SEO Rapper guy dissed me or something), but I did do a freestyle responding to comments on my Unbounce post.
ConversionFest Freestyle Response
I might do a presentation one day where the whole thing rhymes though.
Thanks for reading!
-Mike
Showing different content on Facebook based on demographics is very cool and i'm surprised the big brands aren't all over it yet (unless they are and i've missed some great examples?) I suppose it's the next step on from 'like gates' or 'fan gates' which have proved to be effective in increasing FB likes.
It's pretty code heavy as you say, but it's still got to be worth taking the time to review this fully and implement it if it's something that'd really make a difference to a client. I'm already think about using this for locations based upon what you've already created, perfect for a client we're working with at the minute... *goes to speak to the dev guys* Great post Mike ;)
Hey thanks for reading!
Real quick it's not showing different content on Facebook, it's showing different content on YOUR site for a user logged in to facebook and opted-in to your site.
Let me know how it goes with your devs!
-Mike
First of all, just wanted to say "thank you" - as Mr. Baxter said this is inspired stuff and has given me a lot of ideas for some future testing so kudos for that! As I said in my tweet about this post, far and away the best/most innovative keyword stuff I've seen in over a year so thanks for keeping the fresh stuff coming.
One minor niggle I just wanted to throw out there as I am a recovering econ nerd; <econ nazi>doesn't arbitrage inherently imply that the trade/activity is risk free and guaranteed profit at zero cost? I love what you're doing with these keywords (and can't think of a better name for what you've described) but given that we're talking about a potential future purchase - rather than a guarantee that, in fact, Curious George personas will buy the windbreaker as well from us - I'm not sure this would count as arbitrage because I'm not sure it's risk free if we were still bidding on the windbreaker term. If we were talking about say, buying an iPad in the US at $500 and selling it in the UK for £500 profiting the margin on the exchange rate, then I think we'd be in business. Along these lines someone might want to look at bidding on keywords in foreign countries where cheaper and supplies are more limited/there are higher conversion rates *nudge* and then you might stand to make a bit of true keyword arbitrage ;)
In many respects I think what you're saying is like arbitrage in that you can hopefully make more money by catching and engaging the user on cheaper keyword terms when we know they are likely to return for more expensive/valuable keywords (which you would not need to bid on - thus free profit), but the only difference is that this is not a guaranteed/risk free opportunity and isn't explicitly coming from a difference in cost for different markets. </econ nazi>
Pedantics aside, I just wanted to say thank you again again for bringing the goods. This is some seriously sophisticated stuff and I love to see fellow keyword junkies pushing the boundaries! A tip of the top-hat to you sir.
*Edit- grammar
Sam,
Thanks for reading. I'm going to defer to you on the semantics of the definition of "keyword arbitrage" as I only took AP Economics in high school and then Economics 101 in college just so I could get an easy A.
However I think maybe my definition wasn't clear based on your response. What I'm saying is that if you realize that there is a matrix of keywords and therefore there is arbitrage between multiple keywords. For example there is arbitrage between "sneakers" and "windbreakers" and then "windbreakers" and "t-shirts" and so on and so forth so you will potentially always be putting money into all the keywords at the same time. It's just that the conversion relationship between "sneakers" and "windbreakers" may be much higher starting at sneakers and therefore you will want to put more money into "sneakers" in Paid or more money into link building for that term or what have you so get more traffic that ultimately leads to conversions on "windbreakers."
Ya dig?
-Mike
I love The Facebook API. I love coding. I love increasing conversion rate. But I don't think we should get too excited by this admittedly interesting work. I have run a few experiments with Facebook on ecommerce sites, and in every case, the result was a reduction in conversions. This might be down to clunky implementation, or immaturity of users unfamiliar with the wonderful benefits of connecting on Facebook. I'd love to slice and dice stats and do some more interesting analysis, but I think for the moment, for the majority of sites there are much more effective ways to increase conversions of whatever type you seek. I would love to be proved wrong....bring your stats to the table folks :)
I think Mixcloud's stats speak for themselves however I agree with you the full application of his may not be for every site.
At the same time finding out information about your actual visitors is something that EVERY site can benefit from in order to better server its audience.
As far as getting people to connect to Facebook here are 2 ideas to consider:
-Mike
This is some next level stuff right here. Thanks for sharing this Mike.
I do a lot of B2B online marketing - do you know off the top of your head if you can grab occupation data? Or (even stranger) using the LinkedIn API in a similiar way ?
(I know Optify uses IP lookup to get an idea of what companies are visiting a site, but IP lookup has drawbacks.)
Yep you can def get the occupation data. I didn't because it seems like a lot of my FB friends put in fake stuff or nothing at all.
LinkedIn would in theory work the same way. I don't know much about their API but given this overview it looks like you can do something similar: https://developer.linkedin.com/apis their dataset is more limiting than FB's tho
Looks like you need to come out with Curious George Windbreakers and T-shirts. Create a product bundle!
Nothing like combining a little web analytics with traditional product marketing!
Excellent post... we have been focusing content on persona and our historical customer model. This brings it all together on the back-end tracking and metrics. Thanks!
Thanks Bryant.
Yep, this will help us tie things together better. The personas well be better validated and the multi-touch attribution makes us significantly smarter.
Ack! All the images are now broken. :(
Mike's site (where the images were hosted) was briefly down. It's back up, and the images are back. Thanks for the note!
Thanks a lot for all this research Mike... I can't wait to test your JS code (running to your GitHub repo).
Also, thanks for pointing Vanessa Fox... I'm going to buy "Marketing in the Age of Google"! Seems to be really interesting!
Someone actually has forked my code and added a couple more features:
https://github.com/LrdGrmRpr/keyword-demographics/blob/master/keyword-level-demographics.js
Exemplary post. Do you have a blog where I can follow your thought processes?
Coming soon! Follow me @ipullrank in the mean time.
Extremely great post, I can't wait to use that code for in GA custom variables first. I am just going to downlowd form the github.com and let you know for the same. You and Joshua did a fantastic job. Thanks.
-Hiren
Yep Josh was a great help. I got frustrated with the OpenGraph API and he just worked his magic.
Follow him on twitter @techarity
Thanks Mike for the twitter account.
I have been studying Vancouver SEO and have a SEO company in SEO Vancouver. [links removed by admin]