Створюємо цифрові рішення, які працюють на бізнес
Помилка 500 означає, що сервер отримав запит, але через неочікувану внутрішню проблему не зміг його виконати. Повідомлення не називає конкретної причини: однаковий код може з’явитися через фатальну PHP-помилку, несумісний плагін, пошкоджений .htaccess, нестачу пам’яті, неправильні права доступу або збій на рівні хостингу.
Тому найгірша стратегія — одночасно видаляти кеш, змінювати PHP, вимикати плагіни й перезаписувати файли. Якщо сайт запрацює, ви не зрозумієте, що саме допомогло; якщо стане гірше — не матимете чистої точки повернення. Правильний порядок: зафіксувати симптом, зберегти поточний стан, прочитати журнал помилок, перевіряти по одній гіпотезі та після кожної зміни повторювати той самий тест.
Якщо сайт приймає замовлення, оплати або заявки, а доступу до файлів і журналів немає, безпечніше одразу передати діагностику в межах технічної підтримки сайту. Невдале «швидке виправлення» на робочому магазині може коштувати дорожче за саму помилку.
За HTTP-стандартом 500 Internal Server Error — загальна відповідь на неочікувану серверну умову. Браузер бачить лише результат, але не знає, на якому шарі стався збій.
Запит до WordPress проходить кілька рівнів:
Помилка на будь-якому з етапів може завершитися кодом 500. Саме тому текст у браузері майже ніколи не достатній для діагнозу.
| Код | Що зазвичай означає | Куди дивитися спочатку |
|---|---|---|
| 500 | внутрішній збій застосунку або конфігурації | PHP/error log, останні зміни, плагіни, тема, .htaccess |
| 502 | проксі отримав некоректну відповідь від upstream | PHP-FPM, reverse proxy, контейнер, процес backend |
| 503 | сервіс тимчасово недоступний | обслуговування, перевантаження, ліміти, заблокований процес |
| 504 | шлюз не дочекався відповіді | довгий запит, зовнішній API, база, timeout |
| 403 | доступ заборонено | права, WAF, правила сервера, IP-блокування |
| 404 | адресу не знайдено | URL, правила ЧПУ, редиректи, маршрут |
Початковий код можна перевірити в DevTools браузера або через перевірку HTTP-заголовків. Важливо тестувати саме проблемну адресу, а не лише головну сторінку.
Коли сайт недоступний, дійте за короткою схемою:
Перед будь-яким редагуванням файлів потрібна відновлювана копія. Окремий порядок зберігання файлів, бази й контрольного відновлення описаний у гайді про резервне копіювання сайту.
Масштаб одразу звужує пошук.
/wp-admin/Найімовірніші причини: фатальна помилка під час раннього завантаження, пошкоджений файл конфігурації, несумісність PHP, .htaccess, недоступний PHP-FPM або серверний збій.
Перевіряйте тему, шаблон, кеш сторінок, плагін оптимізації та код, який виконується лише на frontend.
Причиною може бути плагін адміністративного інтерфейсу, імпорт, резервне копіювання, редактор, нестача пам’яті або надто довгий запит.
Дивіться шаблон цієї сторінки, shortcode, віджет, конкретний запит до бази, зовнішнє API або пошкоджені дані. Вимикати весь сайт через локальну проблему не потрібно.
Перевіряйте AJAX/REST-запит, ліміт пам’яті, max_execution_time, розмір запиту, PHP-FPM, webhook або відповідь платіжного сервісу. У Network браузера відкрийте саме невдалий запит і зафіксуйте його URL, метод та час.
Починайте не з припущень, а з логів. Залежно від хостингу вони можуть називатися Error Log, PHP log, Apache error log або Nginx error log. Для WordPress зручно тимчасово записувати помилки у wp-content/debug.log.
У wp-config.php, перед рядком про завершення редагування, можна тимчасово додати:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Так повідомлення записуються в журнал, але не показуються відвідувачам. Після діагностики поверніть WP_DEBUG у false, видаліть або захистіть журнал. У ньому можуть бути шляхи до файлів, назви таблиць та інші технічні деталі.
Приклад:
PHP Fatal error: Uncaught TypeError ...
in /wp-content/plugins/example-plugin/file.php on line 184
Найкорисніші частини:
Fatal error, TypeError, Allowed memory size exhausted;Не чіпляйтеся за перший warning у великому журналі. Відтворіть помилку, оновіть лог і дивіться на нові записи в той самий момент.
Плагін — найчастіший кандидат, якщо помилка з’явилася одразу після оновлення, встановлення нового розширення або зміни PHP.
Через SFTP або файловий менеджер перейменуйте папку конкретного плагіна, наприклад:
wp-content/plugins/example-plugin
wp-content/plugins/example-plugin.disabled
Якщо підозрюваного немає, можна тимчасово перейменувати всю папку plugins, але це вимкне всі розширення. На WooCommerce така дія може вплинути на кошик, оплату, доставку, листи й інтеграції. Після відновлення назви активуйте плагіни по одному, а не всі разом.
Каталог wp-content/mu-plugins завантажується автоматично й не вимикається зі звичайного списку. Якщо звичайні плагіни відключені, а помилка лишилась, перевірте MU-плагіни, drop-ins object-cache.php, advanced-cache.php, db.php і серверні інтеграції хостингу.
Якщо у файлах з’явився невідомий код, додаткові адміністратори або дивні редиректи, це вже не звичайний конфлікт. Виконайте окрему перевірку сайту на віруси і змініть доступи до хостингу, SFTP, бази та WordPress.
Тема може впасти після оновлення, ручного редагування functions.php, зміни версії PHP або виклику функції плагіна, якого вже немає.
Якщо WordPress Recovery Mode надіслав технічний лист, перейдіть за спеціальним посиланням і вимкніть проблемну тему. Якщо листа немає, через SFTP перейменуйте папку активної теми. WordPress спробує перейти на встановлену стандартну тему.
Перед тестом переконайтеся, що стандартна тема справді встановлена. Не видаляйте активну тему й не замінюйте її випадковим архівом: спочатку збережіть копію, назву версії та список локальних змін.
Якщо помилка лише в одному шаблоні, порівняйте його з останньою робочою версією. Часті причини:
.htaccessНа Apache синтаксична помилка або недозволена директива в .htaccess може спричинити 500 до запуску WordPress.
Безпечна перевірка:
.htaccess..htaccess.old.Не копіюйте чужий .htaccess цілком. У ньому можуть бути правила іншого домену, PHP handler, кеш, захист, редиректи або директиви, які ваш сервер не дозволяє.
На Nginx файлу .htaccess немає. Якщо порада «видаліть .htaccess» нічого не змінює, перевіряйте конфігурацію virtual host, error_log, PHP-FPM і правила reverse proxy.
Повідомлення Allowed memory size exhausted прямо вказує на нестачу пам’яті в конкретному процесі. Це не завжди означає, що треба просто підняти ліміт. Причиною може бути нескінченний цикл, важкий імпорт, велике зображення, невдалий запит або конфлікт плагінів.
Тимчасове збільшення ліміту може допомогти завершити діагностику, але спочатку зафіксуйте поточні значення. На керованому хостингу реальний ліміт може задаватися не WordPress, а php.ini, .user.ini, панеллю або політикою тарифу.
Схожі записи:
Maximum execution time exceeded — процес працював довше дозволеного;upstream timed out — вебсервер не дочекався PHP-FPM;server reached max_children — усі PHP-процеси зайняті;MySQL server has gone away — з’єднання з базою розірвано;No space left on device — закінчилося місце або inode.Якщо ліміти регулярно закінчуються, потрібна не маскувальна цифра, а профілювання запиту, cron, плагіна, бази й тарифу. Стабільне середовище починається з відповідного хостингу для сайту, але сильніший сервер не виправить нескінченний цикл у коді.
Старий плагін може використовувати конструкцію, видалену з нової PHP; новий плагін — вимагати версію, якої на сервері ще немає. Помилка часто з’являється після перемикання PHP у панелі або автоматичного оновлення середовища.
Перевірте:
Не перемикайте версію наосліп на production. Краще відтворити сайт на staging, оновити несумісний компонент і прогнати ключові сценарії. Тимчасовий відкат PHP може повернути доступ, але не повинен залишати сайт на непідтримуваній гілці.
Проблема часто виникає після ручного завантаження, розпакування архіву, перенесення чи запуску команди від іншого користувача. PHP не може прочитати файл, записати кеш або створити тимчасовий каталог.
Не використовуйте 777 як універсальне виправлення. Воно розширює доступ і приховує справжню проблему з власником або групою. Права залежать від конфігурації сервера; типові значення для звичайного середовища часто становлять 644 для файлів і 755 для каталогів, але перевіряти треба правила конкретного хостингу.
Зіставте проблемний файл із сусідніми робочими, перевірте owner/group і подивіться точний запис Permission denied у журналі.
Неповне оновлення, обрив диска, невдале ручне копіювання або зараження можуть пошкодити ядро. Перед перевстановленням переконайтеся, що помилка не в wp-content і не в конфігурації.
Безпечний варіант:
wp-content і wp-config.php;Якщо файли змінюються повторно після заміни, шукайте джерело зараження або процес, який їх перезаписує.
Коли код не змінювався, а 500 з’являється хвилями або лише під навантаженням, перевіряйте інфраструктуру:
WAF може повертати 500 або 403 лише для певного payload: наприклад, під час збереження сторінки з фрагментом коду. Не вимикайте захист глобально. Знайдіть ID правила в журналі й створіть точковий виняток лише після перевірки запиту.
Якщо є сумнів, чи домен, DNS і сервер узагалі відповідають правильно, пройдіть перевірку домену, хостингу та сервера. Помилку сертифіката або неправильний HTTPS не слід маскувати під 500: для цього є окремий гайд про SSL-сертифікат і виправлення HTTPS.
| Симптом | Найімовірніша зона | Перша перевірка |
|---|---|---|
| 500 одразу після оновлення плагіна | плагін або PHP-сумісність | error log, вимкнення конкретного плагіна |
білий екран після правки functions.php |
синтаксис теми | PHP log, відкат одного файлу |
| головна працює, внутрішні URL — 500 | rewrite або .htaccess |
тимчасове перейменування .htaccess |
| 500 лише під час імпорту | пам’ять, timeout, розмір пакета | PHP log, ліміти, розмір порції |
| 500 під час checkout | платіжний модуль, webhook, сесія | журнал WooCommerce, PHP log, Network |
| помилка виникає в години піку | ресурси або PHP-FPM | графіки CPU/RAM/I/O, max_children |
| один раз працює, один раз падає | кілька вузлів або нестабільний upstream | логи всіх вузлів, кеш/CDN, health checks |
| після перенесення | PHP, права, шляхи, конфіг | версії, owner/group, env, rewrite |
У магазині недостатньо повернути головну сторінку. Після виправлення перевірте:
Не повторюйте реальну оплату без контрольного сценарію. Використовуйте sandbox платіжної системи або спеціальне тестове замовлення й одразу перевіряйте журнали.
Ви втратите причинно-наслідковий зв’язок і не знатимете, що повернути назад.
Повний шлях до файлу, структура каталогів та фрагменти запиту допомагають не тільки вам. Записуйте помилки в закритий журнал.
Перейменування оборотне, видалення — ні. Спочатку збережіть файли й дамп.
777Це небезпечне маскування проблеми, а не правильне налаштування.
У магазині так можна стерти нові замовлення. Спочатку збережіть поточну базу, визначте час збою та план злиття даних.
Масове оновлення додає нові змінні. Спочатку ізолюйте причину й поверніть сервіс, потім оновлюйте контрольовано.
Код 200 на головній — лише початок. Перевірте:
/wp-admin/, вхід і збереження запису;Після відновлення запустіть перевірку швидкості сайту. Якщо 500 зникла, але TTFB різко виріс або сервер періодично не відповідає, причина могла залишитися й проявитися знову під навантаженням.
Звертайтеся по допомогу, якщо:
Для діагностики підготуйте URL, час появи, скриншот, останні зміни, доступ до хостингу й WordPress та фрагмент журналу без паролів і ключів. Це скорочує пошук із годин до конкретної перевірки. Якщо потрібне контрольоване відновлення, напишіть BB STUDIO — перевіримо логи, локалізуємо причину, повернемо сайт до роботи та складемо план, щоб збій не повторився.
WP_DEBUG_DISPLAY не показує помилки відвідувачам;.htaccess збережено перед зміною;
Давайте разом створимо щось дивовижне