Клиент захотел объединить статьи, справочник компаний и карту на одном портале. Разработка информационного портала началась с прототипа на WordPress, но при 50 000 записей база стала тормозить — геозапросы выполнялись по 5 секунд. Мы переписали проект на headless CMS и PostGIS, ускорив геозапросы в 100 раз. Правильная архитектура портала — залог быстрого поиска, высокой индексации и лояльности аудитории. После миграции время генерации страницы упало с 3 секунд до 200 мс, а органический трафик вырос на 40% за первый месяц. В этой статье расскажем, как спроектировать портал, который выдержит неограниченный рост данных и обеспечит высокий ранг в поисковой выдаче. Поделимся проверенными практиками по выбору CMS, настройке геопоиска и модерации пользовательского контента.
Как проходит разработка информационного портала под ключ
Процесс включает анализ требований, проектирование архитектуры, дизайн, разработку, интеграцию с CMS, настройку SEO и деплой. Мы используем современный стек: React/Next.js на фронтенде, Laravel/Node.js на бэкенде, PostgreSQL с PostGIS для геоданных, Redis для кеширования. Каждый этап завершается ревью и тестированием.
Типичные проблемы информационных порталов
- Неоптимальные запросы к геоданным — без PostGIS сложно искать объекты в радиусе. Использование BBox и фильтрация на стороне приложения приводят к ошибкам и тормозам в 3 раза медленнее.
- Дублирование контента при наследовании типов — STI или полиморфные связи требуют аккуратного проектирования, иначе N+1 запросов.
- Отсутствие RSS/Atom — агрегаторы теряют контент, трафик падает.
- Нет модерации UGC — спам и низкое качество отзывов убивают доверие.
Структура информационного портала
| Раздел |
Тип контента |
| Статьи и аналитика |
Long-form, SEO-ориентированные |
| Справочник |
Структурированные карточки объектов |
| Рейтинги и подборки |
Тематические списки с описаниями |
| Новости рубрики |
Короткие новостные заметки |
| База данных |
Searchable каталог (компании, продукты, места) |
Как выбрать архитектуру для мультитипного контента?
Разные типы контента имеют разную структуру полей. Мы используем три подхода в зависимости от задачи:
- Single-table inheritance (STI): одна таблица
content_items с полем type и JSON-колонкой для специфичных полей. Просто, но сложно индексировать.
- Polymorphic tables: отдельные таблицы для каждого типа контента со связью через
contentable_type / contentable_id. Гибко, но сложнее запросы.
- Headless CMS (Strapi, Contentful): content types с custom fields через UI. Подходит, если редакторов много и разработчик не должен участвовать в добавлении новых типов.
Сравнение подходов
| Критерий |
STI |
Polymorphic |
Headless CMS |
| Простота |
Высокая |
Средняя |
Средняя |
| Производительность |
Средняя |
Высокая |
Высокая |
| Гибкость |
Низкая |
Высокая |
Высокая |
| Индексация |
Сложно |
Легко |
Авто |
Почему PostGIS для геопоиска?
Для портала с каталогом мест (рестораны, организации, туристические объекты) нужна геолокационная функциональность:
- PostgreSQL расширение PostGIS для хранения координат и геозапросов
- Поиск «рядом со мной» в радиусе N км
- Карта с кластеризацией маркеров (Leaflet.js или Mapbox GL)
-- Поиск ресторанов в радиусе 2 км
SELECT name, ST_Distance(
location::geography,
ST_MakePoint(37.6176, 55.7558)::geography
) AS distance_m
FROM restaurants
WHERE ST_DWithin(
location::geography,
ST_MakePoint(37.6176, 55.7558)::geography,
2000
)
ORDER BY distance_m;
PostGIS использует GIST-индексы, ускоряющие геозапросы в сотни раз. По сравнению с MongoDB GeoJSON, PostGIS точнее на сфере и быстрее в радиусе до 100 км. Документация PostGIS
Как PostGIS сравнивается с альтернативами?
| Решение |
Точность |
Скорость на 1 млн записей |
Поддержка сложных операций |
| PostGIS |
Высокая (geography) |
~50 мс |
Да |
| MongoDB 2dsphere |
Средняя |
~120 мс |
Ограниченная |
| Elasticsearch geo |
Средняя |
~80 мс |
Ограниченная |
PostGIS — выбор для порталов с высокими требованиями к геоданным. Нагрузочное тестирование показало, что при 1 млн записей запросы в радиусе 2 км выполняются за 50 мс.
SEO как основа трафика
Информационный портал живёт на органическом трафике. Требования:
- SSR или SSG (не CSR) — каждая страница рендерится как HTML
- Breadcrumbs с BreadcrumbList JSON-LD
- HowTo и FAQ schema для информационных статей
- Перелинковка по теме: в конце статьи — 3–5 ссылок на связанные материалы
- Sitemap с обновлением в реальном времени
Headless CMS в паре с Next.js или Nuxt даёт ISR — инкрементальную регенерацию страниц при изменении контента. Это ускоряет индексацию в 2 раза.
Дополнительные рекомендации по микроразметке
Используйте Schema.org типы Article, FAQPage, HowTo. Проверяйте валидность через Google Rich Results Test. Для геолокации — LocalBusiness или Place.
Пользовательский контент
Для порталов с UGC (рейтинги, отзывы, дополнения):
- Модерация (pre-moderation или post-moderation)
- Спам-фильтры (Akismet API или self-hosted модель)
- Система репутации авторов
Гарантированная система модерации сокращает количество спама на 90%.
Что входит в разработку портала под ключ
- Анализ требований и конкурентов
- Проектирование архитектуры (БД, API, фронтенд)
- Дизайн-концепция (UI/UX)
- Верстка и интеграция с CMS (headless или классическая)
- Настройка SEO (микроразметка, sitemap, robots)
- Разработка модулей: справочник, поиск, геолокация, UGC
- Деплой на хостинг (Docker, Vercel, Bare metal)
- Обучение редакторов работе с CMS
- Гарантийная поддержка 30 дней после запуска
Этапы разработки (пошаговая инструкция)
- Аналитика и бриф — сбор требований и исследование конкурентов.
- Проектирование — архитектура базы данных, API, компонентов.
- Прототипирование — создание макетов и утверждение дизайна.
- Разработка — написание кода, интеграция с CMS, настройка поиска.
- Тестирование — нагрузочное тестирование, проверка SEO, юзабилити.
- Деплой — запуск на продакшен, настройка мониторинга.
- Поддержка — обучение команды клиента, гарантийный период.
Сроки и опыт
MVP (статьи, рубрики, поиск, SEO, RSS): от 6 до 8 недель. Портал со справочником, геопоиском, пользовательскими отзывами и аналитикой: от 3 до 5 месяцев. Сроки уточняются после брифования.
Наша команда имеет 10 лет опыта в разработке порталов. Более 50 успешных проектов, 5+ разработчиков в штате. Экономия бюджета на хостинге может достигать 50% за счёт оптимизации архитектуры.
Получите консультацию инженера и предварительную оценку вашего проекта. Закажите разработку портала, который будет приносить стабильный трафик и доверие аудитории.
Разработка корпоративных порталов и внутренних систем
Мы занимаемся разработкой корпоративных порталов — CRM, ERP, LMS и Intranet. Каждый такой проект начинается не с вёрстки лендинга, а с того, как бизнес-правила лягут в архитектуру: кто видит какие данные, как синхронизируются 1С и учётная система, как 500 контактов превращаются в 500 000 без падения производительности. За 7 лет мы реализовали более 40 порталов для компаний с численностью от 50 до 5000 сотрудников. Оценим ваш проект за два рабочих дня — просто свяжитесь с нами.
Публичный сайт можно запустить без детального проектирования — итеративно править по фидбеку. С корпоративным порталом так не работает: стоимость исправления архитектурных решений после запуска на 200 пользователей несопоставимо выше. Поэтому мы уделяем 70% времени аналитике и прототипированию, а код пишем только после согласования ролевой матрицы и интеграционной схемы.
Три зоны, где чаще всего принимаются плохие решения, — модель прав доступа, производительность на больших данных и real-time обновления.
Как построить ролевую модель для 30 отделов?
Модель прав доступа. «Менеджер видит только своих клиентов, руководитель отдела — весь отдел, директор — всю компанию, но финансовые данные — только финансовый директор и выше». Это не три роли — это матрица из ролей, разрешений, организационных единиц и владения записями. Если это реализовать через if ($user->role === 'manager') в контроллерах — через полгода код станет неподдерживаемым.
Правильный подход: Spatie Laravel Permission для базовой ролевой модели + Policy классы для object-level permission (can('view', $deal) проверяет не только роль, но и владение). Для сложных иерархических структур — ABAC (Attribute-Based Access Control) вместо RBAC.
Производительность на больших данных. CRM с 500 000 контактов, фильтрация по 10 полям, сортировка по активности — это задача, где наивная реализация выдаёт 15-секундные запросы. Composite indexes, денормализация агрегатов (last_activity_at на самой записи вместо MAX по связанной таблице), Elasticsearch для full-text поиска по контактам.
Real-time обновления. Несколько сотрудников работают с одним документом или задачей. Без WebSocket — постоянные setInterval с polling каждые 5 секунд, лишняя нагрузка на сервер, задержка обновлений. Laravel Broadcasting + Pusher/Soketi или собственный WebSocket сервер на Node.js — для уведомлений и изменений в реальном времени.
CRM-системы
Типичный набор: контакты, компании, сделки, активности, воронка продаж, отчёты. Технически это несложно. Сложность — в деталях.
Pipeline с кастомными стадиями. Каждая компания хочет свою воронку. Стадии должны быть настраиваемыми без деплоя. Таблица pipeline_stages с position, color, is_final, probability — и drag-and-drop для изменения порядка на UI (React DnD или dnd-kit).
История изменений. Кто и когда изменил статус сделки, поменял ответственного, добавил заметку. Audit log через Observer или spatie/laravel-activitylog. На UI — timeline с фильтрацией по типу активности.
Интеграция с почтой. IMAP/SMTP для подключения корпоративного ящика, автоматическая привязка входящих писем к контактам по email-адресу. Это надёжно работает только при правильной обработке bounce, spam, автоответов — нужна фильтрация.
Почему ERP — не про код, а про данные?
ERP — это когда CRM, склад, производство, бухгалтерия и HR объединены в единую систему. Полный ERP с нуля — редкая задача (обычно интегрируются с существующими системами), но модульные системы под конкретный бизнес — регулярная.
Ключевой принцип: финансовые операции должны быть неизменяемыми. Не UPDATE orders SET status = 'cancelled' — а создание новой записи order_cancellations с ссылкой на исходный заказ. Это принцип immutable ledger, который упрощает аудит и reconciliation.
Интеграция с 1С — почти всегда часть ERP-проекта. Двусторонняя синхронизация: из 1С в портал (справочники, остатки, цены) и из портала в 1С (заказы, документы). RabbitMQ как шина событий между системами надёжнее прямого HTTP-взаимодействия — в случае недоступности 1С сообщения ждут в очереди.
Как устроены LMS: платформы обучения
Learning Management System — это курсы, модули, уроки, тесты, сертификаты, прогресс пользователей.
Видео-контент — самая нагруженная часть LMS. Хранить видео на собственном сервере и отдавать через Nginx — плохая идея: дорого, медленно, нет адаптивного битрейта. Правильно: загрузка в S3/Cloudflare R2, транскодирование через AWS Elemental MediaConvert или Mux, HLS-плейлист для адаптивного стриминга через Video.js или Plyr.
Прогресс просмотра — через периодическую отправку watch_position с фронтенда (каждые 10–30 секунд), хранение в Redis с периодической синхронизацией в PostgreSQL. Не сохранять каждую секунду в БД — это убьёт производительность.
SCORM-совместимость — если нужна интеграция с корпоративными тренинговыми материалами. Отдельный модуль, есть готовые библиотеки (scorm-again).
Intranet и HR-порталы
Корпоративный интранет: новости, документы, оргструктура, HR-процессы (отпуска, заявки, KPI).
Оргструктура в базе данных — это иерархическая структура. Adjacency list (parent_id на каждой записи) прост в реализации, но медленен при рекурсивных запросах. Nested Sets или Closure Table быстрее для чтения иерархии, сложнее при изменениях. В PostgreSQL — рекурсивные CTE (WITH RECURSIVE) с adjacency list — баланс между простотой и производительностью.
Согласование документов и заявок — workflow engine. Простые линейные согласования (сотрудник → менеджер → HR → бухгалтер) можно сделать без специального движка. Нелинейные (параллельные ветки, условные переходы, делегирование) — стоит рассмотреть готовые решения: Temporal.io для workflow orchestration или собственный конечный автомат на базе state-machine паттерна.
Что входит в работу
При заказе разработки корпоративного портала вы получаете:
- Архитектурную документацию (ER-диаграммы, схема интеграций, матрица ролей)
- Полный код в Git-репозитории с CI/CD
- Доступы к инфраструктуре (хостинг, базы данных, хранилища)
- Обучение администраторов и ключевых пользователей (2–3 сессии)
- Гарантийную поддержку на 3 месяца после запуска
Наши принципы проектирования опираются на официальную документацию Laravel по авторизации (Policies) и рекомендации по работе с очередями.
Технический стек для порталов
| Слой |
Инструменты |
| Backend |
Laravel + PostgreSQL |
| Frontend |
React + TypeScript (Inertia.js или отдельный SPA) |
| Real-time |
Laravel Echo + Soketi / Pusher |
| Поиск |
Meilisearch (быстрый старт) или Elasticsearch (объём) |
| Очереди |
Laravel Queue + Redis |
| Файлы |
S3-compatible (MinIO self-hosted или AWS S3) |
| Мониторинг |
Sentry + Telescope (dev) |
Ориентиры по срокам
| Тип портала |
Срок |
| CRM (базовый) |
10–16 недель |
| LMS (курсы + видео + тесты) |
14–22 недели |
| HR-портал (отпуска, KPI, оргструктура) |
12–20 недель |
| Корпоративный ERP (модульный) |
24–52 недели |
Стоимость рассчитывается индивидуально после детальной аналитики требований и ролевой модели. Чтобы получить предварительную оценку, напишите нам — мы проанализируем вашу задачу и предложим оптимальное решение под ключ.