Паспорт проекта
Проект: сайт стоматологической клиники (128 страниц, блог, 8 посадочных).
Стек после работы: WordPress 7.1, PHP 8.3, 5 плагинов и 11 изолированных микро-модулей.
Роль: технический директор (аудит, рефакторинг, безопасность, деплой).
Длительность: 8 недель.
Проблема: сайт, который копили, а не проектировали
Сайт клиники жил девять лет. Его собирали разные подрядчики, и каждый добавлял свой плагин под свою задачу: галерею, слайдер, формы, чат. Плагины никто не удалял — их просто выключали «на всякий случай». В итоге на сервере мёртвым грузом лежал 51 плагин.
Аудит показал картину, типичную для тяжёлого IT-наследия:
Огромная база данных с десятками таблиц от давно удалённых модулей.
Медиатека на 661 МБ с несжатыми фотографиями врачей по 15 МБ.
Десятки дублирующихся страниц и невидимый для поисковиков блог.
Первый экран на мобильном телефоне появлялся через 14 секунд из-за конфликтующих скриптов.
Сайт-наследие не был сломан окончательно. Но он был собран из чужих компромиссов, где каждая новая правка могла обрушить систему.
Точка невозврата: скрытая угроза бизнесу
На второй день аудита стало понятно, что медленная загрузка — это меньшая из проблем. В коде активной темы был найден чужой скрипт (бэкдор).
Вход без пароля. Скрипт позволял любому, кто знает специальную ссылку, зайти в админку с правами владельца без ввода пароля.
Утечка базы. Полный дамп базы данных пациентов лежал в корне сайта и скачивался по прямой ссылке. Никакой защиты.
Открытые ключи. Токен интеграции с CRM лежал в коде открытым текстом.
Для медицинской клиники это не просто технический баг — это прямая угроза бизнесу, нарушение 152-ФЗ и риск колоссальных репутационных потерь.
Решение: чинить, а не переписывать
Очевидный ответ большинства студий на такой аудит — «нужно всё сносить и делать новый сайт». Я предложил обратное.
Контент. Девять лет статей, описаний сложного лечения и профилей врачей. Перенос текстов — это потеря смыслов и месяцы работы редактора.
SEO-позиции. Сайт высоко ранжировался в поиске. Переезд на новый движок обрушил бы трафик минимум на квартал.
Арифметика. Глубокий рефакторинг стоит кратно дешевле сборки нового портала.
Задача звучала так: сохранить всё, что даёт трафик, и безжалостно вырезать всё, что создаёт уязвимости.
Процесс: хирургическое вмешательство
Я не трогал живой сайт. Первым шагом я развернул полную копию проекта на изолированном локальном сервере. Ни одна правка не выходила на «прод» без проверки и резервной копии.
1. Архитектурная чистка: 51 плагин → 5
Я удалил 46 конфликтующих плагинов. Опасность в том, что «неактивный» плагин часто оставляет после себя невидимые связи в базе данных, без которых сайт рассыпается.
Чтобы сохранить логику, я переписал нужные функции (вывод телефонов, меню, акции) в 11 компактных микро-модулей. Они работают на уровне ядра: не конфликтуют, не тормозят систему, и их невозможно случайно отключить из админки.
2. Умная работа с медиа (вес страницы: 7,9 МБ → 0,6 МБ)
Вместо хаотичной загрузки картинок я внедрил строгую приоритизацию. Главный баннер получает команду грузиться мгновенно, а всё, что находится ниже линии скролла, ждёт своей очереди. Специальный скрипт автоматически пережал 343 тяжёлые фотографии в современный формат WebP. Итог: вес критических медиафайлов снизился на 87%.
3. Единый движок врачей
Раньше профили врачей вставлялись на страницы услуг вручную, разными кусками кода. Это рождало хаос: уволившиеся сотрудники оставались на сайте, а стили разъезжались.
Я собрал единую базу специалистов. Теперь новый врач добавляется в систему ровно один раз, а на нужных страницах он появляется автоматически, с правильной должностью и стажем.
4. Отсечение мёртвого трафика
На сайте исторически работал модуль интернет-магазина (WooCommerce), который тянул 16% поискового трафика на страницы ирригаторов и зубной пасты, но давал ноль заявок на лечение. Он замедлял систему и создавал дыры в безопасности. Мы осознанно ампутировали магазин. Клиника платит за реальных пациентов, а не за случайные клики в Google.
5. Надёжность заявок
Формы на сайте отправляли лиды с ошибками или двоили их. Я вынес ключи от CRM в защищённый конфиг сервера, настроил строгую проверку сертификатов и добавил технический след (IP, время согласия с политикой обработки данных) прямо в письмо с заявкой.
Урок: цена правок на живом сервере
Почему я категорически запрещаю вносить изменения на живой сайт? В первый день, обнаружив вирус, я попытался вырезать его код быстрым скриптом прямо на боевом сервере. Регулярное выражение захватило лишнюю строку, и сайт упал с 500-й ошибкой.
Я восстановил систему из бэкапа за две минуты, но вывод оказался дороже самого инцидента: скорость, которую разработчик экономит на отсутствии тестового стенда, всегда оплачивается минутами простоя бизнеса. После этого — только строгий деплой через Git.
Результат в цифрах
Замеры независимого инструмента Lighthouse на одной и той же странице (мобильное устройство, медленная сеть) «до и после»:
Появление первого экрана (LCP): 14,0 с → 4,2 с, ускорение на 70%.
Ответ сервера (TTFB): 2,7 с → 0,07 с, ускорение на 97%.
Вес страницы: 7,92 МБ → 0,61 МБ.
Количество запросов: 221 → 51.
Безопасность: бэкдоры устранены, база данных закрыта от публичного доступа.
Чего я не делал (осознанные компромиссы)
Я не показываю иллюзию идеального продукта. В проекте остался технический долг, согласованный с владельцем:
Не отключён тяжёлый скрипт аналитики. Он съедает часть производительности, но без него клиника теряет управление рекламой. Бизнес-контроль оказался важнее синтетических метрик скорости.
Не внедрена онлайн-запись. Полноценная интеграция расписания врачей с медицинской информационной системой (МИС) — это отдельный сложный проект, который не входил в рамки базового спасения архитектуры.
Кому это подходит
Медицинским клиникам, салонам и локальному бизнесу, чей сайт за 5–10 лет оброс десятками ненужных плагинов.
Тем, кто получает заявки, но боится трогать сайт, потому что любая смена текста может обрушить верстку.
Владельцам, которым нужно ускорить портал и закрыть уязвимости, но категорически нельзя терять накопленные SEO-позиции.
Рефакторинг — это не про «переписать всё красиво для программистов». Это процесс превращения непредсказуемого чёрного ящика в стабильный бизнес-актив. Заявка доходит, страница открывается мгновенно, а добавление врача не требует вызова инженера.
Если ваш сайт грузится дольше трёх секунд, а список плагинов не помещается на один экран — начните с технического аудита. Два дня, 10 000 ₽. Сумма вычитается из стоимости последующих работ.
