Запись

Сайт работает, но некоторые страницы выдают ошибку: как найти причину

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

некоторые страницы недоступны

Почему сайт работает, а некоторые страницы недоступны

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

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

Ниже - последовательная диагностика, которая поможет понять, почему некоторые страницы недоступны и где именно возникла проблема.

Сначала определите, какую ошибку выдаёт страница

Не стоит начинать с переустановки CMS, отключения всех плагинов или изменения PHP. Сначала нужно определить характер ошибки.

Откройте проблемную страницу и посмотрите, что именно происходит:

  • ошибка 404 - страница не найдена;
  • ошибка 403 - доступ запрещён;
  • ошибка 500 - внутренняя ошибка сервера;
  • ошибка 502, 503 или 504 - проблема на уровне сервера или PHP;
  • белая страница без текста;
  • PHP Fatal error;
  • страница загружается бесконечно;
  • открывается неправильная страница;
  • появляется ошибка базы данных;
  • часть страницы загружается, а затем выполнение прекращается.

Тип ошибки значительно сужает круг возможных причин.

Если отдельные страницы выдают ошибку 404

Ошибка 404 означает, что сервер или CMS не смогли сопоставить запрошенный URL с существующей страницей.

Если сама страница существует в административной панели, проверьте прежде всего структуру URL.

Проверьте адрес страницы

Сравните URL проблемной страницы с её текущим адресом в административной панели. Страница могла быть переименована, перенесена в другую категорию или получить новый ЧПУ-адрес.

Например, раньше страница находилась по адресу:

/catalog/product.html

а после изменения структуры сайта стала доступна по адресу:

/catalog/category/product

Старый URL без настроенного 301-редиректа будет возвращать 404.

Пересохраните настройки постоянных ссылок

В WordPress достаточно иногда повторно сохранить настройки постоянных ссылок:

Настройки → Постоянные ссылки → Сохранить изменения.

Менять структуру при этом необязательно.

Так WordPress повторно формирует правила маршрутизации.

В OpenCart, Bitrix и других CMS необходимо проверить настройки SEO URL, модуль ЧПУ и правила в .htaccess.

Проверьте .htaccess

Если правила перенаправления повреждены или были изменены вручную, часть URL может перестать обрабатываться.

Особенно это характерно для сайтов, где одновременно используются:

  • ЧПУ;
  • 301-редиректы;
  • HTTPS;
  • перенаправления с www или без www;
  • удаление завершающего слеша;
  • SEO-модули.

Ошибка в одном регулярном выражении способна затронуть только определённую группу страниц.

Если некоторые страницы выдают ошибку 500

HTTP 500 означает, что при обработке запроса произошла серверная ошибка. Если остальные страницы работают, чаще всего причина связана с кодом, выполняемым только на проблемном URL.

Например, это может быть:

  • PHP Fatal error;
  • ошибка в шаблоне страницы;
  • ошибка плагина или модуля;
  • неверный вызов функции;
  • ошибка SQL-запроса;
  • отсутствующий файл;
  • несовместимый PHP-код;
  • превышение лимита памяти;
  • превышение времени выполнения скрипта.

Откройте журнал ошибок PHP

При ошибке 500 один из самых полезных источников информации - журнал ошибок PHP.

В зависимости от хостинга файл может называться:

error.log
php_error.log
error_log

В панели управления хостингом журнал также может находиться в разделе «Логи», «Журналы», «Ошибки PHP» или «Логи сайта».

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

Проверьте PHP Fatal error

Если выполнение PHP-кода аварийно прекращается, в журнале может появиться сообщение вроде:

PHP Fatal error: Uncaught Error...

Особенно важно обратить внимание на:

  • путь к файлу;
  • номер строки;
  • название функции или класса;
  • текст ошибки.

Например, ошибка может возникать только в шаблоне карточки товара. Тогда главная страница и категории будут работать, а товары - нет.

Или проблема находится в функции вывода статей, поэтому весь сайт работает, кроме блога.

Ошибка может находиться в данных конкретной страницы

Если не открывается всего одна или несколько страниц одного типа, проблема может быть не в программном коде, а в их данных.

