Статья

SEO и дизайн-система: как проектировать поисково-безопасные компоненты

Сергей Торкунов

Дизайн-система влияет на SEO всякий раз, когда компонент создаёт ссылку, заголовок, изображение, скрытый контент, пагинацию, метаданные или поведение загрузки. Поэтому у компонента нужен SEO-контракт: что он выводит в исходный HTML, какие URL создаёт, как работает без JavaScript, какие состояния допустимы и что проверяется перед релизом. Такой контракт превращает SEO из финальной ручной проверки в часть проектирования, Storybook, CI и приёмки.

SEO и дизайн-система — логика работы и проверки.
Схема. SEO и дизайн-система — логика работы и проверки.

Какие компоненты критичны для поиска

В первую очередь контролируйте компоненты, которые повторяются на тысячах страниц:

навигацию, хлебные крошки и ссылки в карточках;

заголовки и текстовые блоки;

изображения первого экрана и галереи;

листинги, фильтры, сортировки и пагинацию;

табы, аккордеоны, модальные окна и бесконечную прокрутку;

шаблоны Title, Description, canonical и robots;

структурированные данные;

формы и сообщения об ошибках.

Локальная ошибка в таком компоненте масштабируется вместе с числом его использований. Поэтому проверяется не только внешний вид, но и HTML-контракт.

SEO-контракт компонента

Для каждого критичного компонента зафиксируйте:

назначение и страницы использования;

обязательные входные данные;

семантический HTML и порядок заголовков;

правила формирования URL и ссылок;

исходное состояние до выполнения JavaScript;

состояния загрузки, пустого результата и ошибки;

требования к изображениям и размерам контейнера;

влияние на LCP, INP и CLS;

события аналитики и исключение персональных данных;

автоматические и ручные проверки;

владельца изменения и условие отката.

Контракт хранится рядом с компонентом и обновляется вместе с ним. Текст «SEO учтено» без проверяемых условий не является контрактом.

Компоненты листинга и пагинации

Карточка должна содержать обычную ссылку <a href> на устойчивый URL. Не стоит делать единственным способом перехода обработчик клика на контейнере. Изображение получает корректные размеры и alt по смыслу, а элемент первого экрана не должен лениво загружаться только из-за общего правила компонента.

Пагинация должна создавать отдельные доступные URL и последовательные ссылки между страницами. Бесконечная прокрутка может дополнять интерфейс, но не должна быть единственным способом обнаружить следующие товары. Фильтры обязаны разделять пользовательское состояние и индексируемые посадочные: дизайн-компонент не должен самовольно создавать бесконечные комбинации адресов.

Контроль в Storybook и CI

В Storybook нужны состояния с реальным объёмом текста: короткий и длинный заголовок, отсутствие изображения, ошибка API, пустой список, медленная загрузка, несколько страниц пагинации. Проверяется DOM, фокус, клавиатурная навигация, размеры медиа и устойчивость макета.

В CI можно проверять наличие обязательных атрибутов, валидность ссылок, единственность H1 в шаблоне, допустимую вложенность заголовков, canonical, robots, JSON-LD и отсутствие критичного контента только после взаимодействия. Автотест не решает, полезен ли текст и правильно ли выбран интент, поэтому редакционная и SEO-приёмка остаются отдельным шагом.

Матрица сигналов и реакции

СигналУсловиеПриоритетОтветственныйСрок реакцииДиагностикаКритерий закрытияОткат
CrawlЦелевой раздел недоступен по ссылкамP0разработчик + SEOдо продолжения релизаDOM, inlinks, robots, маршрутыраздел снова обходится из навигациивернуть предыдущую навигацию
IndexМассовый noindex или неверный canonicalP0разработчик + SEOнемедленноисходный HTML и HTTP-заголовкидиректива соответствует матрице шаблоновоткатить шаблон метаданных
HTTPЦелевые страницы дают 4xx/5xxP0backend/DevOpsнемедленнологи, маршрутизация, выборка URLцелевые URL стабильно отвечают 200вернуть предыдущий маршрут
On-pageПропал H1 или изменён порядок заголовковP1frontend + редактордо выпускаDOM и визуальная проверказаголовки соответствуют контрактувернуть предыдущую разметку
RenderingТекст или ссылка появляются только после ошибки JSP0frontendнемедленноисходный и rendered HTML, консольключевой контент доступен и без сбоя JSотключить проблемный вариант
LCPПервый экран стал загружаться заметно позже в контрольном тестеP1frontendдо масштабированияLCP-элемент, сеть, приоритет ресурсапричина устранена без потери контентавернуть предыдущий ресурс/компонент
INPКлючевое действие блокируется долгой задачейP1frontendдо масштабированияпрофилирование обработчикадействие выполняется без блокировки интерфейсаотключить новую обработку
CLSКомпонент сдвигает уже показанный контентP1frontend + дизайнердо выпусказапись макета, размеры контейнераместо зарезервировано во всех состоянияхвернуть стабильный контейнер
ДанныеАналитическое событие пропало или дублируетсяP1аналитик + разработчикдо анализа эффектаpayload, триггеры, журнал событийодно событие на фактическое действиевернуть предыдущую схему событий

Сроки здесь описывают порядок релизной реакции, а не статистику проекта. Числовые SLA команда устанавливает только после согласования своей поддержки и критичности шаблонов.

Как выпускать изменение компонента

Сначала определите страницы и сценарии, которые затрагивает новая версия. Затем проверьте компонент изолированно, соберите тестовый шаблон и выполните crawl/DOM-проверку. На ограниченном выпуске сравните HTTP, метаданные, ссылки, рендеринг, основные действия и показатели производительности. Масштабируйте только после прохождения гейта.

Если после релиза карточка перестала выводить обычный href, порядок действий такой: остановить расширение релиза, подтвердить проблему в исходном HTML, проверить затронутые шаблоны, вернуть рабочую версию ссылки, повторить crawl и только затем закрыть инцидент. Это сценарий приёмки, а не описание произошедшего проекта.

QA-гейт перед публикацией

URL и коды ответа соответствуют карте шаблонов;

важные ссылки присутствуют в исходном HTML;

H1 и уровни H2–H3 не зависят от оформления;

canonical и robots формируются из правильного источника;

ключевой текст доступен при ошибке необязательного JavaScript;

изображения имеют размеры и не вызывают сдвиг;

состояния загрузки и пустого результата не создают ложные страницы;

аналитические события не дублируются и не содержат лишних данных;

подготовлен точный откат компонента.

Частые ошибки

Самая частая ошибка — считать компонент только визуальным объектом. Вторая — тестировать один идеальный набор данных. Третья — выпускать изменение сразу на всех шаблонах. Четвёртая — проверять только отрисованный DOM и не видеть, что исходный HTML потерял ссылку или метаданные.

Итог

Поисково-безопасная дизайн-система задаёт не набор запретов, а проверяемый контракт. Команда знает, что компонент обязан выводить, кто реагирует на отклонение, как подтвердить исправление и какой вариант вернуть при неудачном релизе.

Получите бесплатный аудит и стратегию роста

Изучим сайт, покажем точки роста и подготовим прогноз до квалифицированных лидов и оборота из SEO/GEO.