Перейти к содержимому
Эльдар Шахвалиев
Обсудить проект
← Все проекты
202606.2026 — presentВ продеполный цикл

«Строй-Прораб 24/7» — доработка и аудит сайта (WordPress + Elementor)

Строительная компания (пристройки/надстройки, кровля), Москва/МО · Строительство / лидогенерация (B2C/B2B)

Fullstack WordPress/Elementor инженер и технический аудитор (соло)

Сайт строительной компании живёт на заявках. Сделал 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 — последний пришлось отключить с safeguard pre_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) и адаптив → готовый байт-точный откат. Учтены особенности окружения: OPcache revalidate_freq=60 (ждать после деплоя), специфичность CSS против kit/reset (<button> требует ≥(0,2,0)+!important).
  • Лиды: общая sp_save_lead() → приватный CPT sp_lead (журнал в админке) + email + Telegram с ретраями на сетевые сбои; затем аутентифицированный SMTP info@домен для доставляемости (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
  • контент
  • безопасность
  • производительность
  • поддержка