«Строй-Прораб 24/7» — доработка и аудит сайта (WordPress + Elementor)
Строительная компания (пристройки/надстройки, кровля), Москва/МО · Строительство / лидогенерация (B2C/B2B)
Сайт строительной компании живёт на заявках. Сделал 13 пунктов задания и 5 доработок — программно, без ручной сборки в визуальном редакторе.
- PHP
- WordPress
- Elementor
- Elementor Pro
- Hello Elementor
- JavaScript
- CSS/SCSS
- MySQL
- WP-CLI
- Swiper
- Yoast SEO
- Schema.org JSON-LD
- SMTP/PHPMailer
- Telegram API
- Яндекс.Метрика
В цифрах
- 13
- пунктов ТЗ заказчика реализованы и визуально подтверждены
- 5
- дополнительных ad-hoc доработок (Д1–Д5: моб. меню, FAB, MAX, квизы-карточки, модалка расчёта)
- 53
- коммита за период 01–28.06.2026 (локальный git, ветка main)
- 57/100
- выведенный индекс здоровья сайта по итогам аудита (6 направлений)
- ~30
- находок аудита с доказательствами (LEAD/SEC/LAW/PERF/SEO/OPS), приоритизированы
- 74
- записи лидов в журнале CPT sp_lead (на момент аудита)
- v0.1.44
- версия кастом-плагина stroyprorab-customizations
Ключевое
- Заявки перестали теряться: сначала пишутся в журнал на сайте, потом уходят письмом и в мессенджер, с повторной попыткой при сбое.
- Восстановил устройство сайта по коду и базе, а не по виду в редакторе: содержимое страниц конструктор хранит в базе, и без этой карты правки вслепую ломают вёрстку.
- Собрал блоки, которых не было: многошаговый опросник для расчёта, окно расчёта стоимости, раздел вопросов и ответов, карусель первого экрана, мобильное меню.
- Провёл аудит по шести направлениям, включая закон о персональных данных: оценка состояния 57 из 100 и около 30 находок с доказательствами.
- Заказчик получил два документа: технический реестр находок и отдельный отчёт, по которому можно принимать решения не будучи инженером.
Задача
Строительная компания принимает заявки через сайт: формы и всплывающее окно ведут в почту и мессенджер. Сайт уже работал, и заказчик прислал список из 13 доработок — хлебные крошки, карусель на первом экране, многошаговый опросник для расчёта, блок акции, раздел вопросов и ответов, всплывающее предложение бесплатного замера.
Главное условие заказчик задал сам: делать всё программно, по прямому доступу к серверу, без ручной сборки в визуальном редакторе. Тестовой копии сайта при этом не существует — правки идут на живой.
Что сделано
- Восстановил устройство сайта по коду и базе данных, а не по виду в редакторе. Содержимое страниц визуальный конструктор хранит в базе одним куском, и без такой карты правка вслепую ломает вёрстку целиком.
- Сделал 13 пунктов задания и ещё 5 доработок, пришедших по ходу. Каждая правка — отдельным обратимым шагом: снимок состояния, патч, проверка на живой странице, готовый откат.
- Собрал блоки, которых на сайте не было: многошаговый опросник для расчёта (в нескольких экземплярах на разных страницах), окно расчёта стоимости, раздел вопросов и ответов, карусель первого экрана, боковую кнопку мессенджеров, выезжающее мобильное меню.
- Наладил доставку заявок. Теперь заявка сначала записывается в журнал на сайте и только потом уходит письмом и в мессенджер, с повторной попыткой при сбое. Раньше сбой доставки означал бесследно потерянного клиента.
- Перевёл отправку почты на аутентифицированный ящик на домене сайта, чтобы письма перестали попадать в спам.
- Провёл аудит по шести направлениям, включая соответствие закону о персональных данных, и собрал находки с доказательствами — плюс отдельный отчёт для заказчика на человеческом языке.
Итог
13 пунктов задания и 5 доработок, пришедших по ходу, сделаны и работают на сайте. Все правки внесены программно, без ручной сборки в редакторе, — каждая обратима и проверена на живой странице.
Заявки перестали теряться: они пишутся в журнал на сайте и только потом уходят письмом и в мессенджер. На момент аудита в журнале было 74 заявки — до этого они существовали только в почте, и сбой доставки означал потерю.
Аудит по шести направлениям дал оценку состояния 57 из 100 и около 30 находок с доказательствами. Заказчик получил и технический реестр, и отдельный отчёт, по которому можно принимать решения, не будучи инженером.
Технические детали
Решение и подход
Архитектура «код + патчи» (выбор зафиксирован в approach.md):
- Мини-плагин как единый дом для кастома — переживает обновления темы, версионируется, обратим деактивацией; child-тему и ACF сознательно не вводил (не нужны для задач). Синглтон
\SP\Pluginвручную подключает процедурные файлы хуков (PSR-4 не используется). - Пер-страничный гейтинг целевых услуг #171/#173: целевой ID резолвится рано (хук
wp) из$GLOBALS['wp_the_query'], а не черезget_queried_object_id(), который врёт во время рендера Elementor. Это решило протечку контента между услугами (усугублялась общим single-шаблоном #148 и Element Cache — последний пришлось отключить с safeguardpre_option). - Блоки как шорткоды/рендер-хуки, а не ручная вёрстка: квиз, FAQ (с JSON-LD FAQPage), акция, отзывы, Hero-карусель внедряются фильтрами
elementor/widget/render_contentиelementor/frontend/the_content; переиспользован Swiper, зарегистрированный Elementor. - Безопасный цикл правок прода без staging: снимок
_elementor_data→ идемпотентный патч (wp eval-file) → валидация JSON →wp elementor flush-css --regenerate→ проверкаcurl(вкл. мобильный UA) и адаптив → готовый байт-точный откат. Учтены особенности окружения: OPcacherevalidate_freq=60(ждать после деплоя), специфичность CSS против kit/reset (<button>требует ≥(0,2,0)+!important). - Лиды: общая
sp_save_lead()→ приватный CPTsp_lead(журнал в админке) + email + Telegram с ретраями на сетевые сбои; затем аутентифицированный SMTPinfo@домендля доставляемости (SPF/DKIM/DMARC).
Методология аудита: фазы 0 (инвентаризация) → 1 (проверка по 8 доменам) → 2 (кросс-анализ) → 3 (синтез). Каждая находка — по схеме «что не так → чем грозит (₽/штраф/взлом/потеря лидов) → что сделать → эффект → усилия/приоритет», с доказательством командой с сервера и разделением «факт ✅ / гипотеза ❓». Контентная и Elementor-составляющие покрыты отдельно: карта узлов/палитры/форматов _elementor_data (elementor-map.md), 7×H1 на главной, отсутствие LocalBusiness-схемы, тяжёлые видео в uploads. Итог приоритизирован матрицей Влияние×Усилия (🔴 Горит / 🟠 Рост / 🟢 Стратегия / ⚡ Быстрые победы).
Стек и обоснование
WordPress + Elementor/Elementor Pro (наследие сайта; не обновлял 3.32→4.x — он forward-совместим, обновления не навязываются, риск регрессий на проде высок). PHP-мини-плагин — портативнее functions.php и устойчив к обновлениям темы. WP-CLI — основной автономный канал правок. Swiper — переиспользован из Elementor (без лишних зависимостей). Schema.org JSON-LD (FAQPage/BreadcrumbList) — для SEO-сниппетов. SMTP/PHPMailer + DKIM/DMARC — доставляемость писем. Telegram API с ретраями — устойчивость уведомлений. Отечественный стек (Яндекс.Метрика/Карты) без Google Analytics/Fonts/reCAPTCHA — осознанно под реалии РФ-2026 (отмечено как правильное и в аудите).
Инженерные вызовы
- Боевой прод без staging на shared-хостинге (был инцидент блокировки за непродление) → жёсткий ритуал бэкап-снимок→патч→проверка→откат; идемпотентность патчей.
- Общий single-шаблон #148 на все 6 услуг + Element Cache → протечка пер-страничных правок; решено ранним резолвом целевого ID и отключением Element Cache с safeguard.
- Неочевидные места Elementor: триггеры попапа живут в
_elementor_popup_display_settings(не вpage_settings); баг собственнойsp_find()при записи во вложенные узлы (рекурсивный алиас рвёт связь) → переписан наsp_edit(); обманчивыйcustom_id="email"у поля телефона формы #198. - Перехват чужих виджетов (Unlimited Elements Fullscreen Menu) на фазе capture с
stopImmediatePropagationраньше обработчика Elementor; разметка вwp_footerпечатается ниже скриптов → инициализация вDOMContentLoaded. - CSS-война с kit/reset Hello Elementor: кастомным
<button>нужна специфичность ≥(0,2,0)+!important; высоту слайдов задаватьaspect-ratioот ширины, а неvh. - Аудит без вреда проду: read-only, без тяжёлых сканеров; доказательность каждой находки; разделение фактов и гипотез (там, где нужны доступы — Я.Вебмастер, ИНН для проверки реестра РКН).
Услуги в проекте
- доработка существующего
- аудит
- разработка
- деплой
- 152-ФЗ/ПДн
- SEO
- контент
- безопасность
- производительность
- поддержка