Напишите нам
Напишите нам

SEO React-сайтов

Продвигаем React-сайты с учетом работы компонентов и загрузки данных. Определяем технические ограничения и развиваем посадочные страницы, чтобы бизнес мог привлекать заинтересованную аудиторию из поиска.

Получить консультацию

Наши преимущества

Компонентный подход

Находим общие причины ошибок на разных страницах. Это позволяет объединять задачи по компонентам и сокращать количество однотипных доработок.

React-специализация

Учитываем версию React и используемые библиотеки. Рекомендации соответствуют тому, как конкретный проект формирует страницы и получает данные.

Сохранение стека

Оцениваем возможности действующего проекта до предложения сменить технологию. Рекомендации учитывают уже работающие функции и ограничения команды.

Контроль зависимостей

Учитываем влияние обновлений React и сторонних библиотек на поисковые страницы. Заранее определяем проверки для изменений в компонентах и способах загрузки данных.

Что мы делаем?

1
Изучаем React-стек
Определяем роль React в проекте и способы формирования страниц. Изучаем используемый фреймворк, роутер и загрузку данных. Выделяем ограничения общих компонентов и отдельных разделов.
2
Проверяем рендеринг
Сравниваем исходный HTML и содержание после выполнения JavaScript. При серверном рендеринге проверяем сохранение контента после гидратации — подключения React к готовой разметке. Готовим требования к доступности основных блоков и обработке ошибок загрузки.
3
Проектируем метаданные
Готовим правила для Title, Description и canonical с учетом версии React и возможностей стека. Проверяем совместную работу общих шаблонов и компонентов страниц. Выявляем дублирующие теги и противоречия между метаданными и содержанием.
4
Анализируем индексацию
Проверяем HTML-ссылки из компонентов навигации и доступность целевых URL. Анализируем коды ответа, robots.txt и sitemap.xml. Сопоставляем директивы индексации с данными поисковых систем.
5
Оцениваем клиентский код
Изучаем объем JavaScript и порядок загрузки компонентов. Сопоставляем полевые данные Core Web Vitals с лабораторными замерами. Формируем требования к тяжелым библиотекам, изображениям и сторонним виджетам.
6
Развиваем посадочные
Собираем семантику и определяем страницы для продвижения. Готовим требования к содержанию, заголовкам и структурированным данным. Проектируем внутренние связи и состав контентных блоков.
7
Ведем внешнее продвижение
Изучаем ссылочный профиль и конкурентов по приоритетным темам. Определяем страницы для усиления и подходящие площадки. Ведем внешнее продвижение через согласованные публикации и размещения.
8
Проверяем изменения
После внедрения повторно оцениваем затронутые компоненты и типы страниц. Отслеживаем индексацию, поисковую видимость и целевые действия пользователей. Уточняем следующие задачи по результатам проверок и динамике проекта.

Результативное SEO для бизнеса

Ситуация клиента
Наше SEO-решение
Ожидаемый результат
1
Основной текст присутствует в серверном HTML. После запуска React часть содержимого неожиданно исчезает или заменяется заглушкой.
Сравниваем серверную разметку и результат гидратации. Уточняем причины расхождений и готовим требования к отображению контента.
Важное содержание сохраняется при подключении интерактивных функций. Снижается риск его потери в отрендеренной странице.
2
Общий шаблон и компонент страницы одновременно добавляют Title. В документе появляются несколько противоречащих друг другу заголовков.
Определяем правила формирования метаданных и распределение ответственности между компонентами. Проверяем результат на разных типах страниц.
Страница получает один согласованный Title. Команда может использовать общие компоненты без повторения этой ошибки в новых разделах.
3
Для показа простой посадочной загружается код тяжелых интерактивных модулей. Основное предложение появляется с задержкой.
Проверяем последовательность загрузки и вклад отдельных компонентов. Готовим рекомендации по разделению кода и приоритету основного содержания.
После внедрения уменьшается объем лишнего кода при первом открытии страницы. Пользователь может быстрее ознакомиться с предложением.

Наши результаты

Мультибрендовый Интернет-Магазин

Органические продажи выросли на 30%

  • Сложная структура не позволяла масштабироваться
  • Проведена глубокая реструктуризация и кластеризация
  • Создан массив SEO-страниц под бренды и геозапросы
  • Оптимизирована навигация и фильтры для поисковиков

