HTTPQUERY
Русский

404 Not Found

Применение

Когда приходит ошибка 404 Not Found, этот статус не уточняет, недоступен ли ресурс навсегда, недоступен временно или не существовал никогда. Чаще всего такая ошибка возникает из-за опечаток в URL, и её постоянно видят разработчики, работающие с набором ещё не готовых ресурсов.

Ссылки на адреса, возвращающие 404 Not Found, обычно называют мёртвыми или битыми ссылками. Этот статус также применяют, когда сервер не желает подтверждать существование ресурса.

Если сервер знает, что ресурс когда-то существовал по указанному адресу, но был удалён навсегда, статус 410 Gone оказывается информативнее.

Поскольку с этой ошибкой очень часто сталкиваются конечные пользователи, многие серверы используют собственную страницу ошибки, содержательную и уместную для своего сайта.

Примечание

404 не означает, что клиент заблокирован. Блокировка выражается кодом 403 Forbidden. Некоторые серверы возвращают 404 вместо 403, чтобы скрыть существование ресурса. 404 не указывает на необратимость. Ресурс может появиться позже. Для безвозвратного удаления сервер возвращает 410 Gone.

Влияние на SEO

Поисковые системы вроде Google не индексируют URL, возвращающий статус 404. Ранее проиндексированные URL, которые начинают возвращать этот код состояния, удаляются из результатов поиска. Страницы, возвращающие этот код, не расходуют краулинговый бюджет. Google обрабатывает 404 и 410 совершенно одинаково. Оба кода удаляют содержимое из индекса с одной и той же скоростью. Bingbot воспринимает 404 как сигнал об удалении содержимого и исключает URL из индекса после подтверждения этого статуса при последующем повторном сканировании. Возврат 200 с содержимым страницы ошибки вместо корректного 404 порождает мягкий 404, который расходует краулинговый бюджет и подрывает доверие к серверным сигналам сайта.

Пример

Клиент запрашивает ресурс, и сервер отвечает 404 Not Found, поскольку по указанному адресу ресурса не существует.

Запрос

GET /documents/secret-formula.pdf HTTP/1.1
Host: example.com

Ответ

HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 216

<html>
  <head>
    <title>Resource Not Found</title>
  </head>
  <body>
    <p>The requested resource was not found.
    Check the spelling of the address.</p>
  </body>
</html>

Как исправить

404 Not Found означает, что по запрошенному адресу не существует никакого ресурса.

Проверьте написание URL и путь. Опечатки в пути, имени файла или строке запроса — самая частая причина. Внимательно сверьте каждый сегмент адреса. Копируйте путь прямо из исходной ссылки, а не набирайте вручную.

Проверьте чувствительность к регистру. Серверы на базе Linux считают /Page и /page разными путями. Соблюдайте точный регистр исходного URL. Серверы IIS на базе Windows по умолчанию регистронезависимы, поэтому 404 на IIS указывает на действительно отсутствующий ресурс.

Обратите внимание на отсутствующую завершающую косую черту. Некоторые серверы различают /path и /path/. Добавьте или уберите завершающий слеш и повторите запрос. nginx и Apache обрабатывают завершающие слеши по-разному в зависимости от конфигурации try_files и DirectorySlash.

Убедитесь, что ресурс существует на сервере. Проверьте, что файл или маршрут развёрнут и доступен. Подключитесь к серверу по SSH и убедитесь, что файл находится по ожидаемому пути относительно корня документов. В nginx проверьте директиву root или alias в подходящем блоке location. В Apache проверьте DocumentRoot в виртуальном хосте.

Настройте перенаправления 301 или 308 для перемещённого содержимого. Когда ресурс переезжает на новый адрес, перенаправляйте старый URL, чтобы не появлялись битые ссылки. В nginx:

location = /old-path {
    return 301 /new-path;
}

В Apache .htaccess:

Redirect 301 /old-path /new-path

Проверьте правила переписывания на сервере. Просмотрите правила mod_rewrite в Apache либо try_files и блоки location в nginx. Неверно настроенное правило переписывания молча отбрасывает запросы к корректным путям. Включите журналирование переписываний, чтобы проследить вычисление правил. В Apache временно задайте LogLevel alert rewrite:trace3.

Проверьте MIME-типы и сопоставления обработчиков в IIS. IIS возвращает 404.3, когда для расширения файла не зарегистрирован MIME-тип или сопоставление обработчика. Добавьте недостающий MIME-тип в диспетчере IIS или через web.config:

<staticContent>
  <mimeMap fileExtension=".json"
    mimeType="application/json" />
</staticContent>

Проверьте конфигурацию DNS и виртуальных хостов. Домен, указывающий на другой сервер, или отсутствующая запись виртуального хоста приводят к 404 для всех путей. Убедитесь, что записи DNS A/CNAME разрешаются в правильный IP-адрес сервера и что на сервере есть соответствующая директива server_name (nginx) или ServerName (Apache).

Проведите аудит битых ссылок краулером. Запустите краулер по сайту, чтобы обнаружить все ответы 404. Исправьте битые внутренние ссылки и отправьте обновлённый XML sitemap поисковым системам, чтобы ускорить переиндексацию перемещённого содержимого. Среди инструментов для поиска битых ссылок — Google Search Console (отчёт о покрытии), Screaming Frog, Ahrefs Site Audit или wget —spider для проверки из командной строки.

Примеры кода

.NET

HttpStatusCode.NotFound

Rust

http::StatusCode::NOT_FOUND

Rails

:not_found

Go

http.StatusNotFound

Symfony

Response::HTTP_NOT_FOUND

Python3.5+

http.HTTPStatus.NOT_FOUND

Java

java.net.HttpURLConnection.HTTP_NOT_FOUND

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_NOT_FOUND

Angular

@angular/common/http/HttpStatusCode.NotFound