Forum Moderators: phranque
For 404-Not Found (file missing for unspecified reason) and 410-Gone (page intentionally removed), provide a clear and concise explanation to the user. Provide text links to a replacement page or category (if possible, i.e. the error page is dynamic), your site search function, and your home page. You might also want to ask the user to report the error if it resulted from clicking a link on your own site.
For 403-Forbidden errors, you might want to use a custom error page to track the IP addresses that are forbidden but keep coming back. This can be done using server-side includes on an HTML page, or by using a script to generate the page and log the denied request.
For 500-Server Errors, I recommend that you do not use a custom error page; Once your server is in an error state, it is best to keep things dirt simple. For example, I've worked on a site that used a templated PHP custom 500-Error page. When a problem was introduced into the PHP configuration, the result was an endless cascade of server errors because PHP encountered an error, invoked the custom (PHP-based) 500-Server Error page, which caused another 500-Server Error, again invoking the custom error page, etc.
For the other errors, I usually don't bother with custom error pages, because the user is unlikely to cause one, and even less likely to understand the error description or know what to do about it.
As phranque said, it's important to implement custom error pages carefully, being sure that the proper server status response is returned. Many Webmasters fail to read the documentation for the directives used to set up custom error pages, and then fail to check their server responses with a server headers checker. The result is often disastrous. The "Live HTTP Headers" add-on for Firefox and Mozilla-based browsers is free, and will show immediately if there is a problem. And the documentation explains how to prevent them.
Jim