WordPress SEO – Everything You Need To Know


You already know WordPress is the easiest and most SEO-friendly CMS in the world.

Maybe you’re pretty excited about it. You’re glad you chose WordPress. All you have to do is publish a few blog articles and wait for the jacked-up SEO of WordPress to do its thing, right?

Sorry to burst your bubble. If you think that choosing WordPress as a CMS is all you need to do, think again.

Look, I’m as big a fan of WordPress as you are. It’s an amazing CMS with high-octane potential, ease of use, and unlimited optimization possibilities.

But notice I say potential. And possibilities.

Kick-ass SEO isn’t guaranteed. It takes effort to make WordPress truly SEO-friendly, and I am here to help.

If you are expecting WordPress to deliver search optimization right out of the box, you won’t be disappointed. It’s not terrible.

It’s just not optimized to the level that it needs to be in order to be truly powerful.

We’re going to make it powerful.

Here are 18 SEO tactics for WordPress that you should implement today.

1. Generate plain English URLs

How do you want your URLs to show up on search engines?

Like this?


Or like this?


By default, the WordPress CMS generates URLs that contain special characters such as the question mark, post number, and maybe other horrific unspeakables (see the image below).


You want search engines to be able to see your post titles because they contain valuable-SEO keywords. To ensure your titles show up in your posts’ URLs, do this:

  1. log in to your Admin area
  2. click “Settings”
  3. select “Permalinks”
  4. check the radio button next to the “Post name.”

You’re all done. Your URLs will now be in plain English.

Big caution here: Don’t go changing all your existing URLs. Doing so will produce an SEO nightmare. Instead, make the change for all your future articles.

2. Convert your HTML and JS to AMP (Accelerated Mobile Pages) HTML/JS

AMP is the new golden standard created by Google for mobile pages.

AMP lightens pages and makes them load faster. Faster-loading pages are manna from heaven for mobile browsers.

The logic is simple: The faster your pages load and the more AMP-ready they are, the higher they’ll rank on Google. You will find your place on Page #1, Position #1 right in the Google AMP carousel.

Here’s how AMP pages are delivered by Google:


The deal is to convert your regular HTML/JS to AMP HTML/JS.

You can do this in two ways:

  1. Install this AMP plugin. It’ll help you generate AMP posts, but it won’t convert archived posts into AMP pages.
  2. Hire a coder to convert your HTML pages. AMP is not usually a major coding headache, so your developer should be able to quickly get your website AMP-ready after reviewing these instructions.

If you have the choice, my advice would be to hire a developer. The plugin is new, and the developers need to do some work on it to get it into shape.

3. Write optimized meta titles and descriptions

I’m sure you’ve heard about the Yoast SEO Plugin.

The Yoast SEO plugin is a terrific tool that allows you to write titles and descriptions and focus on a keyword by reporting on your keyword’s appearance in the page title, article heading, URL, meta description, and content.

Yoast’s developers are smart, and they keep updating the plugin based on the latest SEO standards. For example, Yoast has modified the number of characters  in the title from 55 to 70, keeping up with the latest Google changes.


Just install Yoast, and you’re set.


Yoast is a tool, but it doesn’t do the work for you. In order for Yoast to be effective, you need to work through each of the optimization sections for every blog post you publish.

Here are the basic settings I recommend. Note: Some of the options that appear in Yoast’s settings depend on what theme you are running. I’m demonstrating on a basic free wordpress theme, but some of the options you see may be slightly different.

General Settings

Title settings

you only need to check this box if for some reason your title tag settings are not working

Site-wide meta tags

you should typically only check of “no-index sub-pages of archives”

Clean up the <head> – you usually don’t need to check these off.

Advanced Indexation For WordPress Sites (Yoast SEO) #1

Post Type Settings

This section is not only where you set up title and description templates, but also how you control indexation of these parts of WordPress.

You DO want to let both pages and posts get indexed. It is very rare to not index these.

You do NOT usually want to index media.