Подробнее о проекте

B2B SaaS: Employee Monitoring Software

Количество демо-заявок выросло на 30%

  • Англоязычный проект с фокусом на рынок США
  • Собрана и кластеризована семантика по коммерческим намерениям
  • Проведена глубокая техническая и контент-оптимизация
  • Рост видимости по ключевым high-intent-запросам

Подробнее о проекте

Fashion-Tech: Сайт Проверки Подлинности

Органический трафик вырос в 3 раза за 1,5 года

  • Проект по экспертной проверке оригинальности брендов
  • Собрана глубокая семантика по брендам и типам подделок
  • Создан массив экспертных руководств и гайдов
  • Проведена комплексная внутренняя и внешняя оптимизация
  • Сайт вошел в ТОП-3 по ключевым информационным запросам

Подробнее о проекте

Интернет-магазин спортивного питания

Вывод ключевых товарных категорий в ТОП-3 поиска

  • Проведена реструктуризация сайта под коммерческие запросы
  • Созданы новые SEO-страницы под категории и LSI-запросы
  • Выстроена стратегия внешнего цитирования в отраслевых источниках
  • Улучшение внутренней перелинковки

Подробнее о проекте

Финансовая платформа для онлайн-трейдинга

Количество лидов и демо-заявок увеличилось в 2 раза

  • Усовершенствована SEO-структура сайта
  • Исправлены технические ошибки и проработана воронка
  • Оптимизация контента под финансовые запросы
  • Рост видимости сайта по высококонверсионным запросам

Подробнее о проекте

Аренда Спецтехники: Сайт Манипулятора

Количество заявок выросло на 65% благодаря SEO

  • Геотаргетинг на Санкт-Петербург и область
  • Выполнен технический аудит и устранены ошибки индексации
  • Внедрена стратегия внутренней перелинковки и внешних ссылок
  • Видимость сайта в поиске достигла 80%

Подробнее о проекте

Модный Блог и Информационный Сайт

Ежемесячный органический трафик — 1 000 000 визитов

  • Проект по привлечению трафика на тематику моды и стиля
  • Создана и расширена структура информационного раздела
  • Проведена глубокая текстовая и техническая оптимизация статей
  • Достигнуты высокие позиции по широкому спектру LSI-запросов

Подробнее о проекте

Платформа аналитики криптовалют и Web3-данных

Конверсия из органики выросла на 15%

  • Сбор и кластеризация семантики по крипто-запросам
  • Оптимизация страниц под long-tail-запросы
  • Улучшена внутренняя перелинковка и навигация
  • Проект вошел в ТОП-5 по long-tail-запросам

Подробнее о проекте

B2B SaaS-сервис мониторинга сотрудников

Поисковый трафик вырос в 2 раза, лиды — на 15%

  • Проведен технический аудит и повышена скорость загрузки
  • Написан экспертный контент и внедрена семантическая разметка
  • Сбор семантики по HR и employee monitoring запросам
  • Проект достиг видимости в ТОП-10 по целевым B2B-запросам

Подробнее о проекте

Fashion-Блог и Информационный Проект

Органический трафик вырос в 2 раза за год, CTR — на 10%

  • Проект по привлечению трафика на модную тематику
  • Разработан и внедрен контент-план на полгода вперед
  • Настроена микроразметка для улучшения внешнего вида в поиске
  • Значительно выросли поведенческие метрики пользователей

Подробнее о проекте

Получите
стратегию и смету
для роста
вашего бизнеса

Получите
стратегию и смету
для роста
вашего бизнеса

Смета
Стратегия
Прогноз трафика
План работ
Коммерческое
Предложение
Для каждого проекта
разрабатывается индивидуально
Стратегия
Смета

Сроки SEO-продвижения React-сайтов

1
месяц
Изучаем устройство React-проекта и приоритетные направления бизнеса.

Проверяем формирование контента и фиксируем исходные показатели. Клиент получает список ограничений и план задач для SEO-команды и разработчиков.
2
месяца
Команда клиента внедряет согласованные изменения в компоненты и настройки проекта.

