Entries Tagged 'seo' ↓

How YOUR tech blog posts are RIPPED OFF while you sleep!

Technical blog posts are ripped off in this fashion
You work hard on your posts…

So you get an idea for a blog post. You mull it over, finally commit to it, and start to get down to work. Now that you’re in it for the long haul there’s probably a good time sink involved. Depending on your writing style your work involved might be something like:

  • Researching the topic so you understand it really as well as you think you do.
  • Thinking about the points you are going to make, what order makes some sort of sense.
  • Collecting and wiring up good outbound links to more authoritative, encylopedic reference for your readers to continue on with.
  • (HOLY CRAP, DON’T READ THIS!!!) Thinking up a good magnetic headline to grab some interest.
  • Thinking about how to break up your content into manageable, scannable bits.
  • Searching for / creating / farming-out some for some pithy images to break the monotony of endless text.

If you are into copywriting, a slow worker, disturbed by animals, etc, this process may be long and soul crushing.

And the payoff is….

You birth your creation into the wild. You lord it over your friends, shamelessly promote it on a few social networks, get your mom to check it out, etc. As people add comments and you watch the visitors count in your analytics, you get that satisfying ego-boost you had hoped for. You can feel your social capital on the rise. Rad.

And then, YOU ARE RIPPED OFF!

Ok, so here’s my story. As avid readers of www.mikeduncan.com you’ve undoubtedly read my scintillating post SQLite on .NET - Get up and running in 3 minutes. Catchy, isn’t it? It was birthed into the world as the timestamp clearly reminds us on January 15th, 2008. People seemed to dig it, a good time was had by all. Maybe *too good* of a time.

My sqlite on .net blog post, check it out!

TWO DAYS after my post was out in the wild, I started seeing some interesting inbound links coming in from InfoQ, a tech news - paid story aggregator type site. While not somewhere I go often, their site is indeed large, thriving, and as it turns out, morally bankrupt. It seems that one Robert Bazinet has a story on the front page of the 250,000 unique visitors per month, page rank 7, mega-site that is InfoQ.com cleverly titled:

A very original blog post

Up and Running with SQLite on .Net in 3 Minutes

Come on,…… really? That’s really what its called? You bet. So what do we find in this lovely post? You got it, exactly my post, just stripped of its sexy mikeduncan.com voice and replaced with a few business buzzwords.

  • The steps of what to do are the same.
  • And in the same order.
  • And the arbitrary number of minutes is the same.
  • And the links to the further sources are the same.
  • And the footer says "InfoQ.com and all content copyright © 2006-2007" !!!

Who told you to put the balm on?

You’re damn right Jackie!

Ok, to set the record straight, they do give a shout-out to me briefly mentioning I have a post similar to this on my site, and if you bothered to go to my site, you’d see that they are maybe-admittedly re-hashing my post? Or maybe you wouldn’t.

The Pros and Cons of this intellectual larceny…

So let’s see what to make of this situation in inverse pro/con order (to build suspense)

Cons:

  • My personal work and time invested in this post is being leveraged for InfoQ / Robert Bazinet’s big-uppance.
  • Organic search traffic relating to SQLite on .net will ultimately be split between mikeduncan.com and InfoQ.  As a corporate, constantly updated entity, they have a lot of page rank that will flow down into their version of my story, probably trumping mine in the SERPs in the long run.

Pros:

  • InfoQ will send me some traffic I might not otherwise get from regular infoq readers who don’t already know about my post from DotNetKicks, Google, my blog feed, etc.
  • I gain greater *perceived authority* (if thats even possible) by being linked to from a supposedly authoritative, news publishing source.
  • My ego still gets boosted in some small way in that someone thought my post was worth paraphrasing and submitting. Perhaps they got $20 out of it.

The *real* pro though, is I have now have this very topic to write about on mikeduncan.com, which I’m sure will be identifiable to a lot of other folks. Looking through InfoQ, there are indeed many stories just like this one that are just paraphrased versions of other bloggers hard work. Many other people are knowingly or not, in the same boat. (Maybe it’s time to do a search on InfoQ ey?)

You WILL be next!!!

