Choosing the Best WordPress Permalink Structure

One of the strengths of WordPress is that it does very well in the search engines right out of the box. And then there are a ton of things you can do to give and extra boost to that natural SEO strength that WordPress has by default.

Weak LinkOne of the easiest things to do is change the default WordPress permalink structure, which is one of the first things that most folks do when setting up a new WordPress website. (From your WordPress dashboard just go to Settings –> Permalinks and make your change there.)

What Are Permalinks?

For the uninitiated, Permalinks are what WordPress calls the URL structure that the software generates when creating posts and pages, etc. It’s everything that shows up after the “.com” (or .org, etc.) when navigating around your website.

Because WordPress uses the PHP programming language the default way WordPress sets up permalinks with with a /?p=123 kind of query. For example the default permalink format for this post would be:


Besides being a little ugly, having permalinks like that does nothing for you in the search engines.

Improving SEO

When it comes to ranking well in the search engines it is important to have your most important keywords in the actual URL (i.e. web address or permalink) of your web page. The search engines certainly factor that in, though it is debatable how much so.

Since SEO experts are in the business of squeezing every bit of optimization out of each page you’ll often see them recommend either just using your post title or using your category (to get some extra keywords) along with the post title as your permalink structure. If we did that here, this post would look like one of these examples:


That’s definitely more readable. And it will also help out some with SEO for sure because it puts more of your permalinks.

But there’s a catch. It’s a big one, especially for small business websites.

WordPress Performance

Unfortunately, because of the way WordPress works, having a text variable such as the post name, category, tag or author can cause huge performance problems if you have more than a handful of pages beyond your blog posts. (You can find the technical explanation why here.)

While there is some discrepancy about how many pages it takes before it becomes a problem – I’ve seen anywhere from 10 – 50 pages – there is no denying that your site can easily get into a situation where it bogs down completely with those completely SEO-centric permalink structures.

While it’s true that folks who just blog on their WordPress websites can get away with these, this can become a big problem for most small businesses which tend to have more pages on their websites than most bloggers have. (For example, has 30 pages right now and I’m about to add a few more.)

As businesses grow the need to add pages on their website grows too. For example you’ll likely want to add pages as your product or service offering grows or when you add staff.

Better Choices

Because of the performance issue that results from the above approach when you have numerous pages you are much better off putting a numeric variable such as the year or post ID, or choosing a fixed plain text prefix such as “blog” or “article” before the text variable in your permalink settings.

Some examples in how that might look for this post:


In your Permalink Settings these four examples would be entered like this:

  • /%year%/%postname%/
  • /%post_id%/%postname%/
  • /blog/%postname%/
  • /article/%postname%/

EDIT: Per Otto’s comment below (and he’s pretty much the authority on this particular issue, by the way) “fixed text” doesn’t solve the problem either.

Any of these eliminates the WordPress performance problem. Each of them has their strengths and weaknesses, and this is where we delve into the realm of opinion.

My Recommendation

Personally I prefer using /%post_id%/%postname%/ for permalinks. The downside of using this structure is that it uses an arbitrary and outwardly meaningless number in your URL which doesn’t make a whole lot of sense to most website visitors. It is next to impossible to guess should anyone want to directly type your URL into their address bar.

However, on the plus side the post ID is a unique designator for each blog post. That means that you can share just the post ID and direct people to a specific blog post when you are short on space. Twitter is one such place where it could come in handy, as an example.

So will still get folks to this post and I have a built in URL shortener. I’ve found that to be pretty handy on several of my websites.

Trying a shorter version of the other options will just produce a list of all your blog posts. Well, OK. When you use the year you’ll just get a list of the posts in that year. But either way it’s not as useful, at least to my way of thinking.

That said, I can see the arguments in favor of some of the other options. So I ask you, which of the options makes more sense to you? runs on the Genesis Framework

affiliate program logo

The Genesis Framework empowers you to quickly and easily build incredible websites with WordPress. Whether you're a novice or advanced developer, Genesis provides the secure and search-engine-optimized foundation that takes WordPress to places you never thought it could go. It's that simple - start using Genesis now!

Check out these incredible features and wide selection of designs. There are so many to choose from they created this handy theme chooser to help you find the perfect theme for your needs. With automatic theme updates and world-class support included, Genesis is the smart choice for your WordPress website or blog.

Or you can even Become a StudioPress Affiliate yourself to start earning today!


  1. The “fixed text” prefix does not solve the problem in current versions of WordPress. You need to use one of the other %variables% in front of it to solve the issue.

    • You know, I thought so Otto. But after getting into a discussion with someone who “knew” I was wrong I conceded. I’ll go back and edit this post accordingly.

      Thanks for clearing that up.

    • More specifically, it has to be a variable that generates a number. Any of the variables that convert to a string kick in the verbose rewrite rules (ex. /%author%/%postname%/).

      • Yeah. there are a bunch of folks who use either /%category%/%postname%/ or just /%postname%/ and don’t realize they are setting themselves up for problems should they ever add several pages to their site.

  2. Great tips. Thanks for the share!

  3. Wow – thanks for that insight. I’ve been working with WordPress for over 4 years now and that is the first time I have seen this issue discussed and explination for it. Definitely worth a closer look since I have several WP sites over 400+ pages.

    However, these sites don’t seem to suffer much in the way of performance hits on the surface. But with the newer Google rankings and such, milliseconds do indeed make a difference.

    Thanks for this informative post.

  4. Thanks for the write-up. I currently use /%category%/%postname%/ for, but here’s the issue I have (and I’m trying to find the balance between user-friendliness and SEO):

    -The Breadrumb Trail pulls the info from the permalink, and I frequently assign posts to multiple categories. WordPress uses whichever category comes first (in alphabetical order), which is often not what I want (and often not optimal for SEO), and can result in the breadcrumb trail sometimes displaying confusing results (and not always the path visitors took to get to the post).

    Is there any good way around this? Using a /%postname%/ structure will let me avoid issues related to posts being in multiple categories, but I’d prefer the category name to show up in the breadcrumb trail and in the URL.


    • Heya Dustin! If you want the category to show up in your breadcrumbs then you will pretty much have to designate just the category you want to show up. Perhaps you can reorganize your categories and use tags to display different groups of posts instead of using multiple categories?

      However the core developers are changing the way WordPress handles permalinks in the upcoming 3.3 version release. This change will eliminate the performance issues brought out in this post so that it will not be as big an issue to use just /%postname%/ moving forward. That’s great news! 🙂

  5. Thanks It will help me to select permalink structure for my blog.

Comment Policy: Your words are your own, so be nice and helpful if you can. Please, only use your real name and limit the number of links submitted in your comment. If in doubt, please take a moment to review our full Comment Policy before you click "Post Comment" so we don't mark your comment as spam.

Speak Your Mind