Сайт медицинской клиники на Drupal CMS: кейс-конструктор — врачи, услуги, филиалы и цены без хаоса

Изометрический разрез здания клиники, этажи которого — слои сайта: приёмная с формами записи, кабинеты врачей как карточки контента, архив с базой 1С и охрана как роли доступа

Почему клиника — идеальный профиль для Drupal

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

Возьмём типичную клинику на три филиала. Посчитаем сущности: примерно сорок врачей, у каждого специализации и регалии; шестьдесят услуг, у каждой своя цена, и цена эта в разных филиалах разная; три адреса с расписанием; акции; статьи блога о здоровье. Если собирать это на конструкторе типа «перетащи блок», получится пятьсот отдельных страниц, которые никак не связаны между собой. Через полгода кардиолог уволился, а его карточка висит в трёх разных местах, цена на приём поменялась в прайсе, но на сайте осталась старая, и никто уже не помнит, где какая страница живёт. Сайт расползается.

Drupal подходит к задаче иначе. Вместо пятисот страниц вы описываете пять типов контента и связи между ними, а конкретные страницы система собирает сама. Обновили цену услуги в одном месте — она поменялась везде, где показывается. Это и есть главная причина, по которой для структурированного бизнеса мы выбираем именно Drupal: он мыслит не страницами, а данными.

Параллель для юрфирмы. Замените «врача» на «юриста», «услугу» на «практику», «филиал» на «офис», а «акцию» — на «кейс из практики». Структура задачи не меняется ни на йоту — меняются только слова. Всё, что описано ниже про клинику, работает для юридической фирмы, консалтинга и образовательного центра.

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

Хороший сайт на Drupal начинается не в браузере, а в таблице. До того как открыть админку, мы садимся и расписываем сущности: что это, какие у него поля и как он связан с остальными. Для клиники модель выглядит так:

Тип контентаКлючевые поляСвязи
ВрачФИО, стаж, регалии, фото (Media)специализации → таксономия, филиалы → ссылка на «Филиал»
Услугаописание, подготовка к процедуре, цены по филиаламнаправление → таксономия
Филиаладрес, гео-координаты, расписание, телефон
Акцияусловия, срок действия, размер скидкиссылка на «Услуга»
Статьятекст, обложка, датаавтор → ссылка на «Врач»

Главное правило проектирования, которое экономит потом месяцы: если какие-то данные повторяются в двух местах — это не копипаст, а ссылка на отдельную сущность. Врач ведёт приём в двух филиалах? Мы не пишем его карточку дважды — мы связываем одну карточку врача с двумя филиалами. Цена услуги отличается по адресам? Это не пять страниц услуги, а одно поле «цены по филиалам» с несколькими значениями.

Специализации мы выносим не в текстовое поле, а в таксономию — справочник, который редактируется в одном месте. Появилось новое направление, «флебология», — добавили термин в справочник, и он тут же доступен для привязки к врачам и услугам, с автоматической страницей-рубрикой в придачу. Фотографии врачей и обложки статей живут в медиатеке (Media): одну и ту же картинку можно переиспользовать, у неё есть alt-текст для доступности и SEO, а замена файла обновляет его везде, где он показан. Всё это — про то, чтобы данные не дублировались и правились в одной точке.

Как связи превращаются в автоматические страницы

Дальше начинается магия, ради которой всё и затевалось. Механизм Views в Drupal позволяет без единой строки кода собрать динамическую страницу из связанных сущностей. Хотите страницу «все кардиологи, ведущие приём в филиале на Юго-Западной»? Вы не создаёте её руками. Вы описываете правило: «показать всех врачей, у кого специализация = кардиология и филиал = Юго-Западная». Страница собирается сама и обновляется автоматически: пришёл новый кардиолог в этот филиал — он появился в списке без вмешательства человека. Уволился — исчез. Таких страниц-срезов на сайте клиники десятки, и все они живут без ручной поддержки.

ER-диаграмма контент-модели сайта клиники: сущности Врач, Услуга, Филиал, Акция и Статья со связями между собой, сбоку блок Views собирает готовую страницу из трёх сущностей

Собираем на рецептах Drupal CMS: хронометраж реальной сборки

Здесь произошла главная перемена 2025–2026 годов. Раньше «сделать сайт на Drupal» означало недели ручной настройки базовых вещей: медиатеки, SEO, форм, ролей. Теперь есть дистрибутив Drupal CMS (актуальная версия 2.0 вышла в июне 2026 года на ядре Drupal 11) с механизмом рецептов — Recipes. Рецепт — это готовый набор конфигурации, который одной командой ставит и настраивает целый функциональный блок. Расскажу, как выглядит хронометраж реальной сборки сайта клиники.

  • Первый день — базовый сайт из рецептов. Ставим Drupal CMS, применяем рецепты: страницы и новости, SEO-набор (метатеги, карта сайта), продвинутая медиатека, формы, управление согласиями на cookies. К вечеру первого дня есть работающий каркас сайта с админкой, поиском и аналитикой из коробки.
  • Второй–третий день — кастомные типы. Создаём типы «Врач», «Услуга», «Филиал» с их полями, настраиваем таксономию специализаций, собираем ключевые Views: списки врачей, каталог услуг, страницы филиалов. Это уже ручная работа, но не программирование — почти всё делается в интерфейсе.
  • Дальше — темизация. Вот это самая долгая часть. Натянуть на структуру фирменный дизайн клиники, адаптив, анимации — здесь и уходит основное время проекта.

