Перейти к содержимому
SEO/Опубликовано 24 сентября 2026 г./5 мин

Ошибка 500 на сайте: что проверить до звонка разработчику

Ошибка 500 на сайте: откуда берётся, что проверить самому до звонка разработчику и что видит поисковый робот. Сломали PHP и nginx двенадцатью способами: при включённом выводе ошибок семь из двенадцати отдают не 500, а 200 с текстом ошибки.

Ошибка 500 на сайте: что проверить до звонка разработчику
С
Команда NEXFORCE
SEO-эксперт NEXFORCE

Ошибка 500 (Internal Server Error) значит одно: сервер принял запрос и сломался, пока его выполнял. В отличие от 502 и 504, здесь нет посредника, который не дождался ответа. Поломался сам код сайта или настройки сервера.

Мы собрали стенд и сломали на нём PHP, Apache, nginx и WordPress двенадцатью способами. Смотрели, какой код получает посетитель, что пишется в журнал и когда поломка прячется за кодом 200. Затем обошли 260 сайтов компаний Екатеринбурга тремя неудобными, но безобидными адресами и проверили, падает ли от них хоть кто-нибудь.

Что говорит определение

Стандарт HTTP (RFC 9110, раздел 15.6.1) определяет 500 так: сервер, в нашем переводе, «столкнулся с непредвиденным условием, которое помешало ему выполнить запрос». Это самый общий код ошибки сервера: его отдают, когда более точного ответа нет.

Справочник кодов в Яндекс Вебмастере говорит то же и советует разработчику: «Проверьте логи сервера для выявления причин ошибки». Этот совет — главное в статье. Страница 500 почти никогда не говорит, что случилось, а журнал говорит всегда.

Стенд: какие поломки дают 500

Стенд — PHP 8.3 под Apache из официального образа WordPress, nginx 1.22.1 перед ним и отдельный WordPress 7 без базы данных. Вывод ошибок PHP выключен, как и положено на рабочем сайте.

ПоломкаКодЧто видит посетитель
Вызов несуществующей функции500пустую страницу, 0 байт
Необработанное исключение500пустую страницу
Синтаксическая ошибка в PHP500пустую страницу
Не хватило памяти (memory_limit)500пустую страницу
Превышено время выполнения500пустую страницу через 2 с
Нет драйвера базы данных500пустую страницу
Код сам отдал 500500свой текст
Опечатка в .htaccess500стандартную страницу Apache
Бесконечный rewrite в nginx500стандартную страницу nginx
try_files ссылается сам на себя500стандартную страницу nginx
WordPress не достучался до базы500«Error establishing a database connection»
Ошибка PHP после начала вывода200обрезанную страницу

Одиннадцать поломок честно отдали 500. Шесть из них выглядят для посетителя одинаково — белый экран без единого байта. Отличить нехватку памяти от синтаксической ошибки можно только по журналу:

  • PHP Fatal error: Allowed memory size of 16777216 bytes exhausted;
  • PHP Fatal error: Maximum execution time of 2 seconds exceeded;
  • PHP Parse error: syntax error, unexpected end of file;
  • Invalid command 'Redirec', perhaps misspelled — это Apache про .htaccess;
  • rewrite or internal redirection cycle — это nginx про зацикленные правила.

Двенадцатая поломка — самая коварная. Страница каталога начала отправляться, и на середине PHP упал. Заголовок с кодом 200 к этому моменту уже ушёл, поэтому сервер отдал 200 и 34 КБ страницы без конца. В журнале — та же PHP Fatal error, в ответе — «всё хорошо».

Когда 500 превращается в 200

Затем мы включили вывод ошибок (display_errors = On) — так часто оставляют после отладки или на дешёвом хостинге по умолчанию.

Результат: все семь PHP-поломок отдали код 200. На странице вместо содержимого — текст вроде Fatal error: Uncaught Error: Call to undefined function … in /var/www/html/fatal.php:1 с полным путём к файлу на сервере.

Для сайта это двойная беда:

  • робот поиска получает 200 и может проиндексировать текст ошибки как обычную страницу. Google о таком случае пишет: если «появляется пустая страница или сообщение об ошибке, в Search Console будет зарегистрирована ошибка soft 404»;
  • посторонний видит пути к файлам, имена функций и иногда строки подключения к базе.

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

Красивая страница ошибки не меняет код

Часто 500 прячут за своей страницей «Ведутся технические работы». На стенде мы настроили в nginx error_page 500 /krasivo.html — посетитель увидел текст, а код остался 500. Код меняется только явным указанием: error_page 500 =503 /krasivo.html отдал 503.

Разница важна для поиска. 503 означает «временно», и роботы относятся к нему мягче. Если сайт на плановых работах — отдавайте 503. Если упал код — 500 честнее, чем 200 с заглушкой.

Посредник код не меняет. Когда nginx стоит перед приложением, он пропускает 500 от приложения как есть: на стенде ответ через nginx совпал с ответом Apache байт в байт.

Что показал обход 260 сайтов

Обход 24.09.2026: к каждому сайту четыре запроса — главная и три неудобных адреса, которые обычный сайт должен пережить:

  • /?a=% — оборванная кодировка в параметре;
  • /?s[]=1 — параметр-массив вместо строки;
  • /% — оборванная кодировка в пути.

Главная ответила 200 у 212 сайтов, ещё 15 не ответили вовсе. Дальше считали только живые 212.

