Пагинация на сайте: как структурировать контент для SEO и UX
Для кого эта статья:
- Веб-разработчики, интересующиеся улучшением навигации на сайтах
- Специалисты по SEO, ищущие способы оптимизации сайт-контента
Владельцы интернет-магазинов и блогов, стремящиеся повысить пользовательский опыт и конверсию
Когда ваш сайт разрастается до сотен страниц контента, пользователи начинают теряться в информационном лабиринте. Представьте, что вы заставляете посетителя листать один бесконечный список из 200 товаров или 50 статей — это гарантированный путь к высоким показателям отказов. Грамотная пагинация решает эту проблему, структурируя контент на удобные порции и превращая хаос в понятную навигацию. Она не только улучшает UX, но и значительно повышает SEO-рейтинг, ускоряет загрузку страниц и увеличивает конверсию. Давайте разберёмся, как реализовать её технически правильно. 🚀
Хотите освоить не только пагинацию, но и все аспекты современной веб-разработки? Обучение веб-разработке от Skypro даст вам практические навыки создания комплексных веб-приложений. От базовых компонентов до продвинутой оптимизации интерфейса — вы научитесь создавать сайты, которые не только выглядят привлекательно, но и работают безупречно. Наши выпускники решают такие задачи как пагинация одной левой!
Что такое пагинация и зачем она нужна на сайте
Пагинация (от лат. "pagina" — страница) — это метод разделения большого объема контента на последовательные страницы с возможностью навигации между ними. Фактически, это цифровой эквивалент нумерации страниц в книге. 📚
При правильной реализации пагинация решает сразу несколько критических задач:
- Ускоряет загрузку страниц, сокращая объем данных для единоразового рендеринга
- Улучшает пользовательский опыт, делая навигацию по контенту интуитивно понятной
- Помогает поисковым системам индексировать контент более эффективно
- Снижает нагрузку на сервер за счет оптимизации запросов к базе данных
- Повышает конверсию — пользователи с большей вероятностью совершат целевое действие на странице, которая не перегружена информацией
Михаил Березин, frontend-разработчик
Однажды я консультировал интернет-магазин, у которого на страницах категорий отображалось по 100 товаров. Владелец не понимал, почему посетители редко доходили до нижних позиций и почему страница загружалась почти 8 секунд. После внедрения пагинации с 12 товарами на странице время загрузки сократилось до 1,5 секунд, а поведенческие метрики значительно улучшились. Особенно впечатляющим был рост просмотров товаров, которые раньше находились в нижней части списка — их стали замечать в 4 раза чаще. Это наглядно показало, что разумные порции контента работают лучше, чем информационный перегруз.
Существует несколько типов пагинации, выбор которых зависит от специфики вашего проекта:
| Тип пагинации | Особенности | Оптимальное применение |
|---|---|---|
| Стандартная нумерованная | Классический вариант с номерами страниц и стрелками навигации | Интернет-магазины, блоги, каталоги |
| Бесконечная прокрутка | Автоматическая подгрузка контента при прокрутке страницы | Социальные сети, ленты новостей |
| "Загрузить еще" | Кнопка для подгрузки дополнительного контента | Галереи изображений, списки комментариев |
| Алфавитная | Навигация по буквам алфавита | Справочники, глоссарии, каталоги с большим количеством категорий |
Определившись с типом пагинации, можно приступать к её технической реализации. Начнем с самого базового решения — HTML и CSS.

Базовый HTML/CSS код для реализации пагинации на веб-сайте
Создание простейшей пагинации начинается с базовой HTML-структуры, которую затем можно стилизовать с помощью CSS. Ниже представлен минимальный пример, который вы можете адаптировать под свои нужды. 🧩
Базовый HTML-код для пагинации:
<div class="pagination">
<a href="#" class="prev">« Предыдущая</a>
<a href="#" class="page">1</a>
<a href="#" class="page active">2</a>
<a href="#" class="page">3</a>
<span class="dots">...</span>
<a href="#" class="page">8</a>
<a href="#" class="page">9</a>
<a href="#" class="page">10</a>
<a href="#" class="next">Следующая »</a>
</div>
CSS-стили для создания привлекательного и интуитивно понятного интерфейса:
.pagination {
display: flex;
justify-content: center;
margin: 30px 0;
font-family: Arial, sans-serif;
}
.pagination a, .pagination span {
color: #2c3e50;
padding: 8px 16px;
text-decoration: none;
border: 1px solid #ddd;
margin: 0 4px;
border-radius: 4px;
transition: background-color 0.3s, color 0.3s;
}
.pagination a:hover {
background-color: #f1f1f1;
}
.pagination .active {
background-color: #3498db;
color: white;
border-color: #3498db;
}
.pagination .prev, .pagination .next {
background-color: #f8f9fa;
}
.pagination .dots {
border: none;
padding: 8px 10px;
}
Эта базовая реализация обеспечивает стандартные функции пагинации, но для крупных проектов потребуется более сложная логика. Вот несколько рекомендаций для улучшения базового решения:
- Адаптивность — пагинация должна корректно отображаться на мобильных устройствах
- Доступность — используйте атрибут aria-current для обозначения текущей страницы
- Управление состояниями — деактивируйте кнопки "Предыдущая" на первой странице и "Следующая" на последней
- Динамическое отображение — показывайте ограниченное количество номеров страниц с многоточием для больших наборов данных
Для более сложных случаев с динамическим контентом базовой HTML/CSS реализации может быть недостаточно. В таких ситуациях на помощь приходят CMS вроде WordPress или JavaScript-фреймворки.
Добавление пагинации в WordPress: плагины и ручной код
WordPress — одна из самых популярных CMS, и в ней есть несколько способов реализовать пагинацию. Рассмотрим два основных подхода: с использованием плагинов и с помощью встроенных функций. 🔧
Екатерина Смирнова, WordPress-разработчик
К нам обратился владелец новостного портала с серьезной проблемой: на сайте было почти 2000 статей, но базовая пагинация WordPress уже не справлялась с навигацией. Читатели жаловались, что не могут найти нужный контент. Мы сначала попробовали популярный плагин WP-PageNavi, но он лишь улучшил внешний вид, не решив основную проблему. В итоге мы разработали кастомное решение с AJAX-подгрузкой и фильтрацией по категориям. Это не только улучшило пользовательский опыт, но и снизило отказы на 23%. Ключевым моментом стало добавление "умной" пагинации, которая адаптивно меняла количество выводимых ссылок в зависимости от общего числа страниц и устройства пользователя.
Наиболее популярные плагины для пагинации в WordPress:
| Название плагина | Основные возможности | Сложность настройки |
|---|---|---|
| WP-PageNavi | Заменяет стандартную пагинацию на более функциональную с настраиваемым дизайном | Низкая |
| Pagination by BestWebSoft | Гибкая настройка внешнего вида, поддержка AJAX | Средняя |
| Ajax Load More | Бесконечная прокрутка, кнопка "Загрузить еще", множество параметров | Средняя |
| Infinite Scroll | Автоматическая подгрузка контента при прокрутке страницы | Низкая |
Если вы предпочитаете ручной подход или хотите более тонкой настройки, WordPress предлагает встроенные функции для создания пагинации. Вот пример использования функции paginate_links() в файле index.php или archive.php:
<?php
// Получаем текущую страницу
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
// Аргументы для запроса
$args = array(
'post_type' => 'post',
'posts_per_page' => 10, // Количество постов на странице
'paged' => $paged
);
// Основной запрос
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
// Ваш код для вывода поста
the_title();
the_excerpt();
endwhile;
// Код для пагинации
echo '<div class="custom-pagination">';
$pagination = paginate_links(array(
'base' => str_replace(999999999, '%#%', esc_url(get_pagenum_link(999999999))),
'format' => '?paged=%#%',
'current' => max(1, get_query_var('paged')),
'total' => $query->max_num_pages,
'prev_text' => '« Предыдущая',
'next_text' => 'Следующая »',
'type' => 'array'
));
if ($pagination) {
foreach ($pagination as $link) {
echo $link;
}
}
echo '</div>';
wp_reset_postdata();
else :
echo '<p>Записей не найдено</p>';
endif;
?>
Для более сложных сценариев, например, пагинации в пользовательских типах записей или с использованием AJAX, потребуются дополнительные настройки:
- Для пользовательских типов записей нужно убедиться, что в аргументах их регистрации установлен параметр 'has_archive' => true
- При использовании AJAX необходимо зарегистрировать JavaScript-обработчики и настроить серверные эндпоинты
- Для оптимизации производительности рекомендуется использовать кеширование результатов запросов
Независимо от выбранного метода, важно обеспечить согласованность пагинации с общим дизайном сайта и оптимизировать её для SEO, о чем мы поговорим в последнем разделе.
JavaScript-решения для создания динамической пагинации
Современные веб-приложения часто требуют более интерактивного подхода к пагинации, чем может предложить статический HTML. JavaScript открывает возможности для создания динамической пагинации с возможностью подгрузки контента без перезагрузки страницы. 💻
Рассмотрим простой пример реализации AJAX-пагинации с использованием чистого JavaScript:
// HTML-разметка
// <div id="content-container"></div>
// <div id="pagination-container"></div>
document.addEventListener('DOMContentLoaded', function() {
let currentPage = 1;
const itemsPerPage = 10;
const totalItems = 100; // Может быть получено с сервера
const totalPages = Math.ceil(totalItems / itemsPerPage);
// Функция для загрузки данных
function loadData(page) {
const xhr = new XMLHttpRequest();
xhr.open('GET', `api/items?page=${page}&limit=${itemsPerPage}`, true);
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 400) {
const data = JSON.parse(xhr.responseText);
renderItems(data);
renderPagination(page, totalPages);
}
};
xhr.onerror = function() {
console.error('Ошибка при загрузке данных');
};
xhr.send();
}
// Функция для рендеринга элементов
function renderItems(data) {
const container = document.getElementById('content-container');
container.innerHTML = '';
data.forEach(item => {
const itemElement = document.createElement('div');
itemElement.classList.add('item');
itemElement.textContent = item.title; // Предполагаем, что у данных есть поле title
container.appendChild(itemElement);
});
}
// Функция для рендеринга пагинации
function renderPagination(currentPage, totalPages) {
const container = document.getElementById('pagination-container');
container.innerHTML = '';
// Создаем кнопку "Предыдущая"
if (currentPage > 1) {
addPaginationButton('« Пред', currentPage – 1);
}
// Определяем диапазон страниц для отображения
let startPage = Math.max(1, currentPage – 2);
let endPage = Math.min(totalPages, currentPage + 2);
// Добавляем первую страницу и многоточие, если нужно
if (startPage > 1) {
addPaginationButton('1', 1);
if (startPage > 2) {
addEllipsis();
}
}
// Добавляем основные кнопки страниц
for (let i = startPage; i <= endPage; i++) {
addPaginationButton(i.toString(), i, i === currentPage);
}
// Добавляем многоточие и последнюю страницу, если нужно
if (endPage < totalPages) {
if (endPage < totalPages – 1) {
addEllipsis();
}
addPaginationButton(totalPages.toString(), totalPages);
}
// Создаем кнопку "Следующая"
if (currentPage < totalPages) {
addPaginationButton('След »', currentPage + 1);
}
function addPaginationButton(text, page, isActive = false) {
const button = document.createElement('button');
button.textContent = text;
if (isActive) {
button.classList.add('active');
}
button.addEventListener('click', function() {
currentPage = page;
loadData(page);
});
container.appendChild(button);
}
function addEllipsis() {
const ellipsis = document.createElement('span');
ellipsis.textContent = '...';
ellipsis.classList.add('ellipsis');
container.appendChild(ellipsis);
}
}
// Инициализация
loadData(currentPage);
});
Для более сложных проектов часто используются JavaScript-фреймворки и библиотеки, которые значительно упрощают работу с пагинацией:
- React — библиотека react-paginate или компоненты из Material-UI/Ant Design
- Vue.js — компоненты vue-pagination-2 или встроенные решения в библиотеках Vuetify/Quasar
- Angular — ngx-pagination или PrimeNG Paginator
- jQuery — плагины simplePagination.js или jqPagination
При реализации динамической пагинации следует учитывать несколько важных аспектов:
- Состояние загрузки — показывайте индикатор загрузки при ожидании данных
- Обработка ошибок — предусмотрите сценарии для случаев, когда запрос к API завершается с ошибкой
- История браузера — используйте History API для обновления URL при смене страницы, чтобы пользователи могли использовать кнопки "Назад" и "Вперед"
- Производительность — оптимизируйте количество запросов и объем передаваемых данных
- Доступность — обеспечьте корректную работу с клавиатурой и средствами чтения с экрана
Динамическая пагинация значительно улучшает пользовательский опыт, но также требует внимания к вопросам SEO, поскольку контент, загружаемый через AJAX, может быть недоступен поисковым системам без дополнительных мер.
SEO-оптимизация пагинации: атрибуты rel и метатеги
Пагинация — не только элемент навигации, но и важный аспект SEO-стратегии. Правильная настройка поможет поисковым системам эффективно индексировать контент и избежать проблем с дублированием. 🔍
Для оптимизации пагинации с точки зрения SEO используются специальные атрибуты и метатеги:
<!-- На первой странице (page1.html) -->
<link rel="next" href="https://example.com/page2.html" />
<!-- На второй странице (page2.html) -->
<link rel="prev" href="https://example.com/page1.html" />
<link rel="next" href="https://example.com/page3.html" />
<!-- На последней странице (pageN.html) -->
<link rel="prev" href="https://example.com/pageN-1.html" />
Атрибуты rel="next" и rel="prev" сообщают поисковым системам о связи между страницами в последовательности пагинации. Это помогает поисковым роботам понять, что страницы являются частью логической последовательности, а не дублированным контентом.
Дополнительные методы SEO-оптимизации пагинации включают:
- Канонический URL — если вы хотите, чтобы поисковые системы рассматривали первую страницу серии как основную, используйте тег
link rel="canonical" - Метатег robots — для управления индексацией отдельных страниц пагинации
- Параметризация URL — использование чистых URL вместо параметров (?page=2) для лучшего ранжирования
- XML-карта сайта — включение всех страниц пагинации в sitemap.xml с соответствующими приоритетами
Рекомендации по оптимизации пагинации для различных типов контента:
| Тип контента | Рекомендации по SEO | Примеры реализации |
|---|---|---|
| Блоги и новостные сайты | Используйте rel="next/prev", включайте все страницы в sitemap | Хронологическая последовательность с датированными URL |
| Интернет-магазины | Фильтруйте некоторые страницы из индекса, используйте канонические URL | Настройка для страниц категорий с множеством фильтров |
| Форумы и обсуждения | Индексируйте первые страницы тем, используйте noindex для глубоких страниц | Первые 2-3 страницы в индексе, остальные с noindex |
| Галереи и каталоги | Применяйте AJAX-пагинацию с поддержкой индексации через pushState | Динамическая загрузка с обновлением URL и метаданных |
Важно учитывать, что стратегии SEO-оптимизации пагинации могут меняться с развитием алгоритмов поисковых систем. Следите за официальной документацией и обновлениями от Google и других поисковиков.
Для динамической AJAX-пагинации необходимы дополнительные меры:
- Используйте History API (pushState) для обновления URL при навигации
- Обновляйте метаданные страницы (title, description) при загрузке нового контента
- Реализуйте серверный рендеринг для первичной загрузки контента
- Используйте атрибут data-url на элементах пагинации для указания полного URL
Регулярно проверяйте индексацию страниц пагинации в Google Search Console или других аналитических инструментах, чтобы выявить и устранить проблемы с индексацией.
Пагинация — это не просто технический компонент вашего сайта, а мощный инструмент улучшения пользовательского опыта и SEO-оптимизации. Правильно реализованная система постраничной навигации значительно улучшает взаимодействие посетителей с вашим контентом, ускоряет загрузку страниц и помогает поисковым системам эффективнее индексировать ваш сайт. Какой бы метод реализации вы ни выбрали — базовый HTML/CSS, WordPress, JavaScript или комбинированное решение — помните о балансе между технической эффективностью, удобством для пользователя и SEO-требованиями. Этот баланс и есть ключ к созданию по-настоящему успешной пагинации.