The definitive guide to higher rankings for WordPress sites
WordPress is one of the best, if not the best content management systems when it comes to SEO. That being said, spending time on your WordPress SEO might seem like a waste of time, it most definitely is not. Optimizing your site to the best practices outlined in this article will help you improve your rankings, gain more subscribers and have a better website in general.
As we take quite a holistic view on (WordPress) SEO, meaning that we think good SEO should be engrained in all aspects of your online marketing and PR, this guide covers quite a lot of ground and is therefore a long read. Check out the table of contents below for some quick jumping around.
Updates to this WordPress SEO article
This article has been kept up to date with the best practices for WordPress SEO since early 2008 and the release of WordPress 2.5, the most recent update was on Nov 2015, with WordPress version 4.0 being the most current release. The goal of this article is to let all the info of all the different articles we wrote about the topic, here and on other sites, fall into one big piece: the final WordPress SEO tutorial.
The first versions of this article were heavily based on using a plugin called HeadSpace and a series of other plugins. We’ve since released our own Yoast SEO plugin which replaces quite a few of those. That plugin has proven so powerful that sites like SearchEngineLand, and The Next Web now all use it. This Yoast SEO plugin is very stable and ready to use and this article now assumes you’re using it.
If you’re using another SEO plugin, like All in One SEO pack or Ultimate SEO, but would like to switch and make use of our free and extremely powerful SEO plugin, we’ve written a migration guide for you. It’s a really easy process. If you’re not using an SEO plugin yet, grab our Yoast SEO plugin and get going.
As search, SEO, and the WordPress platform evolve we will continue to keep this article up to date with best practices. Be sure to subscribe to our WordPress & SEO newsletter to receive notification when we update this article.
Need your website reviewed?
If you need an outside look at your WordPress install, you might consider our website review. The results of this review contain a full report of improvements for your site, encompassing our findings for improvements in different key areas such as SEO to Usability to Site Speed & more. From only $699, you’ll receive a report that represents a much larger value in turn-over and profit. Get it now!
Table of Contents
- The definitive guide to higher rankings for WordPress sites
- 1 Basic WordPress SEO
- 2 Template optimization
- 3 Advanced WordPress SEO and duplicate content
- 4 A site structure for high rankings
- 5 Conversion optimization
- 6 Comment optimization
- 7 Off site blog SEO
- 8 Measuring results
- 9 Conclusions on WordPress SEO
1 Basic WordPress SEO
Out of the box, WordPress is a pretty well optimized system, and does a far better job at allowing every single page to be indexed than every other CMS we have used. But there are a few things you should do to make it a lot easier still to work with.
1.1.1 Permalink structure
The first thing to change is your permalink structure. You’ll find the permalink settings under Settings → Permalinks. The default permalink is
?p=<postid>, but we prefer to use either
/category/post-name/. For the first option, you change the setting to
To include the category, you select “Custom Structure” and change the value to
/%category%/%postname%/. If you previously had
?p=<postid> as your permalink WordPress will take care of all the redirects for you. This is also true if you change from
/%category%/%postname%/. If you change from any other permalink structure, you might want to consult our article on changing your WordPress permalink structure and the tool that you’ll find within it.
1.1.2 WWW vs non-WWW
You need to think about what you want your site to show up as, www.example.com or simply example.com. Make sure that in your general settings, under Settings → General, the version you want to show up is properly reflected:
You will also want to set this correctly in Google Search Console. Make sure to set up your site with Google Search Console and set the preferred domain, you can find this setting under Settings → Preferred domain:
Where you can set it:
1.1.3 Stop words
The last thing you’ll want to do about your permalinks to increase your WordPress SEO, is remove so called stopwords. Words like “a”, “and”, “the” etc. As of version 1.1.6, our Yoast SEO plugin will automatically remove stop words from your slugs once you save a post, so you won’t get those ugly long URL’s when you do a sentence style post title.
This is generally not something you want to change after posts have gone live. If people have already linked to it, try to not change the permalink anymore and if you do, make sure the post is properly redirected. In most cases WordPress should redirect the old URL to the new one but if it doesn’t you need to make the redirect manually.
1.1.4 To SSL or not to SSL
In 2014, Google announced that they’d give a (admittedly minor) ranking benefit to HTTPS / SSL sites, and because of that, more and more sites have switched over to SSL. It might be a good idea for you too. If you want to move to SSL, we have an article with tips & tricks for moving to HTTPS right here.
1.2 Optimize your Titles for SEO
The title, the contents of your page’s
<title> tag, is one of the single most important factors for ranking in the search results. Not only is it the literal title of the tab or browser window, it’s also the first line people see in the search results, followed by the URL and the snippet, usually the meta description combined with a date:
On many blogs, the title for blog posts is still “Blog title » Blog Archive » Keyword rich post title” or “Blog title » Keyword rich post title”. For your WordPress blog to get the traffic it deserves, this should be the other way around, for two reasons:
- Search engines put more weight on the early words, so if your keywords are near the start of the page title you are more likely to rank well.
- People scanning result pages see the early words first. If your keywords are at the start of your listing your page is more likely to get clicked on.
This means the ideal title for that plugin page on WordPress.org would actually be “WordPress SEO by Yoast > WordPress Plugins > WordPress” instead of what it is now. For more info on how to craft good titles for your posts, see this excellent article and video by Aaron Wall: Google & SEO Friendly Page Titles.
1.2.1 Controlling titles with the Yoast SEO plugin
You can control your SEO titles with our Yoast SEO plugin. There are two parts of the plugin that control these. First of all, as soon as you install & activate the plugin, you get an SEO section in your admin. Navigate to SEO → Titles & Metas and you’ll see a bunch of tabs for different types of pages on your site. For each post type and taxonomy you can set a so called Title Template (as well as meta description templates but we’ll get to those later). For posts on our site this looks like this:
There’s a bunch of variables you can use in the titles and meta description, they’re all listed and explained in the help tab on the top right of the page. Be sure to check whether the template actually works and you’re not getting a duplicate site title for instance. If this is the case, you might need to check the “Force rewrite” checkbox on the same page or follow the instructions on that page to modify your template.
For the other pages, we have the following settings:
- Categories, Tags and other taxonomies:
%%term_title%% %%sep%% Archives %%page%% %%sitename%%
- Search pages:
You searched for %%searchphrase%% %%sep%% %%sitename%%
- 404 pages:
Page not found - Error 404 %%sep%% %%sitename%%
- Author archives:
%%name%% %%sep%% Author at %%sitename%%
There are some other cool features, for instance: you can use
%%cf_<custom field name>%% to use a custom field, this can be either a post custom field, sometimes known as post meta value, or a user meta value. In this particular case it’s the custom field “role” we use to store the role of a user within our company.
The %%sep%% template code gets replaced by the separator you select on the first tab:
1.2.2 Optimizing individual posts
So now that we’ve set decent templates, we can start to optimize individual posts and pages. For that we use the snippet preview added by the Yoast SEO plugin:
This preview will automatically take the values you’ve already filled in in your blog post and apply them to your template, but you can also override the title completely using the title field just below it:
The input will show a warning below it if your title is becoming too long. The title length is not a fixed amount of characters but rather limited to the length of the display in the search results.
For titles the following things are important:
- They should always contain your brand, preferably at the end, so people may recognize you in consecutive searches.
- They should always contain the keyword you think is most important for the current post or page, which we’ll call the focus keyword from now on. The focus keyword should preferably be at the beginning of the title.
- The rest of the title should entice people to click.
1.3 Optimize your descriptions
Now that we’ve got proper titles, we should start to focus on meta descriptions. The meta description can be used by search engines to show in the snippet, it’s the black piece of text shown beneath the URL. The meta description is usually only used when it contains the keyword the searcher was searching for.
Some plugins, most specifically the All in One SEO plugin, use so called “automated descriptions”. They use the first sentence of a post to fill the meta description by default. That’s not very smart. That first sentence might be an introductory sentence which has hardly anything to do with the subject.
Thus, the only well written description is a hand written one, and if you’re thinking of auto generating the meta description, you might as well not do anything and let the search engine control the snippet… If you don’t use the meta description, the search engine will find the keyword searched for in your document, and automatically pick a string around that, which gives you a bolded word or two in the results page.
Auto generating a snippet is a “shortcut”, and there are no real shortcuts in (WordPress) SEO (none that work anyway).
So, use the meta description field you find in the Yoast SEO plugin to write a meta description. Make sure it entices the reader to click through and make sure that it contains the focus keyword of your post or page at least once.
You’ll notice we do not mention meta keywords. We don’t use them and neither should you, for an explanation, read this article by Joost: meta keywords and why I don’t use them.
1.4 Image optimization
An often overlooked part of WordPress SEO is how you handle your images. By doing stuff like writing good alt tags for images and thinking of how you name the files, you can get yourself a bit of extra traffic from the different image search engines. Next to that, you’re helping out your lesser able readers who check out your site in a screen reader, to make sense of what’s otherwise hidden to them.
Using the proper alt attributes for images is also something that is checked in the Page Analysis functionality of our Yoast SEO plugin. We have a longer article on Image SEO that will give you more tips to finetune this.
1.5 XML sitemaps
To tell Google and the other search engines that your site has been updated, you can use XML Sitemaps. Our Yoast SEO plugin contains an XML Sitemap module by default that you just have to enable. Go to Settings → XML Sitemaps and click the checkbox (if it isn’t already on):
As soon as you’ve checked the checkbox and hit Save, it’ll give you some options but in most cases you won’t need those. It generates an XML sitemap for all your posts, pages, custom post types and all your taxonomies like categories and tags and (if applicable) other custom taxonomies.
When you publish a new post or page, the XML sitemap is automatically submitted to Google & Bing allowing them to easily (and quickly) find your new content.
Other than most other XML sitemap plugins, this plugin doesn’t generate a static file, which is a very intensive process, especially for large sites. This means there is no “action” on publish, which slows down the publishing of the post. Instead it generates XML sitemaps as a sort of template using WordPress rewrites, which is much faster while also allowing caching plugins to cache the output.
It’s also being smart about splitting those sitemaps up into smaller bits, so Google only has to fetch one new XML “sub”-sitemap when a post is published, because the other sitemaps haven’t been changed, using the date modified options.
From an SEO perspective, it’s better than most others because it also includes the images in each post, which makes your images rank (better) in Google Image Search. It also integrates tightly with the rest of our SEO plugin, meaning that a no indexed post automatically is left out of the XML sitemap, with the option to “force” it in.
Lastly, it has a pretty complete API, allowing us and other developers to plugin extra sitemaps, which means we can do things like create our Local SEO, News SEO and Video SEO extension. These extensions respectively generate a news xml sitemap and video xml sitemap.
2 Template optimization
You’ll want to add breadcrumbs to your single posts and pages. Breadcrumbs are the links, usually above the title post, that look like “Home > Articles > WordPress SEO”. They are good for two things:
- They allow your users to easily navigate your site.
- They allow search engines to determine the structure of your site more easily.
These breadcrumbs should link back to the homepage, and the category the post is in. If the post is in multiple categories it should pick one. For that to work, adapt
page.php in your theme, and use the breadcrumbs from our Yoast SEO plugin. You find the settings for the breadcrumbs in the SEO → Internal Links settings page.
Although most themes for WordPress get this right, make sure your post title is an
<h1>, and nothing else. Your blog’s name should only be an
<h1> on your front page, and on single, post, and category pages, it should be no more than an
<h3>. Your sidebar shouldn’t be crammed with
<h3>‘s either etc.
These are easy to edit in the
page.php templates. To learn more about why proper headings are important read this article on Semantic HTML and SEO and our article about the Heading Structure for your Blog (from which a lot applies to non-blog WordPress sites too).
2.3 Clean up your code
2.4 Aim for speed
A very important factor in how many pages a search engine will spider on your blog each day, is how speedy your blog loads. You can do three things to increase the speed of your WordPress.
- Optimize the template to do as small an amount of database calls as necessary. We’ve highlighted how to do this in our post about speeding up WordPress.
- Install a caching plugin. We recommend you use W3 Total Cache if you’re technically savvy or WP Super Cache if you’re not.
- W3 Total Cache works even more magic when combined with a CDN like MaxCDN. Read more about WordPress CDN stuff here.
Also, be aware that underpaying for hosting, is not wise. If you actually want to succeed with your link-bait actions, and want your blog to sustain high loads, go for a good hosting package. We use VPS.net ourselves, and they’ve proven to be better than most everything we’ve seen in hosting, but we’ve got great experience with Synthesis too. If you want to know more be sure to read our article about WordPress hosting.
2.5 Rethink that sidebar
Do you really need to link out to all your buddies in your blogroll site wide? Or is it perhaps wiser to just do that on your front page? Google and other search engines these days heavily discount site wide links, so you’re not really doing your friends any more favor by giving them that site wide link, nor are you helping yourself: you’re allowing your visitors to get out of your site everywhere, when you actually want them to browse around a bit.
The same goes for the search engines: on single post pages, these links aren’t necessarily related to the topic at hand, and thus aren’t helping you at all. Thus: get rid of them. There are probably more widgets like these that only make sense on the homepage, and others that you’d only want on sub pages.
Some day you will probably be able to change this from inside WordPress, right now it forces you to either use two sidebars, one on the homepage and one on sub pages, or write specific plugins.
2.6 HTML sitemaps
For some sites an HTML sitemap might be nonsense, especially when your site is really a blog, for more corporate type sites with several levels of pages an HTML Sitemap might actually be very beneficial for both users and search engines. We’ve written an article on how to create an HTML Sitemap Page Template which would be a good start to get one going for your WordPress site.
3 Advanced WordPress SEO and duplicate content
Once you’ve done all the basic stuff, you’ll find that the rest of the problems amount to one simple thing: duplicate content. Loads of it in fact. Out of the box, WordPress comes with a few different types of taxonomy:
- date based
- category based
- tag based
Next to that, it seems to think you actually need to be able to click on from page to page starting at the frontpage, way back to the first post you ever did. Last but not least, each author has his own archive too, under
/author/<author-name>/, resulting in completely duplicate content on single author blogs.
In essence that means that, worst case scenario, a post is available on 5 pages outside of the single page where it should be available. We’re going to get rid of all those duplicate content pools, by still allowing them to be spidered, but not indexed, and fixing the pagination issues that come with these things.
3.1 Noindex, follow archive pages and disable some archives
Using the Yoast SEO plugin, make sure to prevent indexing (or even existence) of archive pages that do not apply for your site. You do this under SEO → Titles & Metas, where you’ll find the following options on the “Other” tab:
The settings above are the settings for our site. As you can see, we’ve completely disabled the date based archives, as we don’t use those. Any date based link will redirect to our homepage because of this setting. We’ve left the author archives untouched, but we have checked a checkbox on the General tab, which makes the subpages of those archives be noindex, follow by default. So you’ll never land on page 2 of an archive on our site from the search engines (change this on SEO → Titles & Metas → General tab):
On smaller sites it might make sense to noindex either the category or the tag structure, but in our experience noindexing those on yoast.com does little to no change at all.
There is one type of archive that is noindex,follow by default as well in the Yoast SEO plugin: the search result pages. This is a best practice from Google for which a setting is left out as you should just have that anyway.
A lot has changed in how Google handles paginated archives recently when they introduced their support for
rel="prev" links. We’ve written an article about that:
rel="prev" for paginated archives, which is a bit too technical to fully list here, but suffice to say our Yoast SEO plugin takes care of all the needed changes automatically.
3.2 Disable unnecessary archives
If your blog is a one author blog, or you don’t think you need author archives, use WordPress SEO to disable the author archives. Also, if you don’t think you need a date based archive: disable it as we have. Even if you’re not using these archives in your template, someone might link to them and thus break your WordPress SEO…
Thirdly, you’ll want to make sure that if a bot goes to a category page, it can reach all underlying pages without any trouble. Otherwise, if you have a lot of posts in a category, a bot might have to go back 10 pages before being able to find the link to one of your awesome earlier posts…
There’s an easy fix, in fact, there are several plugins that deal with this. Our favorite one by far is WP-PageNavi, maintained by Scribu, one of the best WordPress developers around. If you have the Genesis Theme like we do here on Yoast.com, you can just enable numeric navigation under Theme Settings → Content Archives.
In February 2009, the major search engines introduced the
rel="canonical" element. This is another utility to help fight duplicate content. WordPress has built-in support for canonical link elements on single posts and pages, but it has some slight bugs in that. It doesn’t output canonical links on any other page. With our Yoast SEO plugin activated, you automatically get canonical link elements for every page type in WordPress.
4 A site structure for high rankings
Blogs are spidered so easily due to their structure of categories, tags etc.: all articles are well linked, and usually the markup is nice and clean. However, all this comes at a price: your ranking strength is diluted. They’re diluted by one simple thing: comments.
4.1 Pages instead of posts
You’ve probably noticed by now, or you’re seeing now, that this WordPress SEO post is actually… not a post. It’s a page. Why? Well for several reasons. First of all, this article needed to be a “daughter”-page of our WordPress page, to be in the correct place on this blog. Secondly, to rank for the term [WordPress SEO], this article has to have the right keyword density. And that’s where things go wrong. Comments destroy your carefully constructed keyword density.
That’s why we decided to make our most important articles into pages. That way, you can easily update them and do a new post about what you’ve changed.
4.2 New wine in an old bottle
If a post on your blog becomes incredibly popular and starts to rank for a nice keyword, like this one did for WordPress SEO, you could do the following:
- create a new page with updated and improved content
- change the slug of the old post to
- publish the new page under the old post’s URL, or redirect the old post’s URL to the new URL
- send an e-mail to everyone who linked to your old post that you’ve updated and improved on your old post
- wait for the links to come in, again;
- rank even higher for your desired term as you’ve now got:
- more control over the keyword density
- even more links pointing at the article
- the ability to keep updating the article as you see fit to improve on it’s content and ranking
Some among you will say: I could have 301 redirected the old post to the new one with the same effect. True. Except: you’d lose the comments on the old post, which is in our opinion a sign of disrespect to people who took the time to comment, and 301 redirects take quite a bit of time sometimes. Of course you should treat this technique with care, and not abuse it to rank other products, but we think it can be done in everyone’s benefit. For instance this article: if you came here through a social media site like Facebook, expecting an article about WordPress SEO, that’s exactly what you got!
4.3 Linking to related posts
One way of getting search engines to get to your older content a bit easier, thus increasing your WordPress SEO capabilites a LOT, is by using a related posts plugin. These plugins search through your posts database to find posts with the same subject, and add links to these posts.
There are quite a few related posts plugins but we tend to stick with custom code in our theme. A very good alternative is Microkid’s related post plugin, which lets you manually pick related posts. This might cost a bit more time before you hit publish but might very well be worth your while.
There are also a lot of plugins that will automatically link certain keywords to certain posts. We do not like this at all as we find it to look very spammy.
4.4 Go easy on the tags
One of the most common issues we encounter on sites in our website reviews is the overuse of tags. Note that a tag in and of itself does not improve your SEO. The only way it improves your SEO is by relating one piece of content to another, and more specifically a group of posts to each other.
5 Conversion optimization
Get those readers to subscribe!
A lot of bloggers still think that because their blog is a blog, they don’t have to optimize anything. Wrong. To get people to link to you, they have to read your blog. And what do you think is easier: getting someone who is already visiting your blog to visit regularly and then link to your blog, or getting someone who visits your blog for the first time to link to your blog immediately? Right.
One of the things we’ve found to be very important, and more bloggers seem to have found this, is that an RSS subscribe button is very important, as is offering a way to subscribe by e-mail. We offer a weekly e-mail subscribe options, using MailChimp, and have found that people tend to click through on those the most.
Another thing to be very aware of is when people might want to subscribe to your blog. If they’ve just finished reading an article of yours, and really liked it, that would be the ideal time to reach them, right? That’s why more and more people are adding lines like this to the end of their posts: “Liked this post? Subscribe to our newsletter and get loads more!”
Another great time to get people to subscribe is when people have just commented on your blog for the first time, for which purpose we use our own comment redirect plugin. Which leads us to the next major aspect of WordPress SEO:
6 Comment optimization
Get those readers involved
Comments are one of the most important aspects of blogs. As Wikipedia states:
The ability for readers to leave comments in an interactive format is an important part of many blogs.
Comments are not only nice because people tell you how special you are, or that you made a mistake, or whatever else they have to tell you. Most of all they’re nice, because they show engagement. And engagement is one of the most important factors of getting people to link to you: they show you they care, and they open the conversation, now all you have to do is respond, and you’re building a relationship!
6.1 How you get people to comment
The easiest way of getting people to do anything is: ask them to do it. Write in an engaging style, and then ask your blog’s readers for an opinion, their take on the story etc.
Another important things is your comment links. Is your comment link “No comments »”? Or is it “No Comments yet, your thoughts are welcome »”? Feel the difference? You can change this by opening your
index.php template, search for
comments_popup_link() and changing the texts within that function.
6.2 Bond with your commenters
Another thing to do is thank people when they’ve commented on your weblog. Not every time, because that get’s annoying, but doing it the first time is a very good idea.
Justin Shattuck thought the same, and created the Comment Relish plugin which sends an email after someone has made his first comment, unfortunately, this plugin is no longer maintained. Another option, which is maintained and is also a bit less obtrusive / spammy, is to install our comment redirect plugin. This plugin allows you to redirect people who have made their first comment to a specific “thank you” page.
6.3 Keeping people in the conversation
Now that people have joined the conversation on your blog, you should make sure they stay in the conversation. That’s why you should install the subscribe to comments plugin, that allows people to subscribe to a comment thread just like they would in a forum, and sends them an e-mail on each new comment. This way, you can keep the conversation going, and maybe your readers will be giving you new angles for new posts.
7 Off site blog SEO
If you’ve followed all of the above WordPress SEO advice, you’ve got a big chance of becoming successfull, both as a blogger and in the search engines. Now the last step sounds easy, but isn’t. Go out there, and talk to people online.
7.1 Follow your commenters
There’s been a movement on the web for a while now that’s called the “You comment – I follow“. They want you to remove the nofollow tag off of your comments to “reward” your visitors. Now we do agree, but… That get’s you a whole lot of spam once your WordPress blog turns into a well ranked blog… What we do advocate though, is that you actually follow your visitors! Go to their websites, and leave a comment on one of their articles, a good, insightful comment, so they respect you even more.
If you think that’s a lot of work, do realize that, on average, about 1% of your visitors will actually leave a comment. That’s a group of people you have to take care of!
7.2 Use Twitter
Twitter is a cool form of micro-blogging / chatting / whatever you want to call it. Almost all the “cool” people are on there, and they read their tweets more often than they read their e-mail, if you even knew how to reach them through e-mail.
To boot, if you use WordTwit or Twitter Tools, all of your posts can be announced on Twitter, which will usually get you quite a few early readers! People will feel even more happy to comment on Twitter, which might get you into an extra conversation or two.
7.3 Find related blogs, and work them
If you want to rank for certain keywords, go into Google Blogsearch, and see which blogs rank in the top 10 for those keywords. Read those blogs, start posting insightful comments, follow up on their posts by doing a post on your own blog and link back to them: communicate! The only way to get the links you’ll need to rank is to be a part of the community.