告诉搜索引擎该页面不存在

时间:2012-11-18 16:39:37

标签: php http-status-code-404 search-engine-bots

我检查了日志,发现搜索引擎在我的网站上访问了很多虚假URL。它们很可能是在许多链接被更改之前,即使我已经进行了301重定向,但某些链接已经以非常奇怪的方式被更改,并且我的.htaccess文件无法识别。

所有请求都由index.php处理。如果由于URL错误而无法创建响应,则会显示自定义错误页面。使用简化代码index.php看起来像这样

try {
  $Request = new Request();
  $Request->respond();
} catch(NoresponseException $e) {
  $Request->presentErrorPage();
}

我刚刚意识到这个页面会返回一个状态200,告诉机器人该页面有效,即使它不是。

是否足以在catch语句中添加404标头以告诉机器人停止访问该页面?

像这样:

header("HTTP/1.0 404 Not Found");

我测试它时看起来不错,但我担心SE机器人(可能还有用户代理)会感到困惑。

3 个答案:

答案 0 :(得分:3)

你到了那里。这个想法是正确的 - 你想给他们一个404.但是,只需要一个微小的修正:如果客户端使用HTTP / 1.1进行查询而你使用1.0回答,一些客户端会感到困惑。

解决方法如下:

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");

答案 1 :(得分:1)

SE机器人 DO 在看到此内容时感到困惑:

HTTP/1.1 200 OK

<h1>The page your requested does not exist</h1>

或者这个:

HTTP/1.1 302 Object moved
Location: /fancy-404-error-page.html

解释here

  

为不存在的页面返回404或410以外的代码(或   将用户重定向到另一个页面,例如主页,而不是   返回404)可能会有问题。首先,它告诉搜索引擎   那个URL上有一个真实的页面。结果,该URL可能是   抓取并将其内容编入索引。由于Googlebot花费的时间   在不存在的页面上,您的唯一URL可能不会被发现   快速或经常访问,您的网站的爬网覆盖范围可能是   受影响(同样,你可能不希望你的网站排名很好   搜索查询找不到文件)。

您对以编程方式发送404标头的想法是正确的,它指示搜索引擎他们请求的URL不存在,并且他们不应该尝试抓取并编制索引。设置响应状态的方法:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");

header(":", true, 404);  // this is used to set a header AND modify the http response code
                         // ":" is used as a hack to avoid specifying a real header

http_response_code(404); // PHP >= 5.4

答案 2 :(得分:1)

well-behaved crawler尊重您网站顶层的robots.txt。如果您想要排除抓取工具,那么@ SalmanA的回复将起作用。示例robots.txt文件如下:

User-agent: *
Disallow: /foo/*
Disallow: /bar/*
Disallow: /hd1/*

它需要所有人都可读。请注意,这不会让用户离开页面,只是一个尊重robots.txt的机器人,大多数人都这样做。

相关问题