Сайт nasloy.ru несколько лет работал как React-приложение. Человеку это было незаметно, а роботам заметно: сервер отдавал почти пустую страницу, и текст появлялся только после выполнения JavaScript. Google с этим справлялся, хоть и с задержкой. Яндекс и роботы нейросетей — заметно хуже. В октябре 2026 года я перевёл сайт на статическую сборку Astro. Ниже — как был устроен переезд и что я проверял на каждом шаге.
Зачем переезжать, если сайт работает
Сайт работал, но три вещи мешали всё сильнее:
- Контент не в HTML. Роботы, которые не выполняют JavaScript, видели пустой каркас. Для сайта, который продаёт SEO и GEO, это неприемлемо.
- Каждая страница зависела от общего бандла. Правка одного текста требовала пересборки всего приложения.
- Скорость. Браузеру нужно было скачать и выполнить скрипты, прежде чем показать текст.
Статическая сборка решает все три проблемы. Каждая страница собирается в готовый HTML при публикации, интерактивные инструменты подгружают скрипты поверх уже показанного текста. Почему это важно для поиска, подробно разобрано в уроке «Рендеринг и доступность HTML».
Шаг 1. Инвентаризация: что вообще есть на сайте
Переезд начинается не с кода, а со списка. Я собрал все адреса старого сайта из трёх источников и сверил их между собой:
Тексты услуг, статьи, кейсы и уроки я вынес в отдельные файлы с данными, отделив их от шаблонов
| Источник | Что даёт | Что в нём не найти |
|---|---|---|
| Карта сайта старой версии | Официальный список страниц | Страницы, которые забыли туда добавить |
| Search Console и Вебмастер | Адреса, которые поисковики знают и показывают | Страницы без показов |
| Внешние ссылки | Адреса, на которые ссылаются другие сайты | Внутренние страницы без ссылок |
Получилось около 240 страниц: услуги, отраслевые страницы, блог, инструменты, исследования, кейсы, академия. Для каждого адреса я записал тип страницы и решение: переносится как есть, переносится с новым адресом или объединяется с другой страницей.
Шаг 2. Адреса не меняются без причины
Главное правило переезда: адрес страницы меняется только тогда, когда без этого нельзя. Каждый новый адрес — это редирект, переобход и несколько недель, пока поисковик переносит накопленные сигналы. Поэтому новая сборка сохранила прежнюю схему адресов: без слэша на конце, с теми же путями для услуг, блога и инструментов.
Там, где адрес всё же менялся, я ставил постоянный редирект 301 сразу на конечную страницу. Пример: одно большое исследование рынка раньше жило в блоге, а теперь переехало в раздел исследований. Старый адрес ведёт прямо на новый, без промежуточных шагов. Цепочка из двух–трёх редиректов работает, но каждый лишний шаг замедляет переобход.
Тексты услуг, статьи, кейсы и уроки я вынес в отдельные файлы с данными, отделив их от шаблонов. Новая сборка берёт тексты оттуда и раскладывает по шаблонам. Так перенос проверяется построчно: в старой и новой версии должен быть один и тот же текст, а вёрстка может отличаться.
Шаг 3. Проверка до выкладки
Перед заменой рабочего сайта новая сборка проходит проверку на сервере. Я проверял каждую страницу из карты сайта, а не выборку:
- каждый адрес из старой карты отвечает кодом 200 или ведёт редиректом на рабочую страницу;
- у каждой страницы есть title, description и ровно один заголовок H1;
- нет одинаковых title и description у разных страниц;
- canonical указывает на саму страницу, а не на главную;
- внутренние ссылки ведут на существующие страницы;
- основной текст есть в HTML без выполнения JavaScript;
- на ширине телефона страница не шире экрана.
Проверку делает скрипт, и занимает она минуты. Вручную такой объём просто не проверить: на десятой странице внимание уже расплывается.
Шаг 4. Выкладка, которая сама откатывается
Самый нервный момент переезда — замена рабочего сайта. Я сделал её так, чтобы ошибка не успела повредить:
- Новая сборка готовится рядом с рабочей, не трогая её.
- Рабочая версия сохраняется копией, а новая встаёт на её место за секунду.
- Сразу после замены скрипт проверяет ключевые адреса на живом сайте.
- Если хоть одна проверка не прошла, старая версия автоматически возвращается на место.
С тех пор так устроена каждая публикация на сайте, не только переезд. Каждая новая статья проходит тот же путь: сборка, проверка, замена, контрольная проверка.
Что нашлось после запуска
Даже при полной проверке после запуска нашлось то, что не попало в список. Через два дня я прогнал отдельный аудит живого сайта по всем адресам из карты.
| Что проверял | Результат |
|---|---|
| Код ответа всех страниц из sitemap | Все 200 |
| Битые внутренние ссылки | Не найдено |
| Дубли title и description | Не найдено |
| Битые изображения | 13 в 9 старых статьях блога — ссылки на файлы, которых не было и на старом сайте |
| Двойное экранирование символов | Подписи к иллюстрациям выводили «&» — ошибка шаблона |
Битые изображения достались по наследству: старое приложение просто не показывало ошибку, а статическая сборка честно вывела пустое место. Их я заменил иллюстрациями по теме, ошибку шаблона исправил для всех статей сразу.
Переезд не создаёт новые ошибки так часто, как вытаскивает на свет старые.
Чек-лист переезда
- Собрать все адреса старого сайта из карты, панелей вебмастеров и внешних ссылок.
- Для каждого адреса решить: переносится, меняется или объединяется.
- Сохранить схему адресов, если нет веской причины её менять.
- Для изменённых адресов поставить 301 сразу на конечную страницу.
- Перенести тексты как данные и сверить построчно.
- Проверить всю новую сборку скриптом до выкладки: коды, мета-теги, canonical, ссылки, текст в HTML.
- Выкладывать с копией старой версии и автоматическим откатом.
- Через 2–3 дня прогнать полный аудит живого сайта.
- В течение месяца следить за отчётами об индексации в Вебмастере и Search Console.
Ограничения
- Сайт переехал 24 октября 2026 года. Делать выводы о позициях и трафике пока рано: поисковикам нужно несколько недель на переобход. Итоги через месяц я опубликую отдельно.
- Это переезд личного сайта без корзины и личных кабинетов. У интернет-магазина появляются фильтры, остатки и личный кабинет, и переезд становится сложнее.
- Статическая сборка подходит не всем: если содержимое меняется каждую минуту, нужен серверный рендеринг.
Если вы планируете переезд или редизайн и боитесь потерять позиции, посмотрите, как я веду миграцию сайтов. Проверить редиректы и canonical на своём сайте можно в отдельном инструменте.