Мы проверяем результат на основных шаблонах. Параллельно готовим требования к содержанию посадочных страниц.
3
месяца
Развиваем согласованные поисковые направления.

Проверяем новые страницы и внутренние связи после публикации. Продолжаем работу с контентом и внешним продвижением.
4
месяца
Оцениваем видимость приоритетных страниц и качество поискового трафика.

Сопоставляем динамику с внедренными задачами. Определяем следующие доработки и направления расширения сайта.

Стоимость услуг продвижения

Не знаете, какой тариф выбрать?
Мы бесплатно проанализируем ваш сайт и нишу, оценим потенциал роста и подготовим персональное коммерческое предложение с прогнозом трафика

Подробнее о нас

Почасовой тариф

Работа по часам под ваши бизнес-цели

2 200 руб./час

Заказать

Продвижение «Стандарт»

Набор самых важных работ, ежемесячная плата

от 50 000 руб./мес. (от 22 часов/мес.)

Заказать

Продвижение «Расширенный»

Для сложных и крупных проектов с высокой конкуренцией

от 90 000 руб./мес. (от 40 часов/мес.)

Заказать

Аудит сайта

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

40 000 руб. (от 18 часов)

Заказать

Что мы предлагаем

SEO React-сайтов

В React-проекте объем технических работ зависит не только от количества страниц. Важно, сколько у них общих компонентов и разных способов загрузки данных. Большой каталог на едином шаблоне может требовать меньше разовых доработок, чем несколько независимо разработанных разделов.

SEO React-сайтов планируем с учетом этой структуры. Вместе с командой определяем изменения для целых групп страниц и задачи для отдельных направлений. Так руководитель может сопоставить затраты на разработку с поисковым потенциалом конкретных разделов. При SEO React-сайтов учитываем расходы на дальнейшую поддержку решения. Дополнительные библиотеки и отдельные механизмы формирования контента требуют сопровождения. Обсуждаем с разработчиками варианты, которые команда сможет поддерживать по мере развития продукта.
Разберём ваш сайт и покажем точки роста

Разберём ваш сайт, найдём точки роста и предложим стратегию SEO с прогнозом трафика и заявок. Без воды — только конкретные действия и ожидаемый результат.