Clearly any blog is up for thievery a source of inspiration. If indeed you as a writer get a kickback for stories are accepted on InfoQ, why not scan DotNetKicks, maybe DZone, looking for catchy stories you can paraphrase into cold, hard Jacksons? A quick look through Infoq shows a number of posts that are similarly just paraphrased summaries of bloggers work. Just picking the first one on the front page that that I recognized by the title,

Implementing NOLOCK with LINQ to SQL and LINQ to Entities for instance is just a Scott Hansleman post rehashed. Again, Scott is quickly credited, but then pretty much his whole post is just copied over into the Infoq system. Scott, on one hand, being in a tech evangelist role and all around Dude, is probably fine with getting the word out however he can. On the other hand, Scott does have advertisers and runs diabetes research fundraising campaigns through his site. A part of his fundraising ability relies upon the popularity of and traffic to his authoritative site based on his original content.  Maybe Scott is OK with this, maybe not.  Either way I doubt InfoQ told him they were rehashing his posts.

My direct boss and good friend is a lawyer, but does not play one on tv. He advised me that I could certainly send them a letter asking for the post to be removed, but would probably not really be worth his time as he had compelling video games scheduled to be played. Thinking about the above mentioned pros and cons I think I’m ok with the net gain on this one.

Hmm, the capital of France is The Hartford Whalers?  Oh well, Must be right.

 What do YOU think?

Ok, the internet is all about learning, communicating, extending what has come before, standing on the shoulders of giants, blah blah blah.  I’m not really trying to push for some sort of copyright policing, I like the wild west days we are in.  At the same time, when it happens to you, it’s kind of phony / corny in a Catcher In the Rye way. Particularly the InfoQ.com and all content copyright © 2006-2007 footer. 

What do you, esteemed readers, think? Should I just quit complaining and consider it flattery?  Or is this something that as tech writers / bloggers we should be more in tune with.  With Gawker Media type bloggers making 9K a month, perhaps this isn’t just bitching.  Original content is certainly some kind of currency these days be it devalued US dollars, career credibility, or promoting charities. Tell me your tales! 

If you don’t post comments, I’ll just cut and paste some from your blogs into here anyway, copyright 2008 mikeduncan.com. Man, you’ve read this far, if you feel like it, hook a humble blogger up with some diggs or whatever.  Your awesomeness will be embiggened, I promise.

kick it on DotNetKicks.com

Google Website Optimizer tips and hacks

This post could make you tons of money. Seriously. If you have an ecommerce web presence of any kind, you are nuts if you are not taking advantage of Google Website Optimizer. This post will show you some of my personal hacks and developer tips I’ve whipped up for using this tool on a real-deal fully dynamic SEO-ed site (we’re talking 2 million + unique visitors a month).

Google Website Optimizer

For anyone who doesn’t know, Google Website Optimizer, is a slick, designed from the ground up multivariate web testing suite that Google, as is their custom, gives away for *free* (this is a free product in a space where the usual players run you around 40K a year, all you need is an Adwords account).

In simplest terms for those not familiar with multivariate testing, Optimizer lets you carve up different areas of a given page you want to test by enclosing said areas with simple javascript tags. You add another javascript snippet to a second page that serves as the goal for what your tested page is trying to accomplish (ex. your checkout page might be the goal for the product page you are testing). You then submit through the Website Optimizer interface different alternatives for content to be displayed in each area you have specified, say three different header variations, two different footers, and maybe two different product-pitch-blurbs like a hard sell and soft sell. Once you have it all wired up and turned on, distinct users are served a different ‘recipe’ of the different possible combinations, and Google logs their relative success in making it to your goal page vs. your original content. Run those tests until a statistical conclusion can be draw, implement the best scoring recipe, and there are potentially HUGE conversion gains to be had.

Google Website Optimizer workflow

The website optimizer diagram Google shows at SEO conferences.

First here are some quick tips of information that aren’t immediately obvious when reading the weak online documentation.

——————— Three Tips ———————

Experiment time = performance more than alternatives.

