Сообщите поисковым системам, что страница не существует
Я проверил логи и обнаружил, что поисковые системы посещают множество поддельных URL на моем сайте. Скорее всего, они были сделаны до того, как многие ссылки были изменены, и хотя я сделал 301 переадресацию, некоторые ссылки были изменены очень странным образом и не распознаются моим файлом.htaccess.
Все запросы обрабатываются index.php. Если ответ не может быть создан из-за неверного URL, вместо него отображается пользовательская страница ошибки. С упрощенным кодом index.php выглядит так
try {
$Request = new Request();
$Request->respond();
} catch(NoresponseException $e) {
$Request->presentErrorPage();
}
Я только что понял, что эта страница возвращает статус 200, сообщающий боту, что страница действительна, хотя это не так.
Достаточно ли добавить заголовок с 404 в операторе catch, чтобы боты перестали посещать эту страницу?
Как это:
header("HTTP/1.0 404 Not Found");
Когда я тестирую, все выглядит нормально, но я боюсь, что боты SE (и, возможно, пользовательские агенты) будут сбиты с толку.
3 ответа
Вы получаете там. Идея верна - вы хотите дать им 404. Однако есть одно маленькое исправление: если клиент запрашивает HTTP/1.1, а вы отвечаете 1.0, некоторые клиенты могут запутаться.
Способ обойти это следующим образом:
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
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 тратит на несуществующие страницы, ваши уникальные 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
Хорошо ведущий сканер уважает robots.txt на верхнем уровне вашего сайта. Если вы хотите исключить сканеры, ответ @SalmanA сработает. Пример файла robots.txt:
User-agent: *
Disallow: /foo/*
Disallow: /bar/*
Disallow: /hd1/*
Это должно быть доступно для чтения всем. Обратите внимание, что это не отвлечет пользователей от страниц, просто бот, который уважает robots.txt, что большинство из них делает.