How to change WordPress permalink structure on WP Engine
Posted on December 20, 2016
One of the most user friendly and powerful SEO features of WordPress has always been it’s pretty permalinks feature. Many content management systems (CMS) still to this day have urls that look like http://domain.com/something_incomprehensible/123123c1
. Ugly!
WordPress has supported pretty permalinks (human readable and ending a url with a slug resembling the post name) since version 1.0. There was one catch to those however. You needed to include a date in the format before the post slug (that’s /%year%/%monthnum%/%postname%/ for those familiar with WPs permalink formats). This resulted in URLs like this post’s URL: https://9seeds.com/2016/12/19/change-permalink-structure-wp-engine
. Pretty!
That format has always still been better for SEO than what other CMSs do with crazy random numbers that mean nothing to human or search crawlers. It’d be a little better without the dates in the way however. You could use just the post slug (that’s just /%postname%/ ) on small brochure websites with just a few dozen pages, but on sites with large numbers of posts things would slow down without dates to break things up.
As of WordPress 3.3 there is no longer any performance hit to using just /%postname%/. So your URLs can just look like this: https://9seeds.com/change-permalink-structure-wp-engine/
. Prettier!
But there’s still a catch. You can’t just go into the WordPress Permalinks settings page and change formats or incoming links to your site using the old format may 404 🙁
There’s long been a fix for this and our friend Yoast even built a tool to make generating the needed .htaccess rule here since no one likes writing regex or coming up with htaccess rules. That’s all well and good if you’re on a simple Apache server and want to edit an .htaccess file, but what if you’re on WP Engine? WP Engine uses a higher performance setup with an Nginx proxy in front of Apache. That means you can put those redirect rules into Nginx and they’ll be even quicker than having put them in .htaccess! Only you can’t directly modify your nginx.conf files on WP Engine, instead WP Engine gives you a super easy to user redirect tab in their panel.
Here’s how you change your permalink structure and setup the needed redirect on WP Engine.
Step 1:
Go to Yoast’s handy tool here and generate the needed rewrite rule. It’ll look something like this:
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://your-domain.com/$4
If you’re not on WP Engine you can drop that into your .htaccess file before the WordPress section. In fact it’ll work on WP Engine, just it’s better to use the panel than to modify that file directly via FTP.
Step 2:
1. Go to the WP Engine Dashboard and click Redirects rules in the left sidebar
2. Click the Redirect Rules button at the top right
3. Set a memorable name for the Redirect.
4. Take the orange section above, the scary looking Regular Expression that Yoast generated for you (mine is for year/month/date, your maybe be shorter if your existing permalink structure is shorter), paste that into “Source*” from the ^ to the $.
5. Take the blue section above, the less scary url looking Regular Expression from the http to the $4 (my existing permalink has three date modifiers, hence it keeps the 4th chunk, your’s may be different if you’re using a shorter permalink structure).
6. Click the Save button
Step 3:
1. Go to your WordPress dashboard and click on Permalinks under Settings in the left sidebar
2. Change your permalink setting to %postname%
3. Click the Save Changes button
Step 4:
Test!
Success? Awesome let us know in the comments below!
Thanks for sharing this helpful post. My problem is that my blog posts shows mysite.com/category instead of mysite.com/postname on search result but shows the post name once you click on it. my question now is, how do i make the post name to appear on search result as well?
That's bit different an issue. It sounds like you have a category base set on the permalinks page.
Excellent! This was really useful when migrating a site to WP Engine.