Вопросы и ответы
01/ Обязателен ли React Helmet для работы с метатегами?
Нет. В React 19 есть встроенная поддержка тегов и <meta>. Фреймворки и дополнительные библиотеки могут предоставлять свои средства управления метаданными. Решение выбираем с учетом версии React и требований проекта. </div> </div> <div class="faq-card"> <div class="faq-card__question"> <div class="question-left"> <span class="question-number"> 02/ </span> <span class="question-text"> Нужно ли убирать интерактивные компоненты ради SEO? </span> </div> <div class="circle circle-with-arrow all-center bg-accent"> <svg width="26" height="16" viewBox="0 0 26 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 8H25M25 8L18 1M25 8L18 15" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </div> </div> <div class="faq-card__answer"> Нет. Наличие клиентской логики само по себе не мешает продвижению. При серверном рендеринге проверяем, что важное содержание доступно поисковому роботу и не теряется после гидратации. </div> </div> <div class="faq-card"> <div class="faq-card__question"> <div class="question-left"> <span class="question-number"> 03/ </span> <span class="question-text"> Почему при SSR часть текста появляется только после загрузки JavaScript? </span> </div> <div class="circle circle-with-arrow all-center bg-accent"> <svg width="26" height="16" viewBox="0 0 26 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 8H25M25 8L18 1M25 8L18 15" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </div> </div> <div class="faq-card__answer"> Так бывает, если данные запрашиваются только в useEffect. Этот хук не выполняется при серверном рендеринге. Для такого содержания отдельно определяем способ загрузки данных и проверяем его доступность поисковому роботу. </div> </div> <div class="faq-card"> <div class="faq-card__question"> <div class="question-left"> <span class="question-number"> 04/ </span> <span class="question-text"> Можно ли использовать React.lazy и Suspense? </span> </div> <div class="circle circle-with-arrow all-center bg-accent"> <svg width="26" height="16" viewBox="0 0 26 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 8H25M25 8L18 1M25 8L18 15" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </div> </div> <div class="faq-card__answer"> Да. React.lazy позволяет отложить загрузку кода компонента, а Suspense показывает временное содержимое на время ожидания. Проверяем результат с учетом способа рендеринга и убеждаемся, что важный контент не остается недоступным в поисковой версии страницы. </div> </div> <div class="faq-card"> <div class="faq-card__question"> <div class="question-left"> <span class="question-number"> 05/ </span> <span class="question-text"> Нужно ли заменять ссылки React Router на обычные ссылки? </span> </div> <div class="circle circle-with-arrow all-center bg-accent"> <svg width="26" height="16" viewBox="0 0 26 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1 8H25M25 8L18 1M25 8L18 15" stroke="#191919" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </div> </div> <div class="faq-card__answer"> Нет. Стандартный компонент Link уже формирует HTML-ссылку с адресом перехода. Отдельно проверяем собственные компоненты навигации и элементы с обработчиком onClick. Их внешний вид не подтверждает наличие ссылки в разметке. </div> </div> </div> </div> </section> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Обязателен ли React Helmet для работы с метатегами?\n", "acceptedAnswer": { "@type": "Answer", "text": "Нет. В React 19 есть встроенная поддержка тегов и . Фреймворки и дополнительные библиотеки могут предоставлять свои средства управления метаданными. Решение выбираем с учетом версии React и требований проекта." } }, { "@type": "Question", "name": "Нужно ли убирать интерактивные компоненты ради SEO?\n", "acceptedAnswer": { "@type": "Answer", "text": "Нет. Наличие клиентской логики само по себе не мешает продвижению. При серверном рендеринге проверяем, что важное содержание доступно поисковому роботу и не теряется после гидратации." } }, { "@type": "Question", "name": "Почему при SSR часть текста появляется только после загрузки JavaScript?\n", "acceptedAnswer": { "@type": "Answer", "text": "Так бывает, если данные запрашиваются только в useEffect. Этот хук не выполняется при серверном рендеринге. Для такого содержания отдельно определяем способ загрузки данных и проверяем его доступность поисковому роботу." } }, { "@type": "Question", "name": "Можно ли использовать React.lazy и Suspense?\n", "acceptedAnswer": { "@type": "Answer", "text": "Да. React.lazy позволяет отложить загрузку кода компонента, а Suspense показывает временное содержимое на время ожидания. Проверяем результат с учетом способа рендеринга и убеждаемся, что важный контент не остается недоступным в поисковой версии страницы." } }, { "@type": "Question", "name": "Нужно ли заменять ссылки React Router на обычные ссылки?\n", "acceptedAnswer": { "@type": "Answer", "text": "Нет. Стандартный компонент Link уже формирует HTML-ссылку с адресом перехода. Отдельно проверяем собственные компоненты навигации и элементы с обработчиком onClick. Их внешний вид не подтверждает наличие ссылки в разметке." } } ] } </script> <section id="feedback"></section> <section class="feedback padding-60"> <div class="container feedback-container"> <div class="gradient-border feedback-left__border mob-100"> <div class="feedback-left"> <div class="feedback-left__top"> <div class="section-title feedback-section-title"> Остались вопросы <br> или хотите заказать услугу? </div> <p class="after-section-title"> Заполните форму обратной связи, <br class="desk-hidden">и мы свяжемся <br class="mob-hidden"> с Вами в ближайшее время <br class="desk-hidden">для уточнения деталей. </p> </div> <img src="https://seonova.ru/wp-content/uploads/2026/05/image-12.png" alt="" class="feedback-img"> </div> </div> <div class="feedback-right mob-100"> <form action="" class="feedback-form form" id="feedback-form"> <label for="name">Ваше имя</label> <input type="text" id="name" name="name" placeholder="Как вас зовут?"> <label for="service">Какая услуга вас интересует?</label> <input type="text" id="service" name="service" placeholder="Введите название услуги"> <label for="phone">Телефон для связи</label> <input type="tel" id="phone" name="phone" placeholder="+7 (___) __-__-__"> <div class="agreement"> <input type="checkbox" name="agreement"> <span> Отправляя форму, согласен/согласна на обработку моих персональных данных в соответствии с <a href="/privacypolicy/">Политикой конфиденциальности</a>, </span> </div> <button type="submit" class="submit"> <div class="btn-radius hero-btn flex-align-center center"> <p class="hero-btn__text">Оставить заявку</p> <div class="hero-btn__circle flex-align-center"> <img src="https://seonova.ru/wp-content/themes/seonova/assets/images/arrow-right.svg" alt=""> </div> </div> </button> </form> </div> </div> </section> <section class="section-blog padding-60"> <div class="container"> <a href="/blog" class="section-title standart-h2"> блог </a> <div class="swiper__container"> <button class="swiper-btn swiper-btn__prev all-center blog-prev"></button> <button class="swiper-btn swiper-btn__next all-center blog-next"></button> <div class='swiper-blog swiper-slider overflow-hidden'> <div class='swiper-wrapper'> <div class='swiper-slide blog-slide'> <a href="https://seonova.ru/nuzhny-li-biznesu-stati-kogda-poiskovye-sistemy-dayut-gotovye-otvety/" class="blog-item"> <div class="gradient-border"> <div class="blog-item__content"> <div class="blog-item__top"> <img src="https://seonova.ru/wp-content/uploads/2026/08/nuzhny-li-biznesu-stati-kogda-poiskovye-sistemy-dayut-gotovye-otvety-1.webp" alt="Нужны ли бизнесу статьи, когда поисковые системы дают готовые ответы" title="Нужны ли бизнесу статьи, когда поисковые системы дают готовые ответы"> <div class="blog-item__title blog-item__padding"> Нужны ли бизнесу статьи, когда поисковые системы дают готовые ответы </div> <div class="blog-item__subtitle blog-item__padding"> У корпоративного блога появился новый конкурент за внимание — сама поисковая выдача. Она уже умеет объяснять термины, собирать инструкции и сравнивать варианты. Пользователь может получить достаточно информации и не открыть ни одного сайта. Из-за этого вопросы «зачем компании статьи» и «зачем бизнесу статьи на сайте» звучат иначе. Нужен не поток текстов, а собственные источники для […] </div> </div> <div class="blog-item__bottom blog-item__padding"> <div class="blog-item__date"> 24 августа 2026 </div> </div> </div> </div> </a> </div> <div class='swiper-slide blog-slide'> <a href="https://seonova.ru/nuzhen-li-saitu-fail-llms-txt-i-kak-ego-pravilno-sostavit/" class="blog-item"> <div class="gradient-border"> <div class="blog-item__content"> <div class="blog-item__top"> <img src="https://seonova.ru/wp-content/uploads/2026/08/chto-takoe-fajl-llms-txt-prostymi-slovami-1.webp" alt="Что такое файл llms.txt простыми словами" title="Что такое файл llms.txt простыми словами"> <div class="blog-item__title blog-item__padding"> Что такое файл llms.txt простыми словами </div> <div class="blog-item__subtitle blog-item__padding"> Файл llms.txt — это короткая текстовая карта сайта, написанная в формате Markdown специально для языковых моделей и ИИ-агентов. Он подсказывает алгоритмам, где лежат приоритетные материалы: главные разделы, документация, инструкции и справочная информация. Формат появился как открытая инициатива для разработчиков и SEO-специалистов. На сегодняшний день он пока не стал официальным стандартом для Google, Яндекса или OpenAI, […] </div> </div> <div class="blog-item__bottom blog-item__padding"> <div class="blog-item__date"> 24 августа 2026 </div> </div> </div> </div> </a> </div> <div class='swiper-slide blog-slide'> <a href="https://seonova.ru/kogda-saitu-nuzhen-poddomen-i-kak-pravilno-ego-ispolzovat/" class="blog-item"> <div class="gradient-border"> <div class="blog-item__content"> <div class="blog-item__top"> <img src="https://seonova.ru/wp-content/uploads/2026/08/kogda-sajtu-nuzhen-poddomen-i-kak-pravilno-ego-ispolzovat-1.webp" alt="Когда сайту нужен поддомен и как правильно его использовать" title="Когда сайту нужен поддомен и как правильно его использовать"> <div class="blog-item__title blog-item__padding"> Когда сайту нужен поддомен и как правильно его использовать </div> <div class="blog-item__subtitle blog-item__padding"> Поддомен часто появляется из-за устройства бизнеса или сайта. На отдельный адрес выносят личный кабинет, справочный центр, региональную версию или продукт на другой платформе. Проблемы начинаются, когда такое разделение считают простой заменой папки. Чтобы решить, для чего нужен поддомен, оценивают самостоятельность раздела. Отдельные технологии, команда, аудитория или региональная модель могут оправдать разделение. Если меняется лишь адрес, […] </div> </div> <div class="blog-item__bottom blog-item__padding"> <div class="blog-item__date"> 24 августа 2026 </div> </div> </div> </div> </a> </div> <div class='swiper-slide blog-slide'> <a href="https://seonova.ru/kak-prodvigat-optovuyu-kompaniyu-i-poluchat-zayavki-iz-poiska/" class="blog-item"> <div class="gradient-border"> <div class="blog-item__content"> <div class="blog-item__top"> <img src="https://seonova.ru/wp-content/uploads/2026/08/kak-prodvigat-optovuyu-kompaniyu-i-poluchat-zayavki-iz-poiska-1.webp" alt="Как продвигать оптовую компанию и получать заявки из поиска" title="Как продвигать оптовую компанию и получать заявки из поиска"> <div class="blog-item__title blog-item__padding"> Как продвигать оптовую компанию и получать заявки из поиска </div> <div class="blog-item__subtitle blog-item__padding"> Оптовый покупатель оценивает поставщика по конкретным условиям: минимальной партии, географии поставок, срокам и документам. Если сайт не показывает их до обращения, менеджеры получают запросы, которые изначально не подходят компании. Продвижение оптовых компаний должно решать две задачи: приводить закупщиков по нужным товарным направлениям и заранее показывать условия поставки. Результат оценивают по квалифицированным заявкам и их конверсии […] </div> </div> <div class="blog-item__bottom blog-item__padding"> <div class="blog-item__date"> 24 августа 2026 </div> </div> </div> </div> </a> </div> </div> <div class="slider-pagination all-center"></div> </div> </div> </div> </section> </main> <footer> <div class="container"> <div class="footer footer-desctop"> <div class="footer-left"> <div class="footer-left-top"> <img src="https://seonova.ru/wp-content/uploads/2024/01/logo.svg" alt="" class=footer-logo> <p class="footer-left-top__title"> Продвижение бизнеса </p> <p class="footer-left-top__subtitle"> в digital-среде </p> <p class="footer-left-top__title"> SEO-команда с уклоном в работу<br>с продуктом и сложные проекты </p> </div> </div> <nav class="footer-nav"> <ul class="footer-menu"> <li class="footer-menu-item footer-has-submenu"> <a href=""> <span>SEO-услуги</span> <svg width="9" height="5" viewBox="0 0 9 5" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.501052 0C0.0555996 0 -0.167484 0.538571 0.147499 0.853553L3.94039 4.64645C4.13565 4.84171 4.45224 4.84171 4.6475 4.64645L8.44039 0.853553C8.75537 0.53857 8.53229 0 8.08684 0H0.501052Z" fill="#CCE7D7" /> </svg> </a> <ul class="footer-submenu"> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/kompleksnoe-seo-prodvizhenie-sajta/"> Комплексное SEO-продвижение </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/vnutrennyaya-seo-optimizaciya-sajta/"> Внутренняя SEO-оптимизация </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/vneshnyaya-seo-optimizaciya-sajta/"> Внешняя SEO-оптимизация </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/mezhdunarodnoe-seo-prodvizhenie-sajtov/"> Международное SEO-продвижение </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/seo-soprovozhdenie-sajta/"> SEO-сопровождение сайта </a> </li> </ul> </li> <li class="footer-menu-item footer-has-submenu"> <a href=""> <span>SEO-аудит</span> <svg width="9" height="5" viewBox="0 0 9 5" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.501052 0C0.0555996 0 -0.167484 0.538571 0.147499 0.853553L3.94039 4.64645C4.13565 4.84171 4.45224 4.84171 4.6475 4.64645L8.44039 0.853553C8.75537 0.53857 8.53229 0 8.08684 0H0.501052Z" fill="#CCE7D7" /> </svg> </a> <ul class="footer-submenu"> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/kompleksnyj-seo-audit/"> Комплексный SEO-аудит </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/tekhnicheskij-audit/"> Технический SEO-аудит </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/e-e-a-t-audit/"> E-E-A-T-аудит </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/geo-audit/"> GEO-аудит </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/vneshnij-audit-sajta/"> Внешний аудит сайта </a> </li> </ul> </li> <li class="footer-menu-item footer-has-submenu"> <a href=""> <span>SEO-решения</span> <svg width="9" height="5" viewBox="0 0 9 5" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.501052 0C0.0555996 0 -0.167484 0.538571 0.147499 0.853553L3.94039 4.64645C4.13565 4.84171 4.45224 4.84171 4.6475 4.64645L8.44039 0.853553C8.75537 0.53857 8.53229 0 8.08684 0H0.501052Z" fill="#CCE7D7" /> </svg> </a> <ul class="footer-submenu"> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/seo-prodvizhenie-internet-magazina/"> SEO для интернет-магазинов </a> </li> <li class="footer-submenu-item"> <a href=""> SEO для сайтов услуг </a> </li> <li class="footer-submenu-item"> <a href=""> SEO для корпоративных сайтов </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/seo-prodvizhenie-novogo-sajta/"> SEO-продвижение нового сайта </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/uslugi/seo-prodvizhenie-sajtov-na-cms/"> SEO-продвижение сайта на CMS </a> </li> </ul> </li> <li class="footer-menu-item footer-has-submenu"> <a href=""> <span>SEONOVA</span> <svg width="9" height="5" viewBox="0 0 9 5" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0.501052 0C0.0555996 0 -0.167484 0.538571 0.147499 0.853553L3.94039 4.64645C4.13565 4.84171 4.45224 4.84171 4.6475 4.64645L8.44039 0.853553C8.75537 0.53857 8.53229 0 8.08684 0H0.501052Z" fill="#CCE7D7" /> </svg> </a> <ul class="footer-submenu"> <li class="footer-submenu-item"> <a href="https://seonova.ru/aboutus/"> О компании </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/cases/"> Кейсы </a> </li> <li class="footer-submenu-item"> <a href="https://seonova.ru/blog/"> Блог </a> </li> <li class="footer-submenu-item"> <a href=""> Вакансии </a> </li> <li class="footer-submenu-item"> <a href=""> Партнерская программа </a> </li> </ul> </li> </ul> </nav> </div> <div class="footer-bottom"> <div class="footer-bottom__contacts"> <a href="mailto:info@seonova.ru" class="contact-email footer-contact__item"> <img src="https://seonova.ru/wp-content/uploads/2026/07/footer-email.svg" alt="" class="header-email__icon footer-contact__img"> <span class="header-email__text">info@seonova.ru</span> </a> <div class="header-socials"> <a rel="nofollow noopener" target="_blank" href="https://t.me/seonovachat" class="footer-contact__item" title="Telegram: @SeonovaChat"> <img src="https://seonova.ru/wp-content/uploads/2026/07/footer-tg.svg" alt="" class="footer-contact__img"> <span>Telegram: @SeonovaChat</span> </a> </div> </div> <div class="footer-bootom__docs"> <a class="footer-left-bottom__link" href="#"> Карта сайта </a> <a class="footer-left-bottom__link" href="/privacypolicy/"> Политика конфиденциальности </a> <a class="footer-left-bottom__link footer-privacy" href="/publichnaya-oferta/"> Публичная оферта </a> </div> </div> </div> <!-- MOBILE FOOTER --> </footer> <!-- куки --> <div class="coockie"> <div class='container'> <div class="coockie-container mob-col"> <div class="coockie-text"> Мы используем cookie и сервисы веб-аналитики для улучшения работы сайта. Продолжая использование сайта, вы соглашаетесь с обработкой данных в соответствии с <a target="_blank" href="/privacypolicy/">Политикой обработки персональных данных</a> </div> <button class="coockie-btn hero-btn btn-radius no-transform"> Принять </button> </div> </div> </div> <!-- куки --> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/seonova/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://seonova.ru/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}} </script> <script type="module"> /*! This file is auto-generated */ var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); //# sourceURL=https://seonova.ru/wp-includes/js/wp-emoji-loader.min.js </script> </body> </html>