As you might imagine, the more combinations possible from your alternatives, the longer it may take for Optimizer to come to a statistically significant conclusion about anything. This is true in general but there is a bit more to it than that. While there is a dependency on enough traffic allocation to each of your recipes, what really drives experiment time is the difference between how well your best recipe performs vs. your original vs. your worst recipe. An experiment with 144 combinations, which Google does *not* recommend, can actually return results within a couple days so long as your best recipe clearly outperforms your original version of the page. On the flip side, an experiment between only 2 alternatives can cause Optimizer to spit out “28 days remaining” if the conversion difference between those two alternatives is very slim. The lesson? Don’t start with tests of subtle phrasing differences in the copy or a tiny difference in graphic look and feel, brainstorm and test real *alternatives* to your flow or offering first.

Don’t worry about dynamic URLs.

While the Optimizer interface will ask you for an URL for your test page, your test is really of course determined by your javascript placement. If you have dynamic querystring action, or more likely in ecommerce, massive url-rewriting where one one aspx page answers to 30,000 totally different URLs, Optimizer will roll with that just fine. When setting up the experiment, simply use the “upload flat html” option when submitting the test or goal page. Nothing about the experiment is actually tied to any urls other than the preview-your-recipe mode of Optimizer, so just so long as your test page emits the test javascript and your goal emits the goal javascript, you are in business.

Use Javascript in your variations!

Examples of this make up the hacks section that follows. Javascript *is* allowed in variations; you can call functions in the main tested page from your variation or use Javascript in the variation to read DOM elements in the test page.

——————— Two Dynamic page hacks ———————

The following tricks are bits of code you as the developer can implement in your experiment pages that will help with dynamic data in your experiments as well as keeping the experiments themselves as straight-forward as possible so you can let your creative team autonomously plug in alternatives without developer help.

Pull variables from your page into your experiment.

Sometimes you will want to pull out some dynamic data from the page to add to your variation’s content. Maybe you need to grab the current page’s product name and model number to incorporate them into some alternate sales copy. With url rewriting or just highly dynamic pages you can’t very well have this info hard-coded into your variation. One hacky solution I’ve used with success is to backfill the dynamic content into the experiment with Javascript InnerHTML swapping.

In this example, I would set up two input type = “hidden” fields in the page code and set their values to the model number and product name respectively like so (ASP.net):

<input id="HiddenModelNumber" value="<%=ModelNumber%>" type="hidden" />
<input id="HiddenProductName" value="<%==ProductName%>;" type="hidden" />

Next, we implement a little quick Javascript that when called will swap the InnerHTML of all elements with a certain class with the value of our hidden field:


function PopulateInnerHTMLByClass(classNameOfElementToInject, hiddenValueID)
{
if (document.getElementById(hiddenValueID) != null)
{
searchClass = classNameOfElementToInject;
var classElements = new Array();
node = document;
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp('(^|s)'+searchClass+'(s|$)');
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
els[i].innerHTML = document.getElementById(hiddenValueID).value;
j++;
}
}
}
}

Push variables from your experiment into other parts of your page.

Say you have a long list of 200 items on your page, each with a button that says “Buy” and you want to test how that page would convert if the button instead said “Add to cart”. A good way to accomplish this is create an experiment area that *encloses nothing*. In your test page, code up a Javascript function that replaces the InnerHTML of everything that has a certain class, in this case the class of our button. (see snippet below). Whatever is passed into the function will becomes the new button text on the fly. From there your button-text variations are very easy to administer, simply have each one break into a script block and call your swapper method. Ex swapButtonText(’add to cart’); , swapButtonText(’fork it over’); etc.


function swapButtonText(newInnerHtml) {
searchClass = 'buttonClass';
var classElements = new Array();
node = document;
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
els[i].innerHTML = newInnerHtml;
j++;}
}
}

——————— The next step, AJAX ———————

Of course the next natural progression of this DOM javascript swapping is to make AJAX calls conditionally fetching custom dynamic information per experiment type. This has a lot of potential but is pretty custom to your given workflow so I’ll just leave it at that for you to mull over.

For more developer thoughts on Google Website Optimizer check out google’s own forum dedicated to this tool.

Have some other good Google Website Optimizer tips and hacks? Post them in the comments!!

kick it on DotNetKicks.com