Сравните это с классической разработкой той же задачи году в 2020-м, когда каждый из этих блоков собирался руками с нуля. Разница — в разы. Именно рецепты и инструменты вроде Project Browser и встроенных AI-помощников по сборке сделали Drupal доступным для проектов, которые раньше уходили на конструкторы просто из-за сроков.

Что именно приезжает в Drupal CMS «из коробки» и почему это экономит недели: продуманная медиатека с автоматическим ресайзом изображений под разные форматы; SEO-набор с метатегами и картой сайта; управление согласиями на cookies, что для сайта с формами и аналитикой обязательно; встроенный поиск; аналитика. Раньше каждый из этих пунктов был отдельной задачей на подбор модуля, установку и настройку. Теперь это один применённый рецепт. Project Browser, в свою очередь, позволяет искать и ставить дополнительные модули прямо из админки, не спускаясь в консоль, — это заметно ускоряет донастройку под конкретную клинику.

Практический вывод по срокам. На простом сайте-визитке разница между Drupal CMS и конструктором по времени невелика. Она становится решающей ровно там, где нужны структура и связи: каталог услуг с ценами, десятки карточек врачей, автоматические срезы по филиалам. То, что на конструкторе собирается руками страница за страницей, в Drupal описывается один раз как правило.

Права доступа: регистратура, маркетолог, главврач

В клинике сайт правят разные люди, и давать всем полный доступ нельзя. Регистратор не должен публиковать акции с ценами, а маркетолог не должен переписывать регалии врачей. Drupal решает это ролями и рабочими процессами публикации. Наша типовая матрица ролей:

РольЧто можетЧего не может
Контент-менеджер (регистратура)редактировать врачей и услуги, создавать черновикипубликовать акции с ценами, менять настройки
Маркетологуправлять акциями и статьями блогатрогать структуру и права других
Главврач / управляющийутверждать и публиковать, видеть всё

Ключевой инструмент здесь — Content Moderation, модуль рабочих процессов из ядра. Он выстраивает цепочку состояний: черновик → на проверке → опубликовано. Контент-менеджер готовит акцию и отправляет на проверку, но опубликовать её может только главврач. При этом ведётся журнал ревизий — кто, что и когда менял, с возможностью откатиться к прошлой версии. Это не платная надстройка, а штатная возможность.

Отдельно подчеркну для тех, кто сравнивает с WordPress: там подобный контур согласования и разграничения прав собирается только из связки платных плагинов, которые ещё и конфликтуют между собой при обновлениях. В Drupal это фундамент платформы, а не костыль сверху.

Цены и расписание из 1С: чтобы сайт не врал

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

Механизм — Migrate API, конвейер импорта Drupal. По расписанию из 1С выгружается прайс, и конвейер обновляет на сайте только те позиции, которые реально изменились, благодаря отслеживанию изменений (track_changes). Не перезаписывает всё подряд, а точечно правит подорожавшее. Цены по филиалам ложатся в мультизначное поле услуги — одна услуга, несколько цен по адресам.

# фрагмент идеи Migrate-конвейера (YAML)
source:
  plugin: url               # выгрузка прайса из 1С
  track_changes: true       # обновляем только изменившиеся позиции
process:
  title: naimenovanie
  field_price_branch: cena_po_filialam
destination:
  plugin: 'entity:node'
  default_bundle: usluga

С расписанием врачей сложнее, и здесь я даю клиентам честный совет. Если есть медицинская информационная система (МИС) с API — тянем расписание из неё так же, как цены. Если надёжного источника нет — не надо имитировать актуальное расписание руками. Лучше честная кнопка «уточните время приёма по телефону», чем красивая табличка, которая устарела вчера. Неточное расписание на сайте клиники хуже, чем его отсутствие: пациент приедет к врачу, которого сегодня нет, и виноват будет сайт.

Запись на приём и 152-ФЗ: формы с персональными данными

Форма записи на приём собирает как минимум ФИО и телефон — а это персональные данные, и работать с ними надо по закону. Техническую часть комплаенса мы закрываем на уровне сайта и инфраструктуры. Форму строим на модуле Webform, и обязательный набор такой:

  • чекбокс согласия на обработку персональных данных — без галочки форма не отправляется;
  • опубликованная на сайте политика обработки персональных данных со ссылкой из формы;
  • хранение заявок на сервере, физически расположенном в России, — наши площадки в дата-центре МТС это требование закрывают;
  • передача заявки в CRM или МИС только по защищённому каналу, а не открытым письмом.
