Wordpress tips and tricks - custom 404 (error) pages
July 7, 2007 | Web Design
One of the more underused features in wordpress themes is the ability to create and modify the 404 page - so to try to rectify this I thought I’d run through what I do with 404 pages on Binary Moon (and my other Wordpress site). I use this simple technique to try to make errors a bit more and helpful for people who have ended up at the wrong place. I’m hoping that not too many people see the 404 page but just in case here is what I’ve done.
Basically I duplicate a normal page template and name it “404.php”. I then remove “the loop” and add some some static code which explains that there has been an error and a few possible solutions (archives, search).
Finally I use query_posts to add in a new loop which displays links to the 5 most recent articles. Below is the actual code I use on this site for my 404 page (you can see it in action here - http://www.binarymoon.co.uk/9837489)
<?php get_header(); ?>
<h1>404 - Doh!</h1>
<p>Something has gone wrong and the page you're looking for can't be found.</p>
<p>Hopefully one of the options below will help you</p>
<ul>
<li>You can search the site using the search box to the left</li>
<li>You could visit <a href="http://www.binarymoon.co.uk/">the homepage</a></li>
<li>Maybe what you're looking for is </a><a href="http://www.binarymoon.co.uk/archives/">in the Archives?</a></li>
<li>Or you could have a look through the recent posts listed below, maybe what you're looking for is there</li>
</ul>
<h3>Recent Posts</h3>
<ul>
<?php
query_posts('posts_per_page=5');
if (have_posts()) : while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>" title="Permalink for : <?php the_title(); ?>"><?php the_title(); ?></a>
<?php endwhile; endif; ?>
</ul>
<?php get_footer(); ?>
Something you may want (need?) to do is to add your new 404 page to your .htaccess file so that when a bad/ non-existant page is accessed the visitor gets your custom 404 instead of your webhosts ugly page. To do this all you need to do is grab your .htaccess file and add the following code.
ErrorDocument 404 /index.php?error=404
That’s it - easy as can be.
Now nobody has an excuse not to have a helpful, attractive 404 page. Of course it doesn’t have to be helpful (but that IS nice) but can also be funny or amusing - maybe you can find some inspiration here at area 404. Be sure to let me know if you have an unusual or unique 404 page as well.
Article Series
this post is part of a series of articles - why don't you check out the others below?

Comments »
July 8, 2007
Very useful tip, I will be implementing this on my own blog, thanks for the code too.
August 3, 2007
Good Article.
Actually you do not need to use query posts for this purpose.
you could very well do wp_get_archives(’type=postbypost&limit=6′) to pull the latest 6 posts.
Thanks
August 3, 2007
Sadish - thanks for the tip. I actually wrote my own 404 page a long time ago (at least 2 years) and as far as I know the wp_get_archives command wasn’t around - and if it was around I wasn’t aware of it
August 6, 2007
My 404 page provides odd facts for the same day in history (http://www.nthposition.com/404.php) - people might as well enjoy being lost!
August 6, 2007
Val - that’s a cool idea
Not sure where I’d get a list of interesting information from though..?
August 25, 2007
What about other HTTP status codes? Like ErrorDocument 500 /index.php?error=500, etc… ? All 57 Status Codes
September 11, 2007
Does a custom 404.php page work if you are using the default permalink structure (/?p=xxx)?
September 11, 2007
Nate - as long as you have the ability to create and use .htacces files the 404 page should work fine as described above.
December 9, 2007
My theme already has a 404 error page, and so luckily i just edited it to read how i wanted! thanks for the info. Rel
People who link to this post...