Например:

  • неверное значение в базе данных;
  • повреждённая запись;
  • пустое обязательное поле;
  • некорректный ID;
  • ссылка на удалённую категорию;
  • битый сериализованный массив;
  • неправильный JSON;
  • неожиданный символ или кодировка;
  • слишком большое содержимое поля.

Хороший способ проверки - создать новую страницу того же типа.

Если новая страница работает, а старая нет, вероятно, проблема связана именно с данными конкретной записи.

Проверьте шаблон страницы

Многие CMS используют разные шаблоны для разных типов контента.

Например, могут существовать отдельные файлы для:

  • главной страницы;
  • категории;
  • товара;
  • статьи;
  • результатов поиска;
  • страницы контактов;
  • личного кабинета.

Поэтому повреждение одного файла вовсе не обязательно приведёт к падению всего сайта.

Если все статьи перестали открываться, но остальные страницы работают, нужно проверить шаблон статьи и связанные с ним функции.

Если проблема возникает только в карточках товаров - проверяются шаблон товара, контроллер, модель и модули, подключаемые именно на карточке.

Проверьте плагины и модули

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

Например:

  • SEO-плагин изменяет URL страниц;
  • модуль фильтра работает только в категориях;
  • галерея подключается только в товарах;
  • форма оплаты загружается только при оформлении заказа;
  • плагин комментариев работает только в статьях.

Если проблема появилась после установки или обновления расширения, временно отключите именно его и повторите проверку.

Не следует сразу отключать десятки модулей на рабочем сайте. Сначала стоит определить, какие расширения вообще участвуют в формировании проблемной страницы.

Если не открываются страницы одного раздела

Ситуация, когда не работает целая группа URL, часто указывает на проблему маршрутизации.

Например, работают:

/catalog/
/contacts/
/about/

но не открываются:

/blog/article-1/
/blog/article-2/
/blog/article-3/

В этом случае стоит проверить:

  • маршрут /blog/;
  • правила ЧПУ;
  • контроллер раздела;
  • шаблон статьи;
  • SEO-модуль;
  • конфликт slug или alias.

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

Проверьте конфликты URL

Иногда разные сущности сайта получают одинаковый адрес.

Например, URL /news/ одновременно используется:

  • страницей;
  • категорией;
  • модулем;
  • виртуальным маршрутом CMS.

В результате система может неправильно определять, какой контроллер должен обработать запрос.

Такая проблема нередко появляется после изменения структуры сайта или установки SEO-модуля.

Проверьте базу данных

Если CMS получает данные страницы из MySQL или другой базы данных, ошибка запроса может приводить к недоступности отдельных страниц.

В журнале могут встречаться сообщения:

Table doesn't exist
Unknown column
Duplicate entry
Column not found
SQL syntax error

Также возможны проблемы с кодировками и сравнением строк.

Например:

Illegal mix of collations

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

Проверьте права доступа к файлам

Если определённый PHP-файл, шаблон или каталог имеет неправильные права, сервер может возвращать ошибку 403 или 500.

Обычно для большинства конфигураций используются:

файлы - 644
каталоги - 755

Но конкретные требования зависят от конфигурации сервера и хостинга.

Не следует без необходимости назначать права 777. Это не универсальный способ исправления ошибок и может снизить безопасность сайта.

Очистите кеш

После обновления сайта часть страниц иногда продолжает использовать старые данные.

Очистить может потребоваться:

  • кеш CMS;
  • кеш шаблона;
  • кеш плагина оптимизации;
  • OPcache;
  • кеш CDN;
  • кеш браузера.

Особенно это актуально после изменения маршрутов, PHP-кода, шаблонов или структуры URL.

Проверьте страницу в режиме инкогнито

Если проблема наблюдается только у одного пользователя или браузера, откройте URL:

  • в режиме инкогнито;
  • в другом браузере;
  • на другом устройстве;
  • через другую сеть.

Это позволяет исключить локальный кеш, cookies и браузерные расширения.

Если страница долго загружается, а затем выдаёт ошибку

Когда проблемная страница открывается значительно дольше остальных, причина часто связана с тяжёлой операцией:

  • медленным SQL-запросом;
  • большим количеством записей;
  • внешним API;
  • генерацией изображений;
  • обработкой большого файла;
  • бесконечным циклом;
  • неоптимизированным PHP-кодом.