Advanced Indexation For WordPress Sites (Yoast SEO) #2



you’ll most often want to index these


more and more these should not be indexed. Google doesn’t return them as much in results as they used to and it’s always better to rank a page, post or category instead.


it’s usually safe to leave this unchecked.

Advanced Indexation For WordPress Sites (Yoast SEO) #3


Author Archives

it’s best to NOT index these. Also, if you are running a single author blog you should disable them. Users will get redirected back to your home blog page.

Date Archives

its also best to NOT index these, but you should usually keep them enabled. Enabled just means users can browse posts by date.

Advanced Indexation For WordPress Sites (Yoast SEO) #4

XML Sitemap Settings

Note: Be sure you are NOT using another XML sitemap plugin or that your theme does not have this functionality activated.


You can ping both yahoo and I

Exclude Post Types

You should exclude any you’re not indexing. Put another way: check off the boxes of pages you are not indexing.

Advanced Indexation For WordPress Sites (Yoast SEO) #5

Category Descriptions

In Yoast, you will have set up a template to display a default category description for the meta tag, like this:

Advanced Indexation For WordPress Sites (Yoast SEO) #6

However, the mistake many people make is not writing this description in the first place! You have to go to Posts > Categories — and when you add a new category the description area then becomes the meta description set up in Yoast SEO.

Advanced Indexation For WordPress Sites (Yoast SEO) #7

Edit .htaccess File

Also, all of the .htaccess methods given throughout this guide can be implemented within Yoast SEO. You go to edit files — and most often your additional code will go at the bottom:

Advanced Indexation For WordPress Sites (Yoast SEO) #8

4. Add a title and alt-tag to all images

You don’t need a tool to do this. Just log in to the WP admin area, and select “Media.”

Once there, choose the images or open the media library, and start adding titles (if you haven’t already), alt tags, and captions to images.

The text must be keyword-rich and relevant, but make sure you don’t keyword-stuff.


Use captions wisely. If the image doesn’t require a caption, don’t add one. Captions provide only marginal SEO benefit and may negatively impact the usability of your site.

5. Install rich snippets

Rich snippets help Google serve rich results that appear meaningful and make more sense to users.

You’ve seen rich snippets before. They appear often in the SERPs:


Notice that the top two results have star ratings, upvotes, prep time, and calorie count. Not bad, huh?

These extra SERP features make the top two results, and even the fourth result, a lot more interesting and clickable than the third one.

The ratings and other rich data contained in the results showed up there because the websites have programmed rich snippets into their HTML codes.

How do you implement rich snippets?

Here are a couple of options:

  • Install this rich snippets plugin—no coding required!
  • Hire a programmer to build rich snippets into your code.

Again, I recommend hiring a programmer because it gives you more control over the coding. Besides, you don’t have to worry about a buggy plugin or plugin updates.

You can ask your programmer to build in rich snippets (and rich cards) for reviews, events, articles, people, video, recipes, and software tools.

6. Secure your website

WordPress may be the friendliest CMS ever, but it’s also the most vulnerable to hackers, malware, and trojans.

Why? Not because it’s inherently shoddy, but because it’s insanely popular. As the most popular platform, it’s also the biggest target for nefarious hackers.

Your WordPress theme, plugins, databases, and file permissions are all open to attacks.

Securing your website is one of the best SEO practices. It makes search engines view your website positively and rank it higher than other non-secure sites in your niche. A secure website also comforts users and customers when they realize their data is in good hands.

I recommend you install WordFence, an open-source enterprise-class security plugin.

It will build a Fort Knox around your website, monitor it in real time, receive and upgrade threat perceptions automatically, and generally keep your website humming on securely.

If you do not want to use Wordfence or another security plugin you should at least manually do the following

