Sorry for sounding kind of negative right from the get-go, but I just wanted to talk about something that’s really frustrating about the online business education niche – the niche catering to people who want to learn how to run a successful online business.


If you’ve been around for any amount of time then you’ve surely encountered multiple pieces of advice that go something along the lines of: “You have to create a quality product and offer it to your audience.”

Well, the idea itself is great. Surely. But most of the time the execution is very poor.

Just to explain what I mean here’s an example: Samsung Galaxy S3 is a quality product. The iPad is a quality product. is a quality product in itself. Angry Birds is a quality product.


A 15-page PDF e-book with some advice on how to make money online IS NOT a quality product. It’s just a polished turd.

The main characteristic of a quality product

Yeah, I know, dozens of marketers all over the internet keep telling you that all you need is an e-book and you can take over the world. Not if you want to be an honest business owner you can’t.

And this is something the FTC decided to put an end to a couple of years ago. Back in the day, you could promote anything, tell people that they’re going to make millions of dollars, and then at the end of the page place a small disclaimer: “results not typical” … and everything was fine.

Not anymore. Now you have to present the typical results, or else your marketing message is fraudulent. Thank God for this regulation.

Now, if we look closely at this rule, it doesn’t put the truly quality products in any kind of trouble. For instance, what’s the typical experience of an iPad buyer? They simply have a great time with it. What’s the typical experience of Angry Birds buyer? Same thing.

On the other hand, what’s the typical experience of someone buying a “make money online e-book?” Absolutely no results at all.

And you know what, I don’t believe that it’s the customer’s fault… It’s the product’s fault.

Good products can deliver results regardless of the buyer’s attitude. Good products deliver the same benefits to everyone. For instance, you’re going to have a great time with Angry Birds no matter if you’re sad, lazy, full of energy, or even totally drunk at the moment … it’s still an enjoyable game.

What this means is that the FTC regulation about “results not typical” hits only the crappy products out there. Because if the marketers are forced to advertise only the typical results then they basically have nothing to advertise at all.

I guess what I’m trying to say is that a quality product is one that doesn’t depend on the customer to posses any kind of special abilities in order to be able to enjoy it.

And the most challenging thing about it is that creating such a product takes time. In plain English, if you’ve been thinking about making your first product a 15-page e-book on [BLANK] then just forget about it.

How not to take part in the art of polishing a turd

What I mean by polishing a turd is taking some general information, some used ideas (things that can be found on the internet for free), spinning it in some way, putting it together, saving it as a PDF, saying that it’s the best thing since ever, and offering it to the public for $47 saying that it’s actually worth $97.

… Just look at the above paragraph and reflect for a minute. Can a product created in such a way really be a quality one?

Now, I’m not an expert when it comes to product creation, but from my perspective, if you want to create something truly great, you should consider looking into the following steps:

1. Get ready to spend time and money

Sorry, but this is just the way it is. You can’t create a quality product overnight. And you can’t do it for free either.

If you don’t have the time, nor the money then this isn’t probably a good moment for you to enter the product creation space.

2. Focus on the typical result

Start your planning by defining what typical result you want to deliver to your average customer.

For instance, if you still want to create an e-book on making money on the internet, can you guarantee that at least 80% of your customers will be able to make a fulltime income implementing your advice? If not, you’re not creating a quality product.

(Remember the Angry Birds example. I’m pretty sure that at least 80% of people who have download it have a good time with it.)

3. Plan the creation process with the typical result in mind

This is the part where you have to do the main work – the actual creation process of your product. Up to you to handle this one in the best manner possible.

4. Start testing with a small group of people

This is the moment when you get to test if your product is successful at delivering the typical result to a small group of people.

You can pick that group individually or share beta access keys online on forums (if it’s an app or some other digital product).

Once you determine that the product indeed delivers the expected results then release it to the public.


Unfortunately, I don’t think there are any… Product creation always requires money, time, dedication, user testing, and a lot of work. You can’t skip any of these stages and still end up with a quality result.

