Сайт клиники на MODX: как мы делали нестандартный каталог услуг и врачей — кейс внедрения от ITfresh

Сайт частной клиники на MODX: карточки врачей и услуг, связанные перекрёстными ссылками в единый каталог

Исходная точка: что было у клиента и почему WP-шаблон не подошёл

Меня зовут Семёнов Евгений Сергеевич, я технический директор ITfresh. Мы обслуживаем компании до 50 рабочих мест в Москве — и частные клиники в этом сегменте встречаются регулярно: юрлицо, десяток врачей, три администратора, никакого своего ИТ-штата. Сегодняшний кейс — как раз такая клиника, обратившаяся к нам на комплексное обслуживание, в составе которого был и сайт.

Что было на старте: сайт-визитка десятилетней давности на конструкторе — пять страниц, телефон в шапке и прайс отдельным PDF-файлом на 30 листов, который администраторы пересобирали в Word при каждом изменении цен. Запись на приём — только по телефону. Пациенты искали услуги в поисковике, попадали на агрегаторы и уходили к конкурентам, у которых на сайте были нормальные страницы услуг с ценами.

Требование клиники к новому сайту формулировалось просто, а реализовывалось сложно: связка «направление → услуги → врачи → цены». У каждого направления (стоматология, УЗИ, гинекология…) — свои услуги; у каждой услуги — карточка с ценой и подготовкой к процедуре; у каждого врача — карточка со специализацией, стажем и расписанием; и всё это перекрёстно связано: на странице услуги — врачи, которые её оказывают, на странице врача — его услуги.

Рамки проекта зафиксировали на берегу: два месяца на разработку от прототипа до запуска, наполнение силами клиники по подготовленным нами шаблонам карточек, приёмка по чек-листу — скорость, формы, микроразметка, миграция старых адресов с редиректами, чтобы не потерять то немногое, что визитка успела накопить в поиске. Отдельным пунктом договора — год сопровождения: медицинский сайт без присмотра деградирует так же уверенно, как сервер без обновлений.

Первой мыслью, не скрою, был WordPress — на нём мы делаем много. Но примерка показала: готовые медицинские темы WP рисуют красивые карточки врачей, а вот связи многие-ко-многим между услугами и врачами в них либо нет, либо она сделана костылём на трёх плагинах, каждый из которых обновляется как хочет. Нестандартная структура данных — главный аргумент в пользу MODX Revolution: эта CMS не навязывает свою модель контента, а позволяет спроектировать свою. Подробно о самой системе — в нашем обзоре MODX.

Проектирование структуры контента в MODX

Дерево ресурсов

В MODX любой документ — это ресурс в дереве, а шаблон и набор полей у каждого ресурса свои. Мы спроектировали так: направления — контейнеры верхнего уровня, внутри них — ресурсы услуг; врачи — отдельная ветка с ресурсами своего шаблона. URL получились человеческие и иерархичные: /stomatologiya/, /stomatologiya/lechenie-kariesa/, /vrachi/ivanova/ — поисковики такое любят.

TV-параметры: поля карточек

Дополнительные поля в MODX называются TV (template variables) и привязываются к шаблонам. Карточка врача получила TV: специализация, стаж, образование, фото, график приёма, список услуг. Карточка услуги: цена, длительность, подготовка к процедуре, показания. Ставили на актуальную ветку MODX 3 (сейчас это 3.2, вышла в феврале 2026-го) — админка быстрая, редактирование TV удобное, администраторы клиники освоились без сопротивления.

Шаблоны и чанки: вёрстка отдельно от контента

Вёрстку разложили по правилам MODX: три шаблона (направление, услуга, врач) плюс переиспользуемые чанки — карточка врача в списке, строка прайса, блок записи. Когда дизайнеру через полгода захотелось поменять вид карточек врачей по всему сайту, правка заняла один чанк и десять минут — а не прогулку по сорока страницам. Администраторы при этом к вёрстке не прикасаются вовсе: их зона — тексты, цены и фотографии в понятных полях.

Перекрёстные связи без дублирования

Ключевой узел проекта — связь «услуга ↔ врач». Решение штатное для экосистемы MODX: сниппет pdoResources из пакета pdoTools выбирает ресурсы по условию, и блок «врачи этой услуги» на странице услуги строится запросом по TV врачей, а «услуги этого врача» — обратным запросом. Контент нигде не дублируется: администратор отмечает услуги в карточке врача, и обе страницы обновляются сами. Ни одного скопированного руками абзаца — то, чего в шаблонной теме мы бы не добились без жёсткой доработки.

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