They are a little code intensive, so if you are not comfortable doing the following things, please get extra help. But anyone somewhat comfortable with technical things should be able to do these.

  1. Change Your File Permissions

    Run the following two commands to change file permissions recursively. You will need shell access to the server.

    This is for directories;

    find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \;

    This is for files;

    find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;
  2. Secure WordPress Includes

    You’re going to need access to your .htaccess file to do this. Again, please use care and if you feel like you need help, try it on a test site or get someone to assist you.

    Add this code above # Begin WordPress

    Like this;

    # Block the include-only files.
    RewriteEngine On
    RewriteBase /
    RewriteRule ^wp-admin/includes/ - [F,L]
    RewriteRule !^wp-includes/ - [S=3]
    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
    RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
    RewriteRule ^wp-includes/theme-compat/ - [F,L]
    # BEGIN WordPress

    This blocks outside access to your ‘include’ file directories.

    NOTE: If you want this to work for a multi-author site remove this line;

    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
  3. Sure your wp-config.php file

    Did you know wp-config.php is where your username and password is installed? If you used a one-click installation through your web host, you may have never worked directly in the wp-config.php (which you do on a manual install).

    Option A Move wp-config.php up one level

    wp-config.php normally sits in the root directory

    Bit did you know, you can actually move wp-config.php up one level above the root directory. Like this;

    Securing WordPress

    Option B htaccess file code

    If you don’t want to move around files, you can also use this code in the .htaccess file.

    Put this at the very TOP of the .htaccess file.

    <files wp-config.php>
    order allow,deny
    deny from all

    This will block anyone trying to open it with their browser.

7. Control spammy comments

Spam showing up in comment sections of WordPress sites is distributed by automated tools. If you are not careful, you will find that piles of comments with backlinks to pharma or adult-themed websites have sneaked their way into your blog posts.

You don’t want search engines to notice and possibly penalize you for spammy comments, do you?

To get rid of all evil comments, you absolutely must install Akismet or a similar highly-ranked comment blocker.

Akismet checks all comments, catches the spammy ones, and reports on comments that contain misleading links. You can then browse the comments caught by Akismet and delete the ones you consider spam.

Akismet is a free plugin for personal blogs, but business blog owners have to purchase a key.

8. Keep visitors engaged

When visitors hang around your website, flipping through posts, it lowers the bounce rate and increases the browsing time per user—both of which are significant SEO factors.

Aside from writing great content, you also should display related posts to pique your visitors’ interest further.

There’s no coding involved. All you have to do is install the Contextual Related Posts plugin:


This feature-rich plugin generates thumbnails and supports shortcodes, widgets, and CSS styles. Go for it!

9. Make your posts socially shareable

You already know that posts that can be shared can help increase traffic, leads, and sales.

You also already may have installed social sharing icons on your blog. If you haven’t, install this nifty Social Media Share Buttons plugin.

Gaining social shares is a huge SEO benefit and one that you don’t want to neglect.

10. Back up your website

Can you imagine what will happen to your content, SEO, databases, leads, reputation, brand, hard work, and more if your website crashes or vanishes for reasons known or unknown?

Yeah, it’s horribly frightening to imagine such a scenario.

So, why even think about it?

Because it happens. And when it does, you’ll feel like your world has come crashing down.

Buy and install the Backup Buddy plugin, set it up, and sleep soundly, knowing that your website is indestructible.

11. Optimize your database

If you do not maintain and optimize your WordPress or WooCommerce site’s database from time to time, chances are it will bulk up and go belly up.

That’s because WordPress keeps creating a revision of a post every time you create or edit it. Aside from that, comments and other junk keep regularly collecting in the database, slowing down your website and cannibalizing your server space.

To optimize your database, download and install WP-Optimize—a free database optimizer—and clean up your database regularly.

12. Generate a dynamic sitemap.xml

An XML sitemap helps search engines understand your website fully and index it efficiently.

You already may have installed a sitemap.xml, but is your sitemap dynamic? Does it keep updating every time you add content?

If the answer is no, install Google XML Sitemaps—a very popular and helpful plugin that either generates dynamic sitemaps or allows you to create one manually.