To be honest, I too was guilty of believing that there’s an easy way. That you only needed an e-book, and that you could create it with minimal effort…

Well, you can create such a thing, and you can even sell it successfully, but it’s not going to be a quality product, and your customers will call you out on this sooner or later.

In a sentence: Polishing a turd is not a good product creation approach.

So-Called Quality Product Creation – The Art of Polishing a Turd |

Sucuri Safe PluginOne of the benefits of making money on paid plugins is that you can more easily spend money for other people to look at and even better, review your plugins. Today is the first result of what might become a somewhat longer tradition: WordPress SEO is now a Sucuri Safe Plugin.

What this means? It means I’ve asked Sucuri to do a full security review of my WordPress SEO plugin. They found a couple of small issues, which I’ve all addressed in the 1.3 release I put out earlier today.

So while 1.3 might not be a major release in terms of functionality, it is the result of quite a bit of work. If you check this commit, you’ll see a ton of little changes have gone into the plugin. Most of them are really minor, but all combined, they make for a better and, more importantly, safer plugin.

I plan to do more updates to my biggest plugins to fix things like this. It’s great to be able to do that because of a, now thriving, paid plugin business. So thank you, to those of you who bought a premium plugin, you are helping us give you a better product!

WordPress SEO, more secure than ever before. is a post by on Yoast - Tweaking Websites. A good WordPress blog needs good hosting, you don't want your blog to be slow, or, even worse, down, do you? Check out my thoughts on WordPress hosting!

Not that long ago I had the opportunity to publish a series of guest posts on ProBlogger. This series was about handling some of the basic stuff in WordPress – stuff you always have to do, yet there’s not that much how-to advice about it on the web.


If you’re an online business owner then (and it’s not the first time I’m saying this) building your website with WordPress is probably the wisest thing to do.

The platform is free, very functional, and easy to tweak to fit your requirements hand-in-glove.

When you make the decision to go with WordPress, most likely your next task will be to pick the perfect theme. The theme will help you define your new brand, showcase your products/offerings, and get people engaged.

This is what the first post in the series is about:

How to Select the Perfect WordPress Theme for Your Blog

Once you have the theme picked, you have to get it installed on your site. For people who have been working with WordPress this is basic, but beginners find it quite challenging as it requires some specific actions and specialized software (like FTP apps).

This is what the second post in the series is about:

Install Your First WordPress Theme

At this point, your new site is pretty much installed. The only thing you have to do is create content, promote it, and build your brand.

However, if you want to be certain that your new online business is safe (from a technical point of view) then there are some additional tasks worth looking into.

Nothing fancy, nothing difficult. You don’t even need to touch any source code. Everything can be done either through well thought through core settings or some new plugins.

Anyway, it’s exactly what the last post in the series is about:

Secure Your WordPress Blog Without Touching Any Code

At first, WordPress may seem like quite a difficult tool to master (and if you think otherwise then try to recall the first time you had to do something with it). However, once you get through the initial tasks, submitting content and engaging with your audience is more than easy.

Tell me, have you taken care of securing your WordPress site yet?

WordPress for Online Business: Picking a Theme, Installing It, and Securing Your Site |

The third release candidate for WordPress 3.5 is now available. We’ve made a number of changes over the last week since RC2 that we can’t wait to get into your hands. Hope you’re ready to do some testing!

  • Final UI improvements for the new media manager, based on lots of great feedback.
  • Show more information about uploading errors when they occur.
  • When inserting an image into a post, don’t forget the alternative text.
  • Fixes for the new admin button styles.
  • Improvements for mobile devices, Internet Explorer, and right-to-left languages.
  • Fix cookies for subdomain installs when multisite is installed in a subdirectory.
  • Fix ms-files.php rewriting for very old multisite installs.

At this point, we only have a few minor issues left. If all goes well, you will see WordPress 3.5 very soon. If you run into any issues, please post to the Alpha/Beta area in the support forums.

