One of the major causes of soft 404 errors is very easy to fix.
Rather than go into what a ‘soft’ 404 error is to start with, I’ll assume most people reading this post will already know that; so I’ll get straight into the fix, followed by some background for those who aren’t aware.
The issue is quite often caused by a custom error page specified in a .htaccess file using an absolute reference to the page rather than a relative one.
Absolute vs. Relative ErrorDocument Examples
ErrorDocument 404 http://site.com/404.htm
ErrorDocument 404 /404.htm
If you are seeing soft 404′s being reported in Google Webmaster Tools, check your .htaccess file and if you are using an absolute path, change it to relative and the problem will be solved.
On some server setups, having the error page in a folder below root can prove to be a bit of a bear in terms of specifying a relative path; so if you hit problems, put the page straight under the top level of your site and specify the location as /404.htm (or whatever you have called the file) and that should do the trick.
So, What Is A ‘Soft’ 404 Error?
When a browser or search engine spider requests a page that doesn’t exist, a server should return a 404 (not found) error. This is a “hard” 404 error – everything working as it should.
Returning a code other than 404 or 410 for a non-existent page can cause problems. Note that just because your custom error page displays, it doesn’t mean the server is returning the right error code.
In the case where an absolute path is specified in an ErrorDocument directive; the code returned may be 302, which means “temporarily moved”. This situation is referred to as a “soft” 404 error.
It’s enough of an issue that Google flags these soft 404′s in Google Webmaster Tools; a hint that the issue should be fixed.