After creating one, upload it into your root folder (yoursite.com/sitemap.xml).

13. Secure your forms

Are your contact forms secured by CAPTCHA?

If they are not, you are inviting trouble.

There are hundreds of thousands of hackers and spammers who own bots that crawl the web looking for unsecure contact forms. Such forms are quickly stuffed with spammy and useless comments, designed to bloat your database, eat up disk space, and slow down your site.

I am not talking about just one or two annoying comments. Unsecured forms can get hundreds of comments every day.

The solution is to add CAPTCHA. Here is one plugin that can help: Really Simple CAPTCHA.

14. Guide search engines

Search engines typically crawl and fetch all pages unless you restrict them from indexing some areas on your site.

For example, you don’t need search engines to crawl and index your WP-admin area, CSS, and Javascript files.

Therefore, you need to upload a robust robots.txt file that tells search engines where to crawl and where not to.

If you haven’t written an efficient Robots file yet, use Virtual Robots.Txt to create one. After creation, upload it into your root folder (yoursite.com/robots.txt)

15. Making WordPress Comment Reply Links Nofollow

  1. Go to appearance > editor >functions.phpMaking WordPress Comment Reply Links Nofollow #1
  2. Paste the following code into the very bottom of your functions.php file;Making WordPress Comment Reply Links Nofollow #2
  3. Add a rel="nofollow" to the comment reply links
    function add_nofollow_to_reply_link( $link ) {
    	return str_replace( '")\'>', '")\' rel=\'nofollow\'>', $link );
    add_filter( 'comment_reply_link', 'add_nofollow_to_reply_link' );

    It’s the str_replace() function which is replacing the default closing of the anchor tag – and its appending the nofollow to it.

    Remember to update the file.

    Making WordPress Comment Reply Links Nofollow #3

  4. And you can always quickly check for followed/unfollowed links with the SEOmoz toolbar;Making WordPress Comment Reply Links Nofollow #4

16. Get Rid of Date in SERPS / WordPress

People have often asked me how to remove the date from displaying in a Google search result when running on WordPress. It is often not desirable to have the date shown, as in the example below.

Get Rid of Date in SERPS / WordPress #1

Finding And Replacing the_time() Function

The hardest part about this perhaps, is finding the right spot in your WordPress setup to alter the code. The function we’re looking for is ‘the_time()’.

The three most common places you will the_time() are;

  • archive.php
  • index.php
  • single.php

How To Search Your WordPress Files

  1. Use an FTP client like Filezilla
  2. Download your wordpress theme files to your local computer (you should do this anyway sometimes as a backup)Be sure to not copy the entire wordpress installation — just copy the folder wp-content/themes/your-active-theme-folder
  3. Search multiple files with a text editor like TextwranglerGo to Search->Multi-File Search…Get Rid of Date in SERPS / WordPress #2Enter ‘the_date’ in the find field
    Click other – navigate to your theme’s folder and selectYour dialogue and selections should look similar to the one below, with only the theme name differing.Get Rid of Date in SERPS / WordPress #3You will see a result listing all of the files that contain ‘the_time’. These are the files you should edit directly in the WordPress editor.Get Rid of Date in SERPS / WordPress #4

    Alter the_time() In All Of Those Files

    It will probably look something like this;

    <?php the_time('F jS, Y') ?>

    Replace it with this:

    <script language="javascript" type="text/javascript">document.write("<?php the_time('F jS, Y') ?>");</script>

    How it works: We’re wrapping the PHP function int Javascript. Google does not use javascript when pulling data for the description. So it will display for the user but not read by Google.

17. Create a Custom WordPress Author Bio Page

The default “author archive” in WordPress is just a list of all the posts by that author. For my site, you can see that my author page https://www.quicksprout.com/author/admin/ is simply as list of the posts I have written, which I why I choose to not index it.

Custom author pages work best on multi-author blogs. If you are running a single author site, simply having an “about” page may be the better option for you. So this tutorial is going to assume you are running a multi-author site.

Step 1: File Setup

The file you need to edit is author.php

Go to appearance > Editor and look for author.php

The default themes, twentyeleven and twentyten have an author.php file

Creating a Custom WordPress Author Bio Page #1

If it DOES exist, that’s the file we’re going to edit make a backup copy now.

If it does NOT exist
make a copy of archive.php
rename it author.php

Lastly, we’re going to clean it out to prep for editing:

Open your new version of author.php in your text editor (if you’re really brave you can do all the editing in the appearance editor, but I don’t recommend it).

Delete from between get_header() & get_sidebar()

Creating a Custom WordPress Author Bio Page #2

Step 2: Current Author Detection

Next we have to put some code in to detect the current author – here’s the code:

	$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) :