If you’d like to know what to test, visit the About page ( → About in the toolbar) and check out the list of features. This is still development software, so your boss may get mad if you install this on a live site. To test WordPress 3.5, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the release candidate here (zip).

adblockJust like any other website owner (myself included) you probably hate ad block browser plugins…

Advertising has always been one of the most straightforward ways of monetizing a website, but these days it’s starting to get awfully difficult to display some ads and not have them blocked by one of those plugins.

And it’s not that I hate them entirely. To be honest, I use them when browsing the internet, so I don’t have to see all the popups and whatnots. However, when it comes to my own sites, it’s a completely different thing…

You may say that such a two-sided opinion is kind of hypocritical of me, but hey … I’m sure I’m not alone on this one.

So, just by accident I’ve come across a way to display ads and not get them blocked.

First things first. This won’t work with AdSense.

But it does work on most other networks and all individual ads (where the advertiser gives you a piece of embed code to include in your site).

The trick is simple: You have to host the ads yourself (on your own server).

Here’s how to do it.

Let’s start with the standard embed code you usually get from your advertiser. Here’s an example:

<a href=”” target=”_blank”><img border=”0″ src=”” width=”125″ height=”125″ alt=”"></a>

The example above is from wpwebhost and their hosting affiliate program. However, other embed codes are very similar to this. There’s always a link and an image.

Now, do the following:

  1. Take your affiliate link (the one after the “href=”) and put it through Pretty Link or other similar plugin. It will allow you to redirect the affiliate link through your own domain, making it seem like it’s an internal link.
  2. Follow the image link and download the image.
  3. Rename the image to something that seems like it’s not an ad.
  4. Upload the image to your site through the WordPress Media Library.
  5. Customize the embed code to include your new link and image.
  6. Place it on your site.

I’m 100% certain that ad block plugins won’t consider that an ad. And even if the user decides to add a custom filter they won’t be able to block it effectively anyway because they’d have to block every image file on your site.

Fin. Now your ads are ad block resistant.

Suck it, ad block plugins!

How to Keep Ad Block Plugins from Banning Your Ads [5 Minute Task] |

JetpackThe Jetpack plugin for WordPress has quite a few nice bits and pieces. There’s one issue: the developers at Automattic seem to think they’re alone in the world. In their last release, they enabled OpenGraph tags by default with no setting to disable it. Even when you already have WordPress SEO enabled and OpenGraph enabled in that. This is making people freak  out everywhere as double OpenGraph tags lead to problems with Google+ and with Facebook.

Disable OpenGraph in Jetpack

The best solution, honestly, is to install another plugin by Mark Jaquith, called Manual Control for Jetpack. This disables Jetpack automatic activation of new modules. Now you at least have to manually do something for stuff to break on your site when the Jetpack team decides to push new stuff.

This particular OpenGraph feature is in the Publicize module, so you’d think you could disable that, but that doesn’t seem to work. Instead, adding this line in your functions.php should fix this particular problem:

add_filter( 'jetpack_enable_opengraph', '__return_false', 99 );

I understand that disabling OpenGraph in WordPress SEO could work too. I would recommend against that though, especially if you use our Video SEO plugin as that relies on our ability to control OpenGraph tags.

Calling for Automattic to be more responsible

I also want to call on Automattic‘s Jetpack team. You guys should know better than to do stuff like this. You’ve literally cost me about half a days worth of support work now with this single release. It’d be cool if you, just like the rest of Automattic, would work with the community instead of against it.

I know you’re capable of it, because this line in the plugin:

if ( in_array( 'facebook/facebook.php', $active_plugins ) )
add_filter( 'jetpack_enable_opengraph', '__return_false', 99 );

This shows me that you did think about what would happen if Facebook’s plugin was active. That’s logical because people at Automattic worked on that plugin too. Now next time, please look at some of the repositories most popular plugins too and adjust accordingly. At the very least start a conversation with plugin authors about what’s coming up when you create stuff that clashes.