Отдельно про медицинскую специфику. Диагнозы, жалобы, описание симптомов в свободном поле формы лучше не собирать вообще. Это уже специальная категория персональных данных, к которой закон предъявляет заметно более жёсткие требования. Гораздо безопаснее ограничиться контактами для обратного звонка, а всё медицинское обсуждать уже на приёме. Дисклеймер, который я всегда проговариваю: мы инженеры, а не юристы, и юридическую экспертизу документов оставляем юристам клиники — но техническую сторону (согласие, хранение в РФ, защищённая передача) реализуем полностью.

SEO для локального медицинского спроса

Приятный побочный эффект структурированного контента: он превращается в SEO почти без дополнительных усилий. Когда данные лежат в полях, а не в сплошном тексте, из них автоматически собирается разметка Schema.org — типы Physician для врачей, MedicalClinic для организации, Service для услуг. Поисковик понимает, что перед ним врач с такой-то специализацией в такой-то клинике, а не просто страница с буквами.

  • Посадочные «услуга + район» генерируются через Views под локальный спрос: «УЗИ на Юго-Западной», «приём кардиолога в Митино». Это ровно те запросы, по которым люди ищут клинику рядом с домом.
  • Шаблоны метатегов на тип контента (модуль Metatag) — заголовок и описание страницы врача формируются по шаблону автоматически, не надо прописывать вручную сорок раз.
  • Карта сайта (Simple XML Sitemap) обновляется сама при добавлении контента.

И важный момент про медицинскую тематику: поисковые системы относят её к категории, где особенно важны экспертность и достоверность (принцип E-E-A-T). Подробные страницы врачей с реальными регалиями, образованием, стажем и фотографией — это не украшение сайта, а прямой ранжирующий сигнал. Структурированная контент-модель Drupal здесь работает на продвижение сама по себе.

Сравните с обычной ситуацией на конструкторе, где вся информация о враче — это абзац текста и картинка. Поисковик видит просто набор слов и не понимает, что перед ним квалифицированный специалист с двадцатью годами стажа. В Drupal те же данные разложены по полям, из которых собирается и человекочитаемая карточка, и машиночитаемая разметка. Одна и та же работа контент-менеджера по заполнению карточки врача одновременно наполняет сайт и работает на его позиции в выдаче — без отдельного «сеошника», который потом ходит и вручную проставляет теги.

Бюджет и сроки против альтернатив

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

ПоказательКонструкторDrupal CMSКлассическая разработка
Сроки запускаднинеделимесяцы
Стоимость входанизкаясредняявысокая
Связи, права, интеграция с 1Снетда, из коробкида, но дорого
Что через годупирается в потолок → переделкарастёт вместе с клиникойрастёт, но дорого в поддержке

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

Сравнительная инфографика владения сайтом за три года: три столбца — конструктор, Drupal CMS и классическая разработка — по стоимости входа, сопровождения и переделки; у конструктора стрелка упирается в потолок

Когда всё же брать конструктор? Мой честный ответ: если филиал один, врачей пять, а бюджет нулевой — конструктора хватит, и городить Drupal ради визитки не нужно. Drupal CMS начинает окупаться там, где появляется структура: несколько филиалов, десятки услуг, цены из учётной системы, разные роли редакторов. Ровно тот профиль, с которого мы начали статью.

Переносим модель на юрфирму: что меняется

Обещанный бонус для тех, кто дочитал. Всё, что описано выше про клинику, переносится на юридическую фирму почти механической заменой слов:

КлиникаЮрфирма
ВрачЮрист (с практиками и делами)
УслугаПрактика (сопровождение сделок, споры, банкротство)
АкцияКейс из практики
Запись на приёмЗаявка на консультацию
ФилиалОфис

Но одно отличие принципиальное — и оно про права доступа, которые в юрфирме даже критичнее, чем в клинике. Кейсы из практики часто содержат чувствительную информацию о клиентах и подпадают под NDA. Поэтому Content Moderation здесь работает не только как согласование публикации, но и как режим конфиденциальности: черновик кейса виден узкому кругу, публикуется только после согласования с клиентом, а до этого недоступен даже части сотрудников. Черновики исков, проекты договоров, внутренние заметки — всё это должны видеть не все, и модель ролей Drupal это обеспечивает штатно.

Вывод простой: контент-модель одна, слова разные. В этом и есть сила подхода «мыслить данными, а не страницами» — один раз спроектированная структура обслуживает целый класс бизнесов, где есть люди, услуги, филиалы и заявки. А это добрая половина сферы услуг.

Соберём сайт вашей клиники или юрфирмы на Drupal CMS

ITfresh — IT-аутсорсинг для компаний до 50 рабочих мест в Москве. Проектируем контент-модель, настраиваем роли и Content Moderation, синхронизируем цены с 1С, делаем запись по 152-ФЗ с хранением данных на собственных серверах в дата-центре МТС (Россия). 15+ лет опыта. Telegram: @ITfresh_Boss, тел. +7 903 729-62-41.

📞 Связаться с нами
#Drupal CMS #сайт клиники #типы контента #152-ФЗ #интеграция 1С #Views #Content Moderation #сайт юрфирмы
Комментарии 0

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

загрузка...

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

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

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

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