Запрос2003xx400500
/?a=%1713920
/?s[]=1204701
/%102081

В последней строке ещё один сайт ответил 404 и один промолчал.

Ошибка 500 — у двух сайтов из 212. У первого параметр-массив в поиске уронил страницу, и сайт показал сообщение о «критической ошибке». Второй отдал голый 500 на оборванную кодировку в пути, где остальные 208 ответили 400.

Вывод: одним разовым обходом 500 почти не ловится. Как и 502, это ошибка минут и отдельных страниц, а не постоянное состояние сайта. Узнать о ней можно из журнала сервера и из статистики обхода в Вебмастере, но не случайной проверкой главной.

Что проверить до звонка разработчику

Пять шагов, для которых не нужен доступ к коду.

  1. Весь сайт или одна страница. Откройте главную, одну статью и страницу из другого раздела. Падает одна страница — виноват её шаблон или модуль. Падает всё — общие настройки, база или хостинг.
  2. Код ответа. Команда curl -I https://сайт/ или проверка доступности покажут, 500 это на самом деле или страница с ошибкой и кодом 200.
  3. Что менялось. Обновление плагина, темы, версии PHP, правка .htaccess за последние сутки — первый подозреваемый. На стенде опечатка в одном слове .htaccess уронила всю папку сайта.
  4. Журнал ошибок. В панели хостинга он обычно называется «Журнал ошибок» или error.log. Последние строки с Fatal error, memory или .htaccess отвечают на вопрос «что сломалось» точнее любой догадки.
  5. Лимиты тарифа. Если в журнале строка Allowed memory size, сайту не хватило памяти. Лимит часто поднимается в панели хостинга, без разработчика.

Разработчику передайте адрес страницы, время ошибки и строку из журнала. С этим он найдёт причину за минуты, без этого — начнёт с тех же пяти шагов.

Что 500 значит для поиска

Справка Google описывает 500 прямо: робот «снижает частоту сканирования сайта. Она уменьшается пропорционально количеству отдельных URL, которые возвращают ошибку сервера». И дальше: «URL, которые постоянно возвращают такую ошибку, удаляются из индекса».

Отдельно опасен 500 на robots.txt. По справке Google робот в этом случае «не сканирует сайт на протяжении первых 12 часов». Падение одного служебного файла на полдня останавливает обход всего сайта.

Справка Вебмастера Яндекса: страница с кодом, отличным от 200, «недоступна для роботов и посетителей и не может попасть в поиск». Короткая разовая ошибка это не запустит — робот вернётся. Опасна повторяющаяся, например каждую ночь во время резервного копирования.

Чего мы проверить не смогли

  • Выводят ли сайты из обхода тексты ошибок посетителям. Для этого пришлось бы специально провоцировать ошибки на чужих сайтах и разглядывать ответы — это уже не проверка, а разведка, и мы её не делали.
  • PHP-FPM за nginx. Стенд собран на PHP под Apache. По устройству FPM отдаёт тот же статус, но отдельно мы это не мерили.
  • Как быстро робот Яндекса убирает страницу, которая отдаёт 500. Для этого нужно ломать свою проиндексированную страницу на недели.

Границы замера

  • Стенд — один набор версий: PHP 8.3, Apache из образа WordPress 7, nginx 1.22.1. На других версиях поведение в мелочах может отличаться.
  • Обход — 260 сайтов компаний Екатеринбурга, по четыре запроса на сайт, один раз, 24.09.2026. Разовый обход не видит ошибок, которые случаются в другое время.
  • Имена сайтов с ошибками мы не называем: это компании, а не учебные примеры.

Коротко

  • 500 значит: сломался сам сервер или код сайта, а не посредник.
  • Шесть разных PHP-поломок выглядят одинаково — белый экран. Различает их только журнал ошибок.
  • Со включённым выводом ошибок все семь PHP-поломок отдали 200 с текстом ошибки. Проверяйте содержимое страницы, а не только код.
  • Своя страница ошибки код не меняет: для плановых работ нужен явный 503.
  • Из 212 живых сайтов неудобные адреса уронили два.
  • Google урезает обход при 500 и удаляет постоянно падающие адреса; 500 на robots.txt останавливает обход на 12 часов.
Вопросы и ответы

FAQ по теме

Что значит ошибка 500 на сайте?+
Сервер получил запрос, но сломался, пока его выполнял. Чаще всего падает код сайта: ошибка в PHP, нехватка памяти, превышение времени выполнения, недоступная база данных. Реже — настройки веб-сервера, например ошибка в .htaccess или бесконечная переадресация внутри nginx.
Ошибка 500 — это проблема у меня или у сайта?+
У сайта. Код 500 отдаёт сервер, и от браузера, провайдера или устройства посетителя он не зависит. Если сайт открывается у других людей, но не у вас, — дело не в ошибке 500, а в чём-то другом.
Как ошибка 500 влияет на позиции в поиске?+
Google при ошибках 5xx сокращает обход, а адреса, которые отдают ошибку постоянно, удаляет из индекса. Справка Яндекса предупреждает, что страница с кодом, отличным от 200, не может попасть в поиск. Разовая короткая ошибка позиций не уронит, повторяющаяся — уронит.
Почему сайт показывает ошибку, но код ответа 200?+
Так бывает, когда включён вывод ошибок PHP или код упал после того, как страница начала отправляться. На нашем стенде это случилось в семи сценариях из двенадцати. Робот получает 200 и может проиндексировать текст ошибки вместо страницы.