views:

57

answers:

3

I have a dynamic review system in place that displays 30 reviews per page, and upon reaching 30 reviews it is paginated. So I have pages such as

/reviews/city/Boston/

/reviews/city/Boston/Page/2/

/reviews/city/Boston/Page/3/

and so on and so forth

Unfortunately, Google seems to be indexing pages through what seems like inference - such as

/reviews/city/Boston/Page/65/

This page absolutely does not exist, and I would like to inform Google of that. Currently it displays a review page but with no reviews. I can't imagine this being very good for SEO. So, what I am trying to do if first check the # of results from my MySQL query, and if there are no results return a 404 and forward them to the home page or another page.

Currently, this is what I have.

if (!$validRevQuery) {
    header("HTTP/1.0 404 Not Found");
    header("Location: /index.php");
    exit;
}

Am I on the right track?

A: 

You cannot do both send a 404 status code and do a redirection (usually 3xx status code). You can only do one of them: Either send a 404 status code and an error document or respond with a redirection.

Gumbo
+3  A: 

A redirect is a status code just as the 404 is. You can't have two status codes.

You need to output the 404 status, and show a response body (= an error page) at the same time.

if (!$validRevQuery) {
    header("HTTP/1.0 404 Not Found");
    .... output full HTML structure here .....
    exit;
}
Pekka
Thank you! That was helpful!
Yevgeniy Женя Van Chuchin
A: 

As Pekka suggests, the best option is to do a 404 status, and then put your 404 page code after that. It is bad practice for SEO if you just 301 (redirect) the page because then the search engines will continue to visit the page in order to see if the redirect is still there.

David Cooke