Yev
Yev

Reputation: 2081

Return 404 if non existant page # PHP

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?

Upvotes: 1

Views: 2167

Answers (3)

Pekka
Pekka

Reputation: 449415

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

if (!$validRevQuery) {
    http_response_code(404);
    // output full HTML right here, like include '404.html'; or whatever
    exit;
}

Note that you cannot use a redirect here. A redirect is a status code just as the 404 is. You can't have two status codes.

Upvotes: 4

David Cooke
David Cooke

Reputation: 141

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.

Upvotes: 0

Gumbo
Gumbo

Reputation: 655229

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.

Upvotes: 1

Related Questions