Redirecting Old URLs in WordPress

Share this article

We recently devised a system to redirect old URLs in PHP so that you could avoid “page not found” errors (I suggest you read it before venturing further). In this article, we’ll create a similar system for WordPress, the popular PHP CMS.

How is WordPress different?

WordPress routes all requests through a single index.php file. Under normal circumstances, all URLs that don’t map to a physical file or folder on your server will be handled by WordPress. This includes all invalid addresses, so there’s no need to configure a 404 error document in Apache or IIS. There’s probably no need to worry about redirecting old URLs if you’ve been using WordPress since day one. The system is reasonably good at finding the right page, even if you change your permalink structure (Settings > Permalinks). However, if you’re migrating content from a static site or another CMS, you’ll almost certainly have URL mismatches.

Updating the theme

We’re going to handle redirects within your WordPress theme. You could create a plugin, but:
  • the redirects are site-specific and a generic plugin would add more complexity
  • the code is unlikely to require further updates and it’s preferable to avoid having users configure or disable it, and
  • embedding it within the theme makes it more portable–you just copy theme files to the server
First, locate your theme files in wp-content/themes/my-theme-name. Many themes provide a 404.php
file to handle “page not found” errors, but you can create one if necessary; for example:

<?php get_header(); ?>

<h1>Page not found</h1>
<p>Sorry, we cannot find that page.</p>
<p>Please browse the sitemap&hellip;</p>

<ul id="sitemap">
<?php wp_list_pages('title_li='); ?>
</ul>

<?php get_footer(); ?>
You should now include redirect.php at the top of the 404.php file, for example:

<?php include('redirect.php'); ?>
<?php get_header(); // etc...
(Note that earlier versions of WordPress may require: include(TEMPLATEPATH.'/redirect.php'); –that’ll work in the latest versions too.) Now create the redirect.php
file in your theme folder and add the following code:

<?php
// current address
$oldurl = strtolower($_SERVER['REQUEST_URI']);

// new redirect address
$newurl = '';

// old to new URL map (for you to configure)
$redir = array(

	'index.html' => '/',
	'article1.html' => '/blogs/my-first-article',
	'article2.html' => '/blogs/my-second-article'

);

while ((list($old, $new) = each($redir)) && !$newurl) {
	if (strpos($oldurl, $old) !== false) $newurl = $new;
}

// redirect
if ($newurl != '') {

	header('HTTP/1.1 301 Moved Permanently');
	header("Location: $newurl");
	exit();

}
?>
The $redir URL mapping array can be configured as necessary. Alternatively, you could use a series of regular expression replacements or a database table lookup to find a valid $newurl. I hope that helps with your WordPress URL woes. If you have other tips for managing redirects, please leave your comments below.

Frequently Asked Questions about Redirecting Old URLs in WordPress

What is a URL redirect and why is it important in WordPress?

A URL redirect is a process that sends users and search engines to a different URL from the one they originally requested. This is crucial in WordPress for several reasons. Firstly, it helps maintain a good user experience by ensuring that visitors do not encounter broken links or 404 errors. Secondly, it preserves your site’s SEO rankings by directing the link juice from the old URL to the new one. Lastly, it allows you to change your site’s structure or migrate to a new domain without losing your existing traffic.

How can I create a 301 redirect in WordPress?

A 301 redirect is a permanent redirect that passes between 90-99% of link equity to the redirected page. In WordPress, you can create a 301 redirect using a plugin like Redirection or Yoast SEO. After installing and activating the plugin, you can set up a new redirect by entering the old and new URLs, selecting the type of redirect (301), and saving the changes.

What is the difference between a 301 and 302 redirect?

A 301 redirect is a permanent redirect, indicating that the original page has been moved to a new location permanently. On the other hand, a 302 redirect is a temporary redirect, used when the original page is expected to be available again in the future. The main difference lies in how they affect SEO. A 301 redirect passes most of the link equity to the new page, while a 302 redirect does not.

Can I redirect URLs manually without using a plugin?

Yes, you can manually redirect URLs in WordPress by editing the .htaccess file. However, this method requires a good understanding of coding and the Apache server environment. Any mistake in the .htaccess file can cause serious issues on your website. Therefore, it’s recommended to use a plugin or seek professional help if you’re not confident with coding.

How can I check if my redirects are working properly?

You can check if your redirects are working properly by using online tools like Redirect Checker or Screaming Frog. These tools will show you the HTTP status code returned by the server for the requested URL. A status code of 301 or 302 indicates that the redirect is working correctly.

What should I do if my redirects are not working?

If your redirects are not working, you should first check if you’ve entered the correct old and new URLs. If the URLs are correct, try clearing your browser cache or using a different browser. If the problem persists, it could be due to a conflict with another plugin or a problem with your .htaccess file.

How can I redirect a URL to an external website?

To redirect a URL to an external website, you can use the same process as creating a regular redirect. Simply enter the URL of your WordPress page in the ‘Source URL’ field and the URL of the external website in the ‘Target URL’ field.

Can I undo a redirect in WordPress?

Yes, you can undo a redirect in WordPress by deleting the redirect rule from your redirect plugin or .htaccess file. However, keep in mind that this will cause the original URL to become accessible again, which could lead to duplicate content issues if the same content is available at the new URL.

How many redirects can I create in WordPress?

There’s no limit to the number of redirects you can create in WordPress. However, having too many redirects can slow down your website and negatively impact your SEO. Therefore, it’s recommended to use redirects sparingly and only when necessary.

What is a wildcard redirect and how can I create one in WordPress?

A wildcard redirect allows you to redirect all the URLs from one directory to another. This is useful when you’re moving a whole section of your website. In WordPress, you can create a wildcard redirect by adding an asterisk (*) at the end of the source URL and the target URL in your redirect rule.

Craig BucklerCraig Buckler
View Author

Craig is a freelance UK web consultant who built his first page for IE2.0 in 1995. Since that time he's been advocating standards, accessibility, and best-practice HTML5 techniques. He's created enterprise specifications, websites and online applications for companies and organisations including the UK Parliament, the European Parliament, the Department of Energy & Climate Change, Microsoft, and more. He's written more than 1,000 articles for SitePoint and you can find him @craigbuckler.

PHPWordPress
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week