Пагинация: что это и зачем нужна
Определение:
Пагинация (от лат. *pagina* — «страница») — это механизм разделения большого объёма данных на отдельные страницы для удобства отображения и навигации.
Определение
**Пагинация** (от лат. *pagina* — «страница») — это механизм разделения большого объёма данных (статей, товаров, записей) на отдельные **страницы** для удобства отображения и навигации.
Проще говоря: вместо того чтобы показывать 1000 товаров на одной странице, сайт разбивает их на части по 20–50 элементов и добавляет навигацию:
«1 2 3 ... 10 →»
Зачем нужна пагинация?
Для пользователей
| Преимущество | Описание |
|---|---|
| 🚀 Быстрая загрузка | Меньше данных = быстрее отрисовка страницы |
| 🎯 Удобная навигация | Легче найти нужный элемент, перемещаясь по страницам |
| 📱 Адаптивность | На мобильных устройствах проще листать порциями |
| 🧭 Ориентация | Пользователь видит, где находится («стр. 3 из 15») |
Для разработчиков и бизнеса
| Преимущество | Описание |
|---|---|
| 💾 Экономия ресурсов | Сервер отдаёт только нужную порцию данных, а не всю базу |
| 📊 Аналитика | Можно отслеживать, как глубоко пользователи просматривают контент |
| 🔍 SEO-оптимизация | Поисковики лучше индексируют структурированные страницы |
| 🛡️ Защита от перегрузок | Снижает риск падения сайта при большом трафике |
Типы пагинации
1. Классическая (номерная)
«1 2 3 4 5 ... 10 › »
- Пользователь видит номера страниц и может перейти на любую
- Подходит для каталогов, архивов, форумов
2. Кнопки «Назад / Вперёд»
«‹ Пред. | След. ›»
- Простая навигация, когда неважно, на какой именно странице вы находитесь
- Часто используется в блогах, новостных лентах
3. Бесконечная прокрутка (Infinite Scroll)
- Новые элементы подгружаются автоматически при прокрутке вниз
- Популярно в соцсетях (ВК, Instagram, TikTok)
- ⚠️ Минусы: сложно вернуться к конкретному месту, проблемы с SEO
4. «Загрузить ещё» (Load More)
- Кнопка в конце списка, при нажатии подгружается следующая порция
- Компромисс между пагинацией и бесконечным скроллом
Техническая реализация (пример)
Запрос к серверу
GET /api/products?page=3&limit=20
SQL-запрос (пример для PostgreSQL/MySQL)
SELECT * FROM products
ORDER BY id
LIMIT 20 OFFSET 40; -- страница 3: (3-1)*20 = 40
Пример HTML-навигации
<nav class="pagination">
<a href="?page=1">1</a>
<a href="?page=2">2</a>
<span class="current">3</span>
<a href="?page=4">4</a>
<a href="?page=5">5</a>
<a href="?page=4">→</a>
</nav>
Лучшие практики
| Рекомендация | Почему это важно |
|---|---|
| 📏 Оптимальный размер страницы | 20–50 элементов: не слишком мало (много кликов), не слишком много (долгая загрузка) |
| 🔗 ЧПУ-адреса | /catalog/page/3/ вместо ?page=3 — лучше для SEO и запоминаемости |
| ♿ Доступность | Добавьте ARIA-метки и поддержку клавиатуры для пользователей с ограниченными возможностями |
| 📱 Адаптивный дизайн | На мобильных пагинация должна быть удобной для нажатия пальцем |
| 🧭 Текущая страница | Всегда визуально выделяйте номер текущей страницы |
| 🔁 Сохранение фильтров | При переходе между страницами должны сохраняться выбранные фильтры и сортировка |
Пагинация в популярных фреймворках
| Технология | Пример реализации |
|---|---|
| Django | Paginator(objects, 20) + page_obj в шаблоне |
| Laravel | Model::paginate(15) — автоматически создаёт ссылки |
| React | Библиотеки: react-paginate, usePagination хуки |
| Vue | Компоненты в Vue Pagination, Vuetify v-pagination |
| WordPress | Функции paginate_links(), the_posts_pagination() |
Совет: При выборе типа пагинации ориентируйтесь на задачу:
- 🛒 Интернет-магазин → классическая пагинация (пользователь хочет контролировать просмотр)
- 📱 Лента соцсети → бесконечный скролл (вовлечение и непрерывность)
- 📰 Блог/новости → «Загрузить ещё» или простые кнопки «Вперёд/Назад»