Creating a Custom WordPress Author Bio Page #3

Step 3: Rough Draft

This isn’t so technical, but I recommend sketching out a little rough draft of the layout of your author page. This makes it easier to set up your variables. You can do so within the text editor itself.

This is just a great way to get the idea of how you way to display the info in there before entering the code.

Creating a Custom WordPress Author Bio Page #4

Step 4: Variables

Next, based upon the info you’d like to display, you can grab the variables we’ll need to build the code.

Here’s a list of all of the author variables:

  • $curauth->aim;
  • $curauth->description;
  • $curauth->display_name;
  • $curauth->first_name;
  • $curauth->ID;
  • $curauth->jabber;
  • $curauth->last_name;
  • $curauth->nickname;
  • $curauth->user_email;
  • $curauth->user_login;
  • $curauth->user_nicename;
  • $curauth->user_registered;
  • $curauth->user_url;
  • $curauth->yim;

The ones we’ll need are;

  • $curauth->nickname; (most often used to display the name, you can use displayname too)
  • $curauth->user_url;
  • $curauth->user_description;

Step 5: Putting It Together

Note: Your exact HTML and CSS styling will probably be a little different then this example. This is just one example of a variety of ways you could build it

You’re first going to put your author bio information
this is just an example.

Creating a Custom WordPress Author Bio Page #5

If you’re comfortable with HTML, adding the variables it easy.

If what you want to display is:

<h2>About: Neil Patel</h2>

You just replace the actual name with the variable and the php wrapper. So Neil Patel gets replaced with <?php echo $curauth->nickname; ?> like this:

<h2>About: <?php echo $curauth->nickname; ?></h2>

and the whole code sample is:

<h2>About: <?php echo $curauth->nickname; ?></h2>
   <dd><a href="<?php echo $curauth->user_url; ?>"><?php echo $curauth->user_url; ?></a></dd>
   <dd><?php echo $curauth->user_description; ?></dd>

Then we’re going to start the loop and get the posts in there
here’s what the code looks like and some explanation:

Creating a Custom WordPress Author Bio Page #6

Just like with the above section — you write the HTML but then place in the WordPress variables.

The Complete Code Sample

Here’s the complete author.php file. Remember, parts of it may need to change slightly to match your theme!

<?php get_header(); ?>

	$curauth = (isset($_GET['author_name'])) ? get_user_by('slug',
	$author_name) : get_userdata(intval($author));

<!--Author Bio Box-->

<h2>About: <?php echo $curauth->nickname; ?></h2>
	<dd><a href="<?php echo $curauth->user_url; ?>">
	<?php echo $curauth->user_url; ?></a></dd>
	<dd><?php echo $curauth->user_description; ?></dd>

<h2>Posts by <?php echo $curauth->nickname; ?>:</h2>

	<!-- The Loop -->

	<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
	<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: 
	<?php the_title(); ?>"><?php the_title(); ?></a>,
	<?php the_time('d M Y'); ?> in <?php the_category('&');?>

	<?php endwhile; else: ?>
	<p><?php _e('No posts by this author.'); ?></p>

	<?php endif; ?>

	<!-- End Loop -->


<?php get_sidebar(); ?>
<?php get_footer(); ?>