Каталог и прайс: 400+ услуг без магазинного движка

В прайсе клиники — больше четырёхсот позиций. Первый соблазн — поставить minishop2, полноценный магазинный компонент MODX. Мы от него отказались осознанно: услуги — не товары, корзины и оплаты на сайте не будет (пациент записывается, а платит в клинике), а тащить магазинный движок ради списка с ценами — лишняя сложность и лишние обновления. Обошлись связкой Collections (табличное управление большими списками ресурсов в админке) + pdoPage (постраничный вывод с фильтрами по направлению и цене).

Отдельная история — первичная заливка прайса. Четыреста позиций руками — неделя тоскливой работы с гарантированными опечатками. Вместо этого написали скрипт: Excel-прайс клиники разбирается построчно, и через API MODX (processors ресурсов) каждая позиция создаётся как ресурс с заполненными TV — названием, ценой, длительностью, привязкой к направлению. Заливка заняла минуты, ошибок — ноль, скрипт остался клинике для будущих массовых обновлений.

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

Онлайн-запись и лиды

Формы записи собрали на FormIt — стандартном компоненте форм MODX. Из любой точки сайта пациент записывается в два клика: на странице услуги врач уже подставлен в форму, на странице врача — наоборот. Дальше заявка идёт двумя путями одновременно: вебхуком в CRM клиники (у них медицинская МИС с API приёма лидов) и письмом администраторам. Дублирование — осознанное: если МИС в момент отправки недоступна, заявка не теряется, а живёт в письме и в журнале отправок FormIt, откуда её можно перезабрать. За год этот запасной канал спас порядка десятка заявок — в деньгах это больше, чем стоила вся настройка форм.

Три технических детали, которые отличают работающую форму от декоративной:

  • антиспам без капчи-мучителя — honeypot-поле плюс проверка времени заполнения: боты отсеиваются, пациенты ничего не замечают. Капчу с картинками на медицинском сайте, где записывается аудитория 60+, мы принципиально не ставим;
  • валидация телефона — маска и проверка формата на месте: администраторы больше не перезванивают на номера из девяти цифр;
  • доставляемость уведомлений — письма уходят через SMTP с корректными SPF/DKIM-записями домена, а не через php mail() с хостинга. До этого у клиники был период, когда заявки со старого сайта падали в спам, — о таких потерях бизнес обычно даже не знает.

Персональные данные и 152-ФЗ на медицинском сайте

Сайт клиники собирает ФИО и телефоны — это персональные данные, и относиться к ним надо серьёзно, тем более в медицинском контексте. Что сделали:

  • чекбокс согласия на обработку ПДн в каждой форме — с ссылкой на политику конфиденциальности и без предпроставленной галочки;
  • политика конфиденциальности с реквизитами оператора — юридический документ, а не копипаста с чужого сайта;
  • хостинг в России — требование локализации ПДн выполняется физически;
  • TLS на всём сайте, заявки в админке MODX закрыты отдельными правами доступа: у контент-администратора и у администраторов записи — разные роли;
  • минимизация: форма не спрашивает ничего лишнего — имя, телефон, желаемая услуга. Диагнозы и жалобы в веб-форму не вводятся вовсе.

Честная граница ответственности. Сайт закрывает свой периметр: согласия, локализация, защита канала и доступа. Но регистрация оператора ПДн в Роскомнадзоре, внутренние приказы, обработка данных в МИС — зона ответственности самой клиники и её юристов. Мы всегда проговариваем эту границу письменно, чтобы у клиента не было иллюзии «сделали сайт — закрыли весь 152-ФЗ».

SEO и скорость после запуска

Структура URL по направлениям дала поисковикам то, что они ждут от медицинского сайта: страница на каждую услугу с ценой, адресом и врачами. Добавили микроразметку schema.org — Physician для карточек врачей, MedicalClinic с адресом и графиком для организации, плюс хлебные крошки. Сниппеты в выдаче стали заметно богаче.

Скорость — отдельная гордость. MODX без плагинного балласта, характерного для перегруженных WP-сборок, плюс кэширование и оптимизация картинок дали время ответа сервера (TTFB) около 180 мс против 1,4 с у старого сайта — почти в восемь раз быстрее. Все три метрики Core Web Vitals — в зелёной зоне и на мобильных, и на десктопе.

