fullPage.js — это мощная библиотека для создания полноэкранных скролл-секций с плавной анимацией и множеством встроенных эффектов. При использовании в проектах с серверным рендерингом (SSR) необходимо учитывать особенности генерации HTML на сервере, чтобы страницы корректно индексировались поисковыми системами и обеспечивался быстрый первый рендер.
Ключевой принцип: инициализация fullPage.js должна происходить только на стороне клиента, после того как DOM полностью сформирован. Это связано с тем, что сервер не исполняет JavaScript, а fullPage.js требует наличия реальных DOM-элементов для работы с секциями.
if (typeof window !== 'undefined') {
import('fullpage.js').then(({ default: fullpage }) => {
new fullpage('#fullpage', {
autoScrolling: true,
navigation: true,
anchors: ['first', 'second', 'third'],
scrollOverflow: true
});
});
}
Здесь typeof window !== 'undefined' гарантирует, что код
не будет выполняться на сервере. Это предотвращает ошибки при SSR, когда
объект window отсутствует.
Для того чтобы поисковые системы индексировали контент, важно создавать все секции как обычные HTML-элементы на сервере. FullPage.js работает поверх уже существующих секций:
<div id="fullpage">
<div class="section">Контент первой секции</div>
<div class="section">Контент второй секции</div>
<div class="section">Контент третьей секции</div>
</div>
Серверный рендеринг позволяет отдать браузеру готовый HTML с содержимым каждой секции, что улучшает SEO и ускоряет отображение первых элементов страницы.
FullPage.js поддерживает anchors, которые формируют уникальные URL для каждой секции. Это критично для индексации поисковыми системами:
new fullpage('#fullpage', {
anchors: ['home', 'about', 'services', 'contact'],
navigation: true
});
Каждая секция получает свой URL вида example.com/#about.
Для серверного рендеринга важно:
<section>,
<h1>, <p>) для лучшей
индексации.<noscript> при необходимости.Для больших сайтов с множеством секций рекомендуется
откладывать инициализацию heavy-контента до момента
скролла, чтобы снизить нагрузку на клиент. FullPage.js
поддерживает события, например afterLoad:
new fullpage('#fullpage', {
afterLoad: function(origin, destination, direction){
if(destination.index === 2){
loadHeavyContent();
}
}
});
На сервере можно рендерить минимальную версию контента, а динамические элементы (галереи, видео, сложные виджеты) загружать на клиенте.
В Next.js страницы рендерятся на сервере. Для fullPage.js:
import { useEffect, useRef } from 'react';
import fullpage from 'fullpage.js';
export default function Home() {
const fullpageRef = useRef(null);
useEffect(() => {
if(fullpageRef.current) {
new fullpage(fullpageRef.current, {
autoScrolling: true,
navigation: true,
anchors: ['home', 'about', 'contact']
});
}
}, []);
return (
<div ref={fullpageRef}>
<div className="section">Home</div>
<div className="section">About</div>
<div className="section">Contact</div>
</div>
);
}
useEffect.Для Nuxt.js используется похожий подход с mounted():
export default {
mounted() {
new fullpage('#fullpage', {
autoScrolling: true,
anchors: ['first', 'second', 'third'],
navigation: true
});
}
}
Секции рендерятся через шаблон template на сервере, что
обеспечивает SEO.
<section>
вместо <div> там, где это уместно.id и anchors для
каждой секции.<noscript> для критических элементов,
если они подгружаются только на клиенте.Для правильной навигации и SEO рекомендуется:
<a href="#about">
для перехода к секции.history: true в
настройках fullPage.js:new fullpage('#fullpage', {
anchors: ['home', 'services', 'contact'],
navigation: true,
history: true
});
Это обеспечивает корректное обновление URL при скролле и поддержку кнопок «назад» в браузере.
При SSR и использовании fullPage.js важно:
scrollOverflow: true для длинных секций
без перегрузки DOM.Эти методы обеспечивают корректную работу fullPage.js в средах с серверным рендерингом, позволяют сохранить SEO-дружелюбность и поддерживать плавный пользовательский опыт.