Update: might be good to note, when Facebook’s plugin is active and OpenGraph is enabled in my SEO plugin, my plugin filters the output of the Facebook plugin to prevent two sets of OpenGraph tags. Niall Kennedy of Facebook has actually also submitted a patch to my SEO plugin to improve how it does OpenGraph. That’s how this community should work.

Jetpack and WordPress SEO is a post by on Yoast - Tweaking Websites. A good WordPress blog needs good hosting, you don't want your blog to be slow, or, even worse, down, do you? Check out my thoughts on WordPress hosting!

WordPress SSL SetupAs we’re now running a plugin shop here on, selling our Video SEO plugin, Tag optimizer and soon more, we also have a checkout page. I wanted that checkout page to run on https, for obvious reasons: people fill out their email and, depending on their payment method, their credit card details there. That deserves more security. It turned out not to be as simple as I wanted it to be, but I fixed it. This posts documents my mistakes and issues with my WordPress SSL setup in the hope of preventing you from making them.

You might think: couldn’t I just always load that image over SSL? Yes you could, but that’d be slower, which is why I chose not to do it.

Getting an SSL certificate on your server

This is by far the geekiest bit of this entire process, and not something I want to explain completely. In fact, I didn’t even do this myself. Just like all other customers, you can get a free Comodo SSL certificate, all you have to do is file a support request for your VPS. It’s one of the reasons why I think delivers the best WordPress hosting out there. BTW, they’re running a special at, giving away Amazon gift cards for new VPSes, so if you’ve been thinking about switching, now’s a better time than any to switch to

I had already set up the free certificate a while back, as I wanted to run my WordPress admin over https, but I decided to go for a Extended Validation certificate today. This is a certificate that doesn’t just show an SSL icon in the browsers location bar but actually gives a green background for it and adds the company’s name, like so:

extended validation SSL certificate

Of course this isn’t needed for every site, but I think it’s worth testing if you sell products. It provides just that bit of extra trust that can be so needed for online transactions.

Next: forcing SSL on that one page

There are plugins that can do this for you, most notably WordPress HTTPS, but as I wanted a bit more control and understanding of what was happening, I decided to code it manually. The code consists of two bits, this bit forces the checkout page to be on https all the time and at the same time redirects all pages that do not need to be SSL to an http URL:

function yst_ssl_template_redirect() {
	if ( is_page( 123 ) && ! is_ssl() ) {
		if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
			wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']), 301 );
		} else {
			wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
	} else if ( !is_page( 123 ) && is_ssl() && !is_admin() ) {
		if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
			wp_redirect(preg_replace('|^https://|', 'http://', $_SERVER['REQUEST_URI']), 301 );
		} else {
			wp_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
add_action( 'template_redirect', 'yst_ssl_template_redirect', 1 );

If you’re sure the URL will always be “clean”, as in, without parameters, this can be even simpler, but in this case I needed it to work with the URL parameters that Easy Digital Downloads uses. The number 123 is the ID of the checkout page, you should of course replace with your own page ID if you use this code.

Now we also want get_permalink to return the right URL, so let’s filter its output:

function yst_checkout_page_ssl( $permalink, $post, $leavename ) {
	if ( 123 == $post->ID )
		return preg_replace( '|^http://|', 'https://', $permalink );
	return $permalink;
add_filter( 'pre_post_link', 'yst_checkout_page_ssl', 10, 3 );

This way if something links to the checkout page, the redirect isn’t even needed as the link is already an https link.

MaxCDN, W3 Total Cache & SSL: a golden trio

My favourite WordPress CDN provider MaxCDN, works great with W3 Total Cache. It does so even with SSL, if you know how to set it up. It’s very bloody simple too once you know it: for each CNAME, you enter not just the CNAME, but you follow it by a comma, and then enter the SSL version. For me, this looks like this (click for larger version):

WordPress SSL Setup: W3TC MacCDN SSL settings

This settings makes W3 Total Cache use the first hostname for http requests, and the second one for https. With a rather image heavy site like this one that’s a golden thing.

Broken SSL: fixing links in theme files

broken SSLIf you load a page over SSL, all the other files that are loaded on that page should also be loaded over SSL for it to not be “broken”. This means that every single image, javascript file, stylesheet etc. needs to be loaded over SSL. WordPress will fix a lot of this for you, but you’ll probably encounter some issues, as did I, causing a broken SSL icon in the location bar, as shown above here.

In my case, within my theme’s stylesheet, I was loading a google web font file. That shouldn’t be an issue, of course, but I was loading that font file over http, instead of using what’s called a protocol relative link. Every time you’re embedding images, javascript or CSS files, you should be using a protocol relative link. Instead of linking to:,600

I’m now linking to:


As you can see, I left out the http:, this will make the browser use the current protocol to fetch that file. This means that when a user is on plain http, it’ll use that, which is faster, but if the user is on https, it’ll use the safe https link.

Bonus: WordPress SSL setup for the admin panel

Now that you’ve set all this up, you might as well use that SSL certificate for your admin too. That part is actually pretty easy. Just drop this in the wp-config.php:

define('FORCE_SSL_ADMIN', true);

That’ll force the entire admin over SSL, which is what you want in most cases. If that is too slow for you though, you could also decide to just force the login page over SSL:

define('FORCE_SSL_LOGIN', true);

This will force the login and registration pages to be SSL. I think you should go for the first option though, and run your entire admin over SSL.

Conclusion: WordPress SSL setup is easy, do it!

With all these tips, there’s really no reason anymore why you couldn’t run any page where a user submits private data on SSL. So, just do it!

WordPress SSL setup tips & tricks is a post by on Yoast - Tweaking Websites. A good WordPress blog needs good hosting, you don't want your blog to be slow, or, even worse, down, do you? Check out my thoughts on WordPress hosting!

Infinite Scroll
Everybody seems to be talking about Photon. Nobody really seemed to notice the Infinite Scroll feature added to the latest Jetpack. While it is slightly buggy, it’s pretty neat nevertheless. It’s also pretty easy to add support for in your own themes. I added it to this blog, just to see how. :)

So, here’s how you do it.

Step 1: Use Template Parts

Look at the HTML produced by your main Loop. The main one being the one that displays the main set of posts. This is usually in the index.php file.

Let’s say that HTML looks like this (overly simplified, of course):

<div id="content">
	<div class="post">...</div>
	<div class="post">...</div>
	<div class="post">...</div>

Each one of those posts is produced inside the loop, while the content container is outside it. Now let’s look at a simplified version of what The Loop might look like in PHP:

<?php while (have_posts()) : the_post(); ?>
        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
... all the post creation stuff here ...
<?php endwhile; ?>

What we need to do is to separate that “post” from the Loop itself, in a way that the Infinite Scroll code can then produce the post independently. With Template Parts, this is actually rather easy. We just cut and paste all that post-producing code, and put it in a new “content.php” file. Then we change the Loop into this:

while (have_posts()) : the_post();
	get_template_part( 'content', get_post_format() ); 

The get_template_part function will load that content.php file for us and include it there.

See a template is a file listed in the Template Hierarchy. But a template part is a file that contains only part of a template, and you can name them yourself. In this case, we named it “content”. It will become, therefore, content.php in the theme.

We also created a mini-hierarchy for ourselves while we were at it, using the Post Formats. What this means is that if I want to display, say, the “quote” format posts differently, I can copy content.php to content-quote.php, and make my changes in there. Then quotes will be displayed however I like in that new template part. And if content-quote.php doesn’t exist, then it falls back to using content.php, just like the normal fallbacks.

By separating out the Post from the surrounding loop that it’s in, then each post can be generated independently, sent over the wire via Javascript, and inserted into the page. Thus, Infinite Scroll can do the job.

Step 2: Enable Infinite Scroll

A theme can declare support for infinite scroll using add_theme_support(), like so:

add_theme_support( 'infinite-scroll', array(
	'container'    => 'content',
) );

The “container” is the ID of the element in the page that was our wrapper class. Let’s go back to that HTML again:

<div id="content">
	<div class="post">...</div>
	<div class="post">...</div>
	<div class="post">...</div>

See how the “id=content” is the big wrapper for our posts? Well, we tell the Infinite Scroll code that, it then uses it in the Javascript to know where to append the new posts to. Easy.

Step 3: Finishing touches

Simply speaking, that’s all there really is to it. But, there’s additional ways to customize it for your particular theme, to look better. Each of these is an option you can add to that add_theme_support call. Let’s go over them briefly:

Footer: You may have noticed when you enabled this and test it that you now have a sort of white footer overlay at the bottom of the page. This provides the page with a footer space that scrolls with the page, giving it a sort of finished look. Some people may like it, some not so much. We can use the footer option to adjust it.

First, using ‘footer’=>false will simply turn it off.

Alternatively, giving it the ID of some other element on the page will make it match that element’s width. For example, if you have HTML that looks like this:

<div id="page">
	<div id="content">
		<div class="post">...</div>
	<div id="sidebar">

..then using ‘footer’=>’page’ would make it match the width of the “page” element, so as to be the proper width across the screen to fit better with the page.

Type: Infinite Scroll supports two methods of loading new posts. One method is called ‘scroll’, where new posts are loaded as the user reaches the bottom of the page. When they scroll, essentially. The other is called ‘click’, which adds in a new button towards the bottom of the posts, and when you click it, it loads more posts. You can force one type or the other using the ‘type’ option.

Footer Widgets: Some themes support having widget spaces in the footer. This has become fairly commonplace after Twenty Ten did it. Well, if you’re using the scroll type, then the widgets won’t be seen for a while on some blogs, since it will just load in more posts and keep pushing that footer further down. You could set the type to click to allow the footer to actually be seen.

The ‘footer_widgets’ option lets you specify a widget space that you registered with register_sidebar(). It will check that space to see if there’s any widgets in it. If there are, then it will automatically set type to “click” so that those widgets can be seen. If not, then it will let the type stay as “scroll”. Thus, it can choose the type intelligently, depending on whether widgets exist in the footer or not.

Wrapper: If you have some complex HTML for your posts, then you can give the ‘wrapper’ option a classname to use. It will wrap the returned posts in a div with that custom classname for you. This also allows you a way to perform styling tricks on those just-loaded posts.

Render: The ‘render’ option gives you an alternative to making a content template part. You can give this a function name, and that function will be called to render the posts instead. If you’re writing a theme, I suggest using the content template part instead. It’s easier and way more flexible.

Posts per page: By default, the Infinite Scroll module makes the page show 7 posts only, then more load when you scroll down (for the ‘scroll’ type). This is smaller than most people’s settings (default of which is 10), but it doesn’t matter since the whole point is to make it load new posts when you scroll down to them. If you happen to need a different number, you can use the ‘posts_per_page’ option to change the number.

There’s also a few things you can do with CSS.

When infinite scrolling is enabled, then body_class (which you should have been using in the body tag anyway) will get the “infinite-scroll” class added to it. If the type setting is ‘scroll’ instead of ‘click’, then the class “neverending” will be there too. Also, once the user gets to the last post, the javascript code adds an “infinity-end” class to the body, meaning that you can style what happens when the user gets to the end. Jetpack’s documentation page suggests hiding the normal footer until the user actually reaches it, using CSS like this:

/* Hides navigation links and site footer when infinite scroll is active */
.infinite-scroll #navigation,
.infinite-scroll.neverending #footer {
	display: none;
/* Shows the footer again in case all posts have been loaded */
.infinity-end.neverending #footer {
	display: block;

But obviously you can use it for more than just this functionality; because it’s on the body, the classes can be used to adjust anything on the page, and make them different with the infinite scroll than without it.

You can also style the “span.infinite-loader”. This is the spinning handle thing that shows up at the bottom of posts, before the new ones load in. Honestly, the loading is pretty quick and the default style looks pretty good to me. You can adjust the style of it if you like, perhaps to make it more centered on the container.

The div#infinite-handle will be the box that shows up to load more posts, if the type is set to “click”. You can use this to reposition the box, make it wider, change the color, etc.

Finally, if you are doing anything extremely tricky with Javascript, loading in new posts may be not handled precisely well by your existing code. The official support page methods a post-load event fired on document.body that occurs when the posts are loaded. You should refer to that documentation for more info on it, if needed.


On the whole, it’s a clever module to add to Jetpack. It still has some problems with specific sorts of content (some videos display very wonky sometimes), but I’m sure they’ll have that sorted out before too long. Adding support for it in your theme might also get you thinking about Template Parts and how to use them, and that’s definitely a good thing to be doing.

As promised in my post yesterday, today marks the day for a new release of my Video SEO plugin. This one brings support for yet another few plugins and some more: two new video hosting platforms: Wistia and Vippy.

Wistia support: embedding and SEO

Wistia logoThe support for Wistia that is added in this release was on the list from day one of this plugins release. It was one of the most highly requested video platforms to be supported, but there was an issue: there’s no official Wistia plugin other than a small thing that preserves the embed code from being mangled, even though Wistia itself does support oEmbed.

So I decided to go the extra mile and add oEmbed support for Wistia through the plugin, which, in itself is fairly easy. But then I found out that oEmbed in WordPress really has no way to filter the URL you’re sending to the video provider, and I needed to add variables to get the SEO version of the embed code. A lot of thinking later, I decided, heck, let’s try it with the normal embed code. And it worked, miraculously, Google found it and properly showed it as a video.

WordPress 3.5 adds a filter for the oEmbed URL, which means that when you use a URL in the editor, I can add parameters to that to further optimize, so we’ll do that further down the line. For now, this update makes it easy to embed Wistia videos, just drop the URL to the video on one line and it should embed the video properly, recognize it in Video SEO and do all the optimization for you. Gotta love simplicity.

Vippy support

Vippy logoAnother video platform that had been requested literally on day one of the plugin being released was Vippy, requested by my SEOktoberfest buddy Geir. His colleague from Metronet, well known WordPress developer Ronald Huereca, patched the plugin to automatically support Vippy when the Vippy WordPress plugin is being used.

Supported plugins & themes

This release adds support for two video embedding plugins, FlowPlayer and WP Video Lightbox. Which means we now support 12 video plugins. We now also support the embed codes for YouTube and Vimeo videos from the popular Weaver theme, even though I think it’s unwise to use those, because when you switch themes, your videos will no longer play.

What else do you want?

If you’re a user of the plugin: what else would you like to see? If you’re not a user yet but you do do video, what’s holding you back? Please let me know in the comments! Also, if you don’t have the plugin yet, buy it here.

Video SEO for Wistia & Vippy is a post by on Yoast - Tweaking Websites. A good WordPress blog needs good hosting, you don't want your blog to be slow, or, even worse, down, do you? Check out my thoughts on WordPress hosting!

About 2 months ago I released my first premium plugin for WordPress, my Video SEO plugin. A lot of people have asked me about the how and why of the selling and I thought it’d be a good idea to outline that in a post.

Why sell premium WordPress plugins?

Of course we got some backlash for making a plugin available to the world and daring to charge for it. Unfortunately there are still people in the WordPress community who think everything should be free. What they don’t understand is that not everything can be free.

I’m the author of several highly popular WordPress plugins. My Google Analytics plugin is nearing 4 million downloads and my WordPress SEO plugin has over 2.5 million downloads. They’re both free. I’m not saying making those free plugins hasn’t made me any money, of course it has. There are some (though few) donations, there are people ordering website reviews, hiring me as a consultant etc. But we’d make more money if we didn’t release those plugins. That’s the cold and harsh reality. I’m not willing to stop releasing those plugins though. I’ve always said they’ll be free and I want to keep those that I’ve released for free, free.

Other plugins though, like the Video SEO plugin, require a bit more support and continuous updating to work with video networks, new embed codes, changes from Google, etc. When I was looking at what needed to be done for that, I knew that releasing it for free was not going to be a viable option. Which is why we made it premium. Some people think its price tag $89 is too much. Well, in that case, you’re not seeing the value yet and I probably need to explain better. Anyone who knows what this kind of search traffic is worth to their site knows that $89 is dirt cheap.

Making money directly == more time to invest in development

Getting paid to develop a plugin means you can invest more time. I don’t have to make my money doing consulting on the side now, working on those plugins is paying for itself. This means development on these plugins accelerates quite a bit. I’ve been able to add support for a nice list of video embedding plugins to the Video SEO plugin because of that and the next version, due tomorrow, will add two new video hosting providers, Wistia and Vippy.

I can honestly say that this has done very well for us. The plugin has made us a nice amount so far and users seem to be very happy. Reviews like this one from Bas and this tweet from Bryan make me very happy and proud:

You now know the why, on to the how:

How we sell premium WordPress plugins

When I decided I wanted to go premium, I needed an infrastructure to sell those plugins. I looked at ThemeForest / CodeCanyon and several other marketplaces. All of them wanted an extraordinary percentage of sales, considering how much extra sales I estimated they would add. Of course I do have a head start, being in this industry for a while and having been blogging on this blog for at least 7 consecutive years.

So, I decided to go self hosted. I tried several ecommerce plugins and while each had their benefits, they all failed to do well what I needed them to do best: deliver digital goods. All of them failed, until I found Easy Digital Downloads.

This plugin was built with the exact purpose of what I needed to do in mind, and built by a coder who actually knows how to write decent code, Pippin Williamson. He has a good model around it too, the core plugin is free and can be found on, while he has a growing set of extensions of which some are premium.

The first ones you’ll want to grab are for payment gateways. I’m not in the US, so I can’t use Stripe, unfortunately, which left me with PayPal (which is built-in and free) and Moneybookers. It’s not ideal, so I’m trying to figure out a better solution, if you have ideas, do let me know in the comments.

I use another one of these premium extensions, the software licensing one, to generate my license keys and several others to perform various other tasks and tricks, like a MailChimp extension to sign people up to my mailing list when they buy, an AWS S3 extension to host my files on Amazon, etc. etc.

Google Analytics eCommerce tracking for Easy Digital DownloadsIn fact, I even wrote my own, an extension to track sales in Google Analytics ecommerce tracking, which is now for sale for $15 on the EDD site. It has allowed me to optimize my sales process already, and if you start selling, I hope it’ll help you too. The fact that it was relatively easy to write this extension is a testament to how well written Easy Digital Downloads is.

Conclusion: use Easy Digital Downloads & sell!

If you’ve ever considered selling plugins or ebooks or other digital goods, this is the plugin you need and it’s written by the kind of guy you want to rely on. Pippin has been tremendously good in support and has given some very smart advice.

Also, I can definitely recommend selling plugins. It’s funny and a bit sad at the same time, but I realized the other day that while I get abusive, support demanding emails for my free plugins on a daily basis, each and every paid user that needed support has been great to work with. It’s as though when people pay for stuff, they respect that you have a job to do, whereas some free plugin users seem to not think about you at all. Loads of people have been telling me I should charge for my WordPress SEO plugin. I won’t, but it’s good to know that there are a lot of people willing to pay for my work.

We’re very close to releasing our second premium plugin, one that is geared towards Local SEO, make sure you sign up for the newsletter on the right or below this post to get news about that and the other cool stuff we have planned.

I would love to hear what you think of all this, let me know in the comments!

Why & how we sell premium WordPress plugins is a post by on Yoast - Tweaking Websites. A good WordPress blog needs good hosting, you don't want your blog to be slow, or, even worse, down, do you? Check out my thoughts on WordPress hosting!