Результаты запуска сайта клиники: рост скорости загрузки и позиций в поиске за четыре месяца
До/после: время ответа сервера упало в восемь раз, позиции по «услуга + район» выросли за четыре месяца

Позиции: через четыре месяца после запуска запросы вида «услуга + район» — основной трафик районной клиники — поднялись из третьего-четвёртого десятка выдачи в топ-10, часть — в топ-5. Из органики пошли записи, которые администраторы фиксируют вопросом «откуда о нас узнали». Быстрый сайт с честной структурой — это не эстетика, это прямой SEO-фактор и прямые деньги.

МетрикаСтарый сайтЧерез 4 месяца на MODX
Время ответа сервера (TTFB)~1,4 с~180 мс
Core Web Vitalsкрасная зонавсе метрики зелёные
Страниц услуг в индексе5400+
Запросы «услуга + район» в топ-10единичныеосновная масса ядра
Запись через сайтнеттреть всех первичных записей
Обновление прайсапересборка PDF в Wordправка цены в таблице админки

Эксплуатация: год спустя

Кейс без цифр эксплуатации — реклама. Про то, как устроен наш регламент сопровождения MODX в целом, есть отдельная статья; здесь — конкретика по этому проекту. Бэкапы — по правилу 3-2-1: ежедневный дамп базы и еженедельный полный архив файлов, копии на нашей площадке в дата-центре МТС, восстановление проверяем на стейджинге раз в квартал. А теперь цифры за первый год:

  • Поддержка — 2–3 часа в месяц: обновления MODX и компонентов через стейджинг, контроль бэкапов, мелкие правки вёрстки. Для сравнения: сопоставимый по сложности клиентский сайт на WP с дюжиной плагинов ест у нас 4–6 часов — там чаще обновления и чаще конфликты;
  • Взломов — ноль. MODX — редкая цель для массовых сканеров ботов, заточенных под WP, плюс стандартный харденинг: перенос админки с дефолтного адреса, fail2ban, права на каталоги. Наш регламент эксплуатации MODX мы описывали отдельной статьёй;
  • Инцидентов — один: при плановом обновлении конфликтнул сторонний компонент галереи. Поймали на стейджинге, на прод не попало, решилось откатом компонента до совместимой версии. Именно поэтому обновления «сразу на бой» мы не делаем никогда;
  • Стоимость владения за первый год — разработка плюс хостинг-VPS, домен, TLS-сертификат и 12 месяцев сопровождения — вышла ниже, чем клиника платила прежнему подрядчику за «просто поддержку» старой визитки. Лицензионных платежей — ноль: MODX бесплатен.

Как этот кейс переносится на другие сегменты

Модель «сущности со связями многие-ко-многим» — не медицинская специфика. Та же архитектура без изменений ложится на соседние ниши нашей клиентской базы:

  • юридическая фирма: «практики × юристы × кейсы» — на странице практики видны юристы и выигранные дела, на странице юриста — его практики;
  • производственная компания: «категории × изделия × техдокументация» — карточка изделия со связанными PDF-чертежами и своими характеристиками-TV;
  • учебный центр: «направления × курсы × преподаватели» — один в один структура клиники.

Чек-лист из семи вопросов — признаки, что ваша задача про MODX, а не про шаблонную тему:

  1. У вашего контента больше одного типа сущностей (услуги, люди, объекты, документы)?
  2. Между сущностями есть связи, которые должны показываться на обеих сторонах?
  3. Готовые темы «почти подходят, но…» — и это «но» ломает главное?
  4. Контент будут править сотрудники без технических навыков?
  5. Важна скорость и позиции в поиске по структурным запросам?
  6. Есть внешние системы (CRM, МИС, 1С), куда должны уходить заявки?
  7. Бюджет — на разработку, а не на вечную аренду лицензий?

Четыре «да» и больше — приходите на бесплатный аудит: посмотрим ваш текущий сайт, прикинем модель данных и честно скажем, нужен ли вам MODX — или хватит WordPress, на котором мы тоже работаем и который для стандартных задач ставим без колебаний.

Нужен сайт с нестандартным каталогом?

Спроектируем модель данных, соберём на MODX или WordPress, подключим CRM и возьмём сопровождение на себя. Свои серверы в дата-центре МТС, 15+ лет практики.

✈️ Telegram @ITfresh_Boss 📞 +7 903 729-62-41
#MODX #кейс #сайт клиники #каталог услуг #152-ФЗ #онлайн-запись
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.