Руководство по SEO для React: почему клиентский рендеринг тормозит индексирование, когда выбирать SSR или пререндеринг, как задать метатеги в React 19 и остаться видимым для ИИ.

На этой странице
Коротко
React-сайт может ранжироваться в Google, но стандартное одностраничное приложение отдает почти пустой HTML-файл и показывает контент только с помощью JavaScript. Это задерживает индексирование и скрывает страницу от большинства краулеров ИИ. Надежное решение: отдавать HTML с сервера, то есть пререндерить статические страницы при сборке или использовать фреймворк с серверным рендерингом (Next.js, React Router). Затем задайте каждому URL уникальные заголовок, описание и canonical, используйте настоящие ссылки и корректные коды ответа и проверяйте, что получают боты.
Хотите узнать больше? Спросите
Короткий тест
Подходит ли вам SEO и с чего начать?
Sorank подходит под ваши ответы
Попробуйте его 3 дня на своём сайте и узнайте, где вы находитесь в Google, ChatGPT и других ИИ.
Попробовать 3 дня бесплатно3 дня бесплатно, потом вы можете остановиться в любой момент. Гарантия результата или возврата денег 90 дней.
SEO для React означает работу над тем, чтобы React-приложение было доступно для сканирования, индексирования и понимания поисковыми системами и ИИ-ассистентами. Сам React нейтрален: проблемы возникают, когда все рендерится в браузере. Google подтверждает в основах SEO для JavaScript, что обрабатывает JavaScript-приложения в три этапа (сканирование, рендеринг, индексирование) и что рендеринг на сервере или предварительный рендеринг «по-прежнему отличная идея, потому что ускоряет сайт для пользователей и роботов, а JavaScript умеют выполнять не все боты».
React-приложение, созданное как одностраничное, отдает HTML-файл, в котором почти ничего нет, кроме пустого корневого div и тега script. Браузер загружает JavaScript, выполняет его и собирает страницу. Робот, читающий только HTML, не видит ничего для индексирования: ни заголовков, ни текста, ни ссылок.
Googlebot выполняет JavaScript, но на отдельном этапе: страница сканируется, попадает в очередь на рендеринг, рендерится в Chromium без интерфейса, и только после этого используются отрендеренные ссылки и контент. Каждый лишний этап дает шанс на сбой (ошибка скрипта, заблокированный API, превышение времени ожидания) и добавляет задержку, прежде чем новые страницы появятся в поиске. Наше руководство по SEO для JavaScript описывает этот процесс, а статья об индексировании в Google объясняет, как ускорить индексацию страниц.
Другие боты менее терпеливы. Анализ Vercel от декабря 2024 года, The rise of the AI crawler, показал, что «ни один из крупных краулеров ИИ в настоящее время не рендерит JavaScript», и назвал GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot и PerplexityBot. Страница React с клиентским рендерингом невидима для ChatGPT, Claude и Perplexity, даже если Google ее проиндексировал.
Команда React теперь рекомендует начинать новые приложения с фреймворка. Прекращая поддержку Create React App 14 февраля 2025 года, она написала в анонсе, что «серверный рендеринг может улучшить SEO», а также повышает производительность, сокращая объем JavaScript, который нужно загрузить до показа контента. Варианты от самого слабого до самого сильного для поиска:
| Подход | Что получают боты | Оценка для SEO | Типичные инструменты |
|---|---|---|---|
| Клиентский рендеринг (SPA) | Пустой HTML, контент после JavaScript | Слабо: индексирование с задержкой, невидимость для краулеров ИИ | Vite + React, старые проекты на Create React App |
| Динамический рендеринг | Пререндеренный HTML только для ботов | Временное решение, Google его не рекомендует | Сервисы пререндеринга, прокси с браузером без интерфейса |
| Статический пререндеринг при сборке | Полный HTML для каждого известного URL | Очень хорошо для редко меняющегося контента | Пререндеринг в React Router, генераторы статических сайтов, статический экспорт Next.js |
| Серверный рендеринг | Полный HTML на каждый запрос, затем гидратация | Лучший вариант для больших или часто обновляемых сайтов | Next.js, React Router (режим фреймворка, бывший Remix) |
О динамическом рендеринге документация Google говорит прямо: он «был временным решением, а не долгосрочным», и вместо него Google рекомендует серверный рендеринг, статический рендеринг или гидратацию. Если вы выбираете фреймворк, наше руководство по SEO для Next.js подробно разбирает режимы рендеринга, Metadata API и карты сайта.
Если миграция невозможна, Google все равно может проиндексировать одностраничное приложение при соблюдении некоторых условий. Они перечислены в нашем руководстве по SEO для одностраничных приложений; остальная часть статьи относится к обоим случаям.
Начиная с React 19 (стабильная версия с 5 декабря 2024 года) компоненты могут напрямую рендерить теги title, meta и link, а React переносит их в head документа. В примечаниях к выпуску React 19 сказано, что эта встроенная поддержка работает «в приложениях только на клиенте, с потоковым SSR и с Server Components». До React 19 эту задачу решали библиотеки вроде react-helmet или react-helmet-async, и они по-прежнему полезны, чтобы переопределять значения по умолчанию для отдельных маршрутов.
function ProductPage({ product }) {
return (
<>
<title>{`${product.name} | Shop`}</title>
<meta name="description" content={product.summary} />
<link rel="canonical" href={`https://example.com/p/${product.slug}`} />
<h1>{product.name}</h1>
</>
)
}Три правила действуют при любом способе:
Внимание
В приложении, работающем только на клиенте, теги, отрендеренные React, появляются лишь после выполнения JavaScript. Google может прочитать их после рендеринга, а краулеры ИИ и большинство ботов предпросмотра соцсетей нет. Серверный рендеринг или пререндеринг помещает их в HTML-ответ для всех.
Google указывает, что «может обнаружить ваши ссылки, только если это HTML-элементы a с атрибутом href», и не советует использовать фрагменты URL для загрузки разного контента. Большинство проблем SEO в React связаны с деталями маршрутизации:
| Ошибка | Последствие | Решение |
|---|---|---|
| Навигация через onClick на div или кнопке | Google не находит ссылку для перехода | Использовать компонент Link маршрутизатора, который рендерит a с href |
| Хеш-маршруты (/#/products) | Для Google все страницы делят один URL | Использовать маршруты на основе History API (/products) с BrowserRouter или фреймворком |
| Экран «не найдено» со статусом 200 | «Ложная ошибка 404» в Search Console | Возвращать настоящий 404 с сервера или добавлять noindex через JavaScript в чистом SPA |
| Только клиентские редиректы | Медленные или пропущенные редиректы | Использовать серверные редиректы 301 или 308 для перенесенных страниц |
| Контент, загружаемый по клику или прокрутке | Текст никогда не рендерится для робота | Рендерить основной контент при загрузке; разбивать списки на страницы с настоящими URL |
| JavaScript или API заблокированы в robots.txt | Google рендерит пустую страницу | Разрешить скрипты и эндпоинты API, нужные странице |
Чтобы увидеть, что рендерит Google, откройте инструмент проверки URL в Search Console и посмотрите HTML проверенной страницы или прогоните ключевые шаблоны через проверку индексируемости.
В React нет встроенной карты сайта. Генерируйте sitemap.xml при сборке из маршрутов и данных (или функцией карты сайта во фреймворке), включайте только канонические URL с ответом 200 и укажите файл в robots.txt. Для небольшого статического сайта хватит генератора XML-карты сайта.
Структурированные данные подчиняются тому же правилу, что и метаданные: рендерьте скрипт JSON-LD вместе со страницей, из тех же данных, желательно на сервере. Google может прочитать JSON-LD, вставленный через JavaScript, после рендеринга, но разметка, которой нет в исходном HTML, отсутствует и для роботов, которые не рендерят страницы. Используйте Article для статей, Product для интернет-магазина, Organization на всем сайте и BreadcrumbList для глубоких страниц.
Совет
Выполните curl для URL страницы и найдите в выводе ее H1 и фразу из основного текста. Если их нет, Google, возможно, проиндексирует страницу после рендеринга, но краулеры ИИ ничего не увидят.
Большие JavaScript-бандлы ухудшают Core Web Vitals: браузер должен загрузить, разобрать и гидратировать код, прежде чем страница начнет реагировать, а это нагружает Largest Contentful Paint и Interaction to Next Paint, особенно на мобильных. В анонсе команды React о Create React App отмечается, что серверный рендеринг отправляет меньше JavaScript и полный HTML-документ, что ускоряет First Contentful Paint и может снизить INP. Практические рычаги: разделение кода по маршрутам через React.lazy, изображения с явными размерами, ленивая загрузка компонентов ниже первого экрана и аудит сторонних скриптов.
GEO (оптимизация для генеративных систем) начинается с доступа. Поскольку краулеры ИИ забирают исходный HTML, страница React должна отдавать текст, заголовки и JSON-LD без JavaScript, чтобы ее прочитали, пересказали и процитировали. Аудит доступности сайта для ИИ показывает, что эти боты получают с ваших страниц. Второе условие: контент, который стоит цитировать, то есть страницы, где каждый раздел отвечает на один вопрос, с источниками, цифрами и четкими определениями.
Эту контентную часть автоматизирует Sorank, наш продукт. Sorank: программа для SEO и GEO в режиме autopilot. Ее Генератор статей для блога пишет и публикует 20, 60 или 120 статей в месяц с источниками, внутренними ссылками и изображениями и подключается через webhook к сайтам на собственном стеке, например на React или Next.js. SEO Chat отвечает в формате диалога на вопросы о результатах вашего сайта в поиске.

Итог: отдавайте HTML с сервера, задайте каждому URL собственные заголовок, описание и canonical и используйте настоящие ссылки. Тогда React-сайт ранжируется как любой другой, а ИИ-ассистенты могут его прочитать. Чтобы регулярно наполнять такой сайт статьями для Google и ИИ, посмотрите тарифы Sorank: от 49 долларов в месяц и 3 дня бесплатного пробного периода.
Нет. React является библиотекой для интерфейсов, и SEO зависит от того, как рендерятся страницы. Одностраничное приложение с клиентским рендерингом отдает пустой HTML и полагается на этап рендеринга в Google, что задерживает индексирование и скрывает контент от краулеров ИИ. Тот же код React с серверным рендерингом или статическим пререндерингом ранжируется как обычный сайт.
Да. Googlebot выполняет JavaScript в актуальной версии Chromium и поэтому может индексировать контент, который React-приложение строит в браузере. Рендеринг происходит после сканирования и может задержаться или не удаться, если скрипты выдают ошибки или API заблокированы. Инструмент проверки URL в Search Console показывает отрендеренный HTML так, как его видит Google.
Для простых случаев нет. React 19 рендерит теги title, meta и link из любого компонента и переносит их в head документа. Библиотеки вроде react-helmet-async остаются полезными, когда нужно переопределять общие значения сайта для отдельных маршрутов или поддерживать старые версии React.
ОНИ ПОПРОБОВАЛИ SORANK ДО ВАС