В журнале при этом может появляться сообщение:

Maximum execution time exceeded

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

Если появляется ошибка Allowed memory size exhausted

Такая ошибка означает, что PHP-процесс превысил разрешённый объём памяти.

Если она возникает только на некоторых страницах, вероятно, именно эти страницы обрабатывают больше данных или запускают ресурсоёмкий код.

Например, причиной могут быть:

  • вывод тысяч товаров без пагинации;
  • обработка больших изображений;
  • неоптимальный запрос;
  • рекурсивная функция;
  • ошибка плагина;
  • загрузка большого массива данных.

Увеличение memory_limit может временно убрать ошибку, но сначала желательно понять, почему конкретной странице требуется столько памяти.

Проверьте изменения перед появлением ошибки

Один из самых быстрых способов найти причину - вспомнить, что менялось непосредственно перед появлением проблемы.

Это могло быть:

  • обновление CMS;
  • обновление PHP;
  • установка плагина;
  • обновление модуля;
  • изменение шаблона;
  • изменение .htaccess;
  • перенос сайта;
  • изменение структуры URL;
  • импорт товаров;
  • редактирование базы данных.

Если проблема появилась сразу после конкретного изменения, начинать диагностику нужно именно с него.

Пошаговая диагностика

Если некоторые страницы сайта недоступны, оптимальная последовательность проверки выглядит так:

  1. Открыть проблемный URL и определить код или характер ошибки.
  2. Проверить, существует ли страница в административной панели.
  3. Сравнить рабочие и нерабочие URL.
  4. Проверить журнал ошибок PHP и веб-сервера.
  5. Проверить правила ЧПУ и .htaccess.
  6. Определить, используется ли на проблемных страницах отдельный шаблон.
  7. Проверить плагины и модули, работающие именно на этих страницах.
  8. Проверить данные страницы в базе.
  9. Очистить кеш CMS, сервера и CDN.
  10. Проверить последние изменения на сайте.

Такой подход обычно эффективнее, чем хаотично менять настройки сервера или отключать все расширения подряд.

Почему важно смотреть на группу проблемных страниц

При диагностике полезно искать общее между неработающими URL.

Например:

  • не работают только товары - проверяем карточку товара;
  • не работают только статьи - проверяем блог;
  • не работает одна категория - проверяем её данные и SEO URL;
  • не работают все страницы после определённого URL-префикса - проверяем маршрутизацию;
  • не работают страницы с большим количеством данных - проверяем память, SQL и время выполнения;
  • не работают только старые ссылки - проверяем редиректы.

Чем точнее определена группа проблемных страниц, тем быстрее можно локализовать неисправность.

Не включайте отображение PHP-ошибок на рабочем сайте надолго

Для диагностики иногда включают вывод PHP-ошибок непосредственно на страницу. На рабочем сайте делать это постоянно не стоит.

Сообщения PHP могут раскрывать:

  • пути к файлам на сервере;
  • названия таблиц;
  • структуру приложения;
  • названия классов и модулей.

Безопаснее записывать ошибки в журнал и анализировать их там.

Когда стоит восстанавливать сайт из резервной копии

Резервная копия полезна, если точно известно, что до определённого изменения страницы работали.

Однако восстановление всего сайта не должно быть первым действием. Если причина находится, например, в одном неправильном URL или одной записи базы данных, полный откат может отменить полезные изменения и новые заказы.

Сначала желательно определить источник проблемы и восстановить только повреждённый компонент.

Что делать, если самостоятельно найти причину не удалось

Для технической диагностики полезно подготовить:

  • адрес работающей страницы;
  • адрес проблемной страницы;
  • точный текст ошибки;
  • фрагмент error.log в момент открытия страницы;
  • название CMS;
  • версию PHP;
  • информацию о последних изменениях.

Эти данные позволяют значительно быстрее определить, находится ли проблема в PHP-коде, базе данных, шаблоне, модуле, маршрутизации или настройках сервера.

Итог

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

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

Нужна помощь с похожей задачей?

Пришлите ссылку на сайт и кратко опишите задачу — я посмотрю и предложу следующий шаг.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *