1

我检查了日志,发现搜索引擎在我的网站上访问了很多虚假 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 机器人(可能还有用户代理)会感到困惑。

4

3 回答 3

3

你快到了。这个想法是正确的——你想给他们一个 404。但是,只有一点点更正:如果客户端使用 HTTP/1.1 查询而你使用 1.0 回答,一些客户端会感到困惑。

解决方法如下:

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
于 2012-11-18T16:43:11.987 回答
1

行为良好的抓取工具会尊重您网站顶层的 robots.txt。如果您想排除爬虫,那么@SalmanA 的响应将起作用。示例 robots.txt 文件如下:

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

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

于 2012-11-18T18:14:51.080 回答
1

当 SE 机器人看到这个时,他们确实会感到困惑

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

这里解释:

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

您关于以编程方式发送 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
于 2012-11-18T17:44:48.510 回答