Тёмная тема (dark mode) на сайте в 2026 году: как внедрить, не сломав дизайн и SEO
Тёмная тема (dark mode) на сайте в 2026 году — уже не модный тренд, а базовое ожидание пользователя. По данным StatCounter, в сентябре 2026 года доля устройств с тёмной темой превысила 30%, и около 78% пользователей смартфонов держат её включённой постоянно. Проблема в том, что ваш сайт продолжает выглядеть как чужой: белые вспышки на ночном экране, текст, который «слепит», и формы, в которых половина полей теряет контраст. Ниже — практический разбор, как внедрить dark mode без потери в дизайне, скорости и SEO.
Что такое тёмная тема на сайте и зачем она бизнесу
Тёмная тема — это альтернативная цветовая схема, которая подключается на устройстве пользователя через медиазапрос prefers-color-scheme: dark. Браузер сообщает сайту: «пользователь хочет тёмный интерфейс» — и сайт отдаёт перекрашенную версию.
Вот что это даёт в деньгах:
- Комфорт в вечернее время. Яркий белый фон на OLED-экране в 22:00 не просто неприятен — он реально расходует батарею. По оценкам, на OLED разница между белым и чёрным фоном даёт до 30–40% экономии энергии.
- Лояльность к бренду. Тёмная тема — первое, что замечает пользователь, открывая сайт ночью. Это дешёвое преимущество перед конкурентами, у которых до сих пор «светит» белым.
- Меньше нагрузки на глаза при длинном чтении, что для контентных и B2B-проектов напрямую конвертируется в глубину сессии.
Dark mode — это не «перекрасить фон в чёрный». Это отдельная дизайн-система, которая требует собственных токенов, собственных состояний и собственного тестирования. Попытка «наложить фильтр» поверх светлой темы ломает контраст, ломает бренд и ломает доступность.
Способ 1: CSS-переменные — самый быстрый и безопасный путь
Самый распространённый подход: вынести все цвета в CSS custom properties и переопределить их в медиазапросе. Так вы меняете палитру в одном месте, а не по всей вёрстке.
:root {
--bg: #ffffff;
--text: #0f172a;
--card: #f8fafc;
--border: #e2e8f0;
--accent: #ea580c;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0b1220;
--text: #e2e8f0;
--card: #111c31;
--border: #1e293b;
--accent: #ffa726;
}
}
Всё, что использует var(--bg), переключится автоматически. Никакого JavaScript, никаких дублей вёрстки.
Три требования к палитре тёмной темы
- Не инвертируйте цвета механически. Чистый чёрный (#000000) на OLED даёт «смазывание» шрифта, а на обычных LCD выглядит как дыра в макете. Используйте тёмно-синий или графитовый: #0b1220, #111827, #1a1a2e.
- Белый текст — не чистый белый. Чистый #ffffff на тёмном фоне даёт эффект «свечения» и утомляет. Практика: #e2e8f0 вместо #ffffff — контраст при этом остаётся выше 12:1.
- Насыщенные акценты нужно приглушить. Оранжевый #ea580c в тёмной теме «кричит» и визуально выбивается. Смягчите до #ffa726 или #fb923c.
Способ 2: переключатель темы в интерфейсе
Автоматическая тема по системной настройке — это хорошо, но у неё есть слепое зоны: пользователь может хотеть светлую тему ночью (например, при работе в хорошо освещённом помещении) или наоборот. Поэтому 60–70% крупных платформ добавляют ручной переключатель с тремя состояниями:
- Системная (по умолчанию) —
data-theme="system" - Светлая —
data-theme="light" - Тёмная —
data-theme="dark"
Реализация через data-theme на <html> требует двух CSS-блоков: медиазапроса для системной темы и селекторов вида [data-theme="light"] с более высокой специфичностью, который перекрывает его.
Как избежать «мигания» при загрузке страницы
Классическая проблема: пользователь выбрал тёмную тему, а при перезагрузке на долю секунды мелькает белая версия. Решается инлайн-скриптом в <head>, который ставит атрибут data-theme до отрисовки:
<script>
const t = localStorage.getItem('theme') || 'system';
const dark = t === 'dark' ||
(t === 'system' && matchMedia('(prefers-color-scheme: dark)').matches);
document.documentElement.dataset.theme = dark ? 'dark' : 'light';
</script>
Скрипт ставится в <head> до подключения стилей — тогда белой вспышки не будет. Если скрипт нарушает политику Content Security Policy, вынесите его в отдельный файл с nonce-хешем.
Что делать с картинками, иконками и видео
Здесь тёмная тема чаще всего выглядит неаккуратно. Три рабочих приёма:
- Логотипы и иконки — подготовьте вторую версию (светлую/тёмную) и переключайте через
CSSили<picture>сmedia="(prefers-color-scheme: dark)". - Фотографии — тонируйте через CSS-фильтр, а не перерисовывайте каждую:
filter: brightness(0.85) contrast(1.05). И добавьте полупрозрачную тёмную подложку, чтобы текст поверх фото оставался читаемым. - Видео и встроенные виджеты (YouTube, карты, веб-формы) — встраивайте через
iframeс отдельной тёмной темой, если она поддерживается, либо накладывайте собственную тёмную подложку. Светлый YouTube-плеер на тёмной странице выглядит как чужеродное пятно.
Влияние тёмной темы на SEO и производительность
Хорошая новость: сама по себе тёмная тема не является фактором ранжирования. Ни Яндекс, ни Google не понижают страницу за наличие prefers-color-scheme. Но есть нюансы, которые реально влияют на позиции и метрики:
- Core Web Vitals. Второй файл темы (или тяжёлый CSS-файл с дублями) увеличивает вес страницы. Если CLS вырос — тема виновата не меньше, чем скрипты.
- Кэширование. Соберите обе темы в одном CSS-файле и отдавайте его с долгим
Cache-Control. Два отдельных файла = два запроса и риск «мигания» темы при кэше. - Красивые ссылки не должны. Некоторые доработчики меняют цвет ссылок в тёмной теме, чтобы «не выбиваться». Так не делайте: внешние ссылки теряют распознаваемость и это замечают пользователи.
- Микроразметка и OG-обложки. Тёмная тема на сайте не должна менять OG-картинку. Соцсети не учитывают тему браузера — обложка должна быть одинаковой для всех.
Доступность: WCAG и тёмная тема
Тёмная тема — зона риска по доступности, и это отдельная причина не делать её «на автомате». Обязательные проверки:
- Контраст основного текста к фону — не ниже 4.5:1 (WCAG 2.1 AA).
- Контраст крупных элементов (кнопки, иконки, границы полей) — не ниже 3:1.
- Фокус с клавиатуры должен быть виден в обеих темах: не полагайтесь на
outline: none. - Проверяйте статусные цвета: зелёный «успех» и красный «ошибка» в тёмной теме обычно требуют отдельных значений, иначе «красный» выглядит как коричневый.
Проверить контраст автоматически можно через Lighthouse или расширения Chrome DevTools, а финальный прогон — на реальных устройствах в полной темноте.
Типичные ошибки при внедрении
1. Тёмная тема «для галочки»
Инвертировали цвета скриптом, получили серый текст на чёрном фоне и нечитаемые кнопки. Если нет дизайн-системы под тёмную тему — лучше не внедрять её вовсе.
2. Свой prefers-color-scheme в обход системы
Если пользователь не выключал тёмную тему в системе, а сайт всё равно насильно её включает — это раздражает и ломает доверие. По умолчанию всегда уважайте системную настройку.
3. Забытые сторонние виджеты
Самый частый визуальный дефект. Формы, карты, калькуляторы и встроенные плееры живут в своих темах и о них нужно думать отдельно — это самая долгая часть работы.
4. Тёмная тема на печати
Стили для @media print — отдельный слой. У пользователя, который печатает счёт или договор, тёмная тема превратит бумагу в чёрный прямоугольник. Всегда оставляйте белый фон для печати.
5. Тёмная тема без теста на реальном устройстве
На десктопе с хорошим монитором всё выглядит прилично. На дешёвом OLED-смартфоне с повышенной контрастностью провалы цвета видны сразу. Тестировать нужно на минимум трёх устройствах.
Сколько стоит внедрить тёмную тему
Для сайта, где дизайн уже отрисован в Figma, добавление темы — это не разработка с нуля, а работа с палитрой. Ориентиры по объёму:
- Лендинг или сайт-визитка — 3–5 рабочих дней: токены, 2–3 компонента, проверка на устройствах.
- Корпоративный сайт на 20–40 страниц — 1,5–3 недели: единая система компонентов в Figma + пересборка в коде.
- Интернет-магазин — 3–4 недели: добавляются состояния карточек, фильтры, формы, личный кабинет, письма.
Стоимость входит примерно в 10–15% от бюджета на редизайн и заметно ниже, чем если бы вы потом начинали с чистого листа.
Чек-лист внедрения
- Токены вынесены в CSS custom properties, а не захардкожены в компоненты
- Тёмный фон — не чистый чёрный, текст — не чистый белый
- Акценты приглушены под тёмную схему
- Инлайн-скрипт в
<head>исключает мигание при загрузке - Логотип, фото, видео и все сторонние виджеты адаптированы
- Контраст проверен по WCAG AA в обеих темах
@media printоставлен белым- Проверено на реальном мобильном устройстве
- Проверено, что Core Web Vitals не ухудшились
Итог
Тёмная тема — это уже не преимущество, а ожидание. При этом внедряется она сильно проще, чем кажется, если подойти к ней как к дизайн-системе, а не как к «перекраске». Начните с токенов и одного переключателя, протестируйте на реальных устройствах в полной темноте — и вы получите аккуратный интерфейс, который работает и днём, и ночью, не потеряв ни в скорости, ни в позициях.
Нужна помощь с вашим проектом?
Расскажите о задаче — рассчитаем стоимость и предложим решение в течение дня.