13

I've got a WordPress site that includes pages pulled from a different database. The problem is that these other pages return a 404 status code. (The WordPress posts/pages are fine.)

The 404'ed pages display fine, and I removed the "Page not Found" text from the title tag in WordPress. But Googlebot and W3C see the 404 header.

So: wow does one tell Apache to suppress a 404 status? And will Apache override WordPress's 404 header?

Does that make sense? What other info and things should I be looking at?

Can I suppress the status code in .htaccess so I don't change WP core files?

4 Answers 4

12

You can either add custom rewrites to your pages. Or on the top of the template files that wrap your other pages just output header('HTTP/1.1 200 OK');.

3
  • 2
    Great fix rather than using .htaccess and for fixing just the non-WP php page templates. Thanks! Commented Jun 14, 2010 at 17:28
  • There is a built-in function for this: status_header(200);
    – guidod
    Commented Feb 3, 2017 at 18:31
  • Wouldn't you really want to tell the browser and others that this page does not exists. Otherwise someone can index your site saying that yourdomain.com/annoying/not_to_pleasent_url.html exists - and you don't want that
    – Trond
    Commented Mar 31, 2021 at 22:02
5

WordPress offers the function status_header() to return the correct status-code.

You can call this function inside your WordPress template/function:

// Will return http status header "200 OK"
status_header(200);
2

Wordpress is PHP, so look for where it's sending something like:

header("HTTP/1.0 404 Not Found");
1
  • Accidently downvoted you, but changed it. I'd rather not change WP core files. Commented Jun 14, 2010 at 17:32
2

Take a look at the pre_handle_404 hook (added in v4.5.0): https://developer.wordpress.org/reference/hooks/pre_handle_404/

// add to your functions.php
add_filter('pre_handle_404', function($preempt, $wp_query) {
    global $wp;
    $customPages = ['custom-1','custom-2','custom-3'];

    if (in_array($wp->request, $customPages)) {
      $preempt = true;
    }

    return $preempt;
}, 10, 2);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.