18. Add Caching

Cache plugins work by caching (storing) pages, databases, database queries, etc. and then serving them on the fly without executing PHP code or database queries.

A cache plugin can help you significantly reduce the loading time—a good thing for both search engines and users.

WP Super Cache generates static HTML pages to serve up instead of hefty PHP files. This improves the speed of your site significantly. Correct setup is not always immediately obvious, especially for first time users. So we’re going to walk through the best practice configuration for this great time saving plugin.

If you want the documentation for the plugin you can view the WordPress page for it here – http://wordpress.org/extend/plugins/wp-super-cache/

There are several similarly named plugins, so when you choose it in the plugin installer, make sure you choose the correct one;

Using WP-Super Cache #1

Once installed and activated there are a few tabs with important settings, we’re going to walk through the steps.

If you have trouble finding it, go to settings > WP Super Cache

Using WP-Super Cache #2

Tab One — Easy

Just like it says, this tab is “easy”! All you need to do is turn on caching.

Using WP-Super Cache #3

Tab Two — Advanced: Choose Settings

Select the following options;

  • Cache hits to this website for quick access
  • Use PHP to serve cache files
  • Compress pages so they’re served more quickly to visitors
  • Don’t cache pages for known users
  • Cache rebuild
  • Mobile device support
  • Extra homepage checks

Using WP-Super Cache #4

Check That Caching Is Working

At this point, before continuing, you may want to check to see that caching is working properly. You should also periodically visit your website during any plugin setup and configuration to be sure it hasn’t broken anything.

To check caching

  1. Visit a page on your site
  2. View Source
  3. Scroll all the way to the bottom
  4. And look for the WP Super Caching comments in your code;

Using WP-Super Cache #5

Tab Two — Advanced: Setup Garage Collection

Setting the garbage collection controls how often stale or old cached files are thrown out. Simply put;

  • Sites that are updated more often, will need to run garbage collection more often.
  • Sites that are not updated often, don’t need to run garbage collection as often.

Explanation of Setting Options

Using WP-Super Cache #6

You have TWO choices for garbage collection;

  • The timer schedules it to run at regular intervals (in seconds). This is for sites that update most frequently
  • The clock runs on a set schedule daily, twice-daily, or hourly. This is for sites that are not updated as often.
  • And you can receive email notifications too.

Let’s look at two different setting options.

Sites Serving A Lot of Fresh Data

If you’re serving a lot of fresh content, you’ll want to empty the trash often and have a short timeout. So you may want to start with the following settings;

Set your timeout to update every minute (60 seconds). Set your timer to run every 90 seconds. This way you’re always cleaning out stale cached files as new ones are created. This is a starting point for very frequently updated sites — you should adjust these intervals specific to your situation.

Using WP-Super Cache #7

Sites That Do Not Update As Often

These settings are for sites that might have only one piece of new content a day at the most. Also for sites with no widgets or RSS feeds in the sidebars.

Using WP-Super Cache #8

The setting you see above are for a site that might get one update a day or just a few a week. Set your timeout to 10 days (864000 seconds). Use the clock in this instance, and set it to twice daily and at a time that makes sense for your site. If you typically post new content in the evening, a time of 10:00 might make sense – it will empty garbage just after you’ve posted your new content at night, and do so once again at 10:00am to keep things clean.

Disabling Garbage Collection

If for whatever reason you want to disable garbage collection, enter ZERO for the timeout.

Using WP-Super Cache #9


Now you should have a super powered WordPress site!

Keep in mind, technical optimization alone won’t help you succeed in SEO. However, it’s the foundation of SEO success.

To be truly successful, you need to populate your WordPress site with content—amazing content. Lots of content. Optimized content.

Technical SEO only gets you so far.

It’s a crucial building block, but it’s only that—a building block that allows you to do the next steps such as off-page SEO, content optimization, and content marketing.

If you follow the same tactics that I used above, you will make your website more SEO-friendly than ever before.