SEO на Astro по шагам: статический или серверный рендеринг, теги head, карта сайта, hreflang, изображения, JSON-LD и редиректы, сверено с документацией.

На этой странице
Коротко
Astro входит в число самых дружелюбных к SEO веб-фреймворков: он заранее рендерит страницы в чистый HTML и не отправляет в браузер JavaScript, если вы сами об этом не попросите. Google и краулеры ИИ-ассистентов получают полный контент уже при первом запросе. Но SEO за вас Astro не сделает: заголовки, мета-описания, канонические адреса, hreflang, структурированные данные и редиректы добавляете вы сами, в основном в общем компоненте head и через официальную интеграцию карты сайта.
Хотите узнать больше? Спросите
Короткий тест
Подходит ли вам SEO и с чего начать?
Sorank подходит под ваши ответы
Попробуйте его 3 дня на своём сайте и узнайте, где вы находитесь в Google, ChatGPT и других ИИ.
Попробовать 3 дня бесплатно3 дня бесплатно, потом вы можете остановиться в любой момент. Гарантия результата или возврата денег 90 дней.
SEO на Astro означает превратить этот чистый HTML в страницы, которые ранжируются. Руководство Google по основам SEO для JavaScript объясняет, что сайты на JavaScript обрабатываются в три этапа (сканирование, рендеринг, индексирование), и утверждает, что серверный рендеринг или предварительный рендеринг по-прежнему отличная идея, ведь не все боты умеют выполнять JavaScript. Astro по умолчанию стартует именно с этой позиции. Это руководство разбирает всё остальное, настройку за настройкой, и каждое поведение мы сверили с официальной документацией Astro. К слову, сайт sorank.com, который вы сейчас читаете, работает на Astro.
Да, с технической стороны. Astro рендерит компоненты в HTML во время сборки и убирает JavaScript, который фреймворки вроде React или Vue обычно отправляют в браузер. Так вы избегаете классических проблем из нашего руководства по SEO для JavaScript: пустых HTML-оболочек, контента, который появляется только после рендеринга, ссылок, не являющихся настоящими тегами-якорями. Нет и ловушек маршрутизации одностраничного приложения: каждый маршрут Astro это настоящий URL со своим HTML-файлом.
То, чего Astro не делает, не менее важно. Нет встроенного SEO-плагина, автоматического мета-описания, автоматического тега canonical и структурированных данных. Таблица разделяет то, что вы получаете бесплатно, и то, что придётся построить.
| Элемент SEO | Что даёт Astro | Что добавляете вы |
|---|---|---|
| Сканируемый HTML | Предварительно отрендеренный HTML по умолчанию | Ничего, если контент не рендерится только на клиенте |
| Заголовок и мета-описание | head, которым вы управляете в каждом шаблоне | Общий SEO-компонент, который заполняет каждая страница |
| Тег canonical | Astro.site и Astro.url для сборки абсолютных URL | Сам тег link с единым правилом завершающего слеша |
| XML-карта сайта | Официальная интеграция @astrojs/sitemap | Установить, задать опцию site, отфильтровать закрытые страницы |
| hreflang | Маршрутизация i18n и опция i18n в карте сайта | Ссылки alternate в head каждой страницы |
| Изображения | Компоненты Image и Picture, оптимизирующие файлы | Описательные alt-тексты, подходящие размеры |
| Структурированные данные | Ничего специального | Скрипты JSON-LD для каждого типа страниц |
| Редиректы | Опция redirects в конфигурации | Настоящие 301 на стороне хостинга для статических сборок |
Документация Astro о рендеринге по запросу однозначна: по умолчанию страницы, маршруты и эндпоинты API заранее рендерятся при сборке как статические страницы. Для SEO статический вывод это самый надёжный вариант по умолчанию: каждый URL представляет собой готовый HTML-файл, отдаваемый через CDN, быстрый и одинаковый для любого посетителя и любого бота.
Рендеринг по запросу (на сервере) требует адаптера для вашего хостинга (например, Node, Netlify, Vercel или Cloudflare). Затем вы исключаете отдельный маршрут из предварительного рендеринга через export const prerender = false или переводите весь проект на output: 'server' и возвращаете статические страницы по одной. Оба режима выдают полный HTML, так что Google видит одно и то же. Различия в другом:
Практическое правило: маркетинговые страницы, статьи блога и документацию оставляйте статическими, а по запросу рендерьте только маршруты с живыми данными. Документация Astro советует то же самое: оставаться в статическом режиме по умолчанию, пока большинству страниц не понадобится рендеринг по запросу.
Создайте один SEO-компонент (его часто называют BaseHead или Seo) и подключите его в head каждого шаблона. Он принимает заголовок, описание, необязательное изображение и необязательный флаг noindex и выводит:
Сначала задайте опцию site в astro.config.mjs: от неё зависят canonical, карта сайта и теги соцсетей. Затем выберите правило trailingSlash ('always' или 'never') и придерживайтесь его, чтобы /blog/post и /blog/post/ никогда не конкурировали как две версии одной страницы. Убирайте параметры запроса из canonical, чтобы метки отслеживания не порождали дубли.
Совет
Если ваши статьи хранятся в content collections, сделайте заголовок и описание обязательными полями в схеме коллекции. Тогда сборка упадёт, если автор забудет мета-описание, вместо того чтобы отправить в Google пустой сниппет.
Используйте официальную интеграцию, описанную на странице @astrojs/sitemap. Команда npx astro add sitemap устанавливает её и добавляет в конфигурацию. Интеграция требует опцию site и при сборке записывает файл sitemap-index.xml, который ссылается на пронумерованные файлы (sitemap-0.xml и следующие на больших сайтах). Каждый файл по умолчанию вмещает до 45 000 записей, это значение задаёт опция entryLimit. Если формат для вас новый, наша статья глоссария о XML-карте сайта объясняет, что Google с ней делает.
Для SEO важны три настройки:
Внимание
В документации сказано, что интеграция не может генерировать записи карты сайта для динамических маршрутов в режиме SSR. Если страницы товаров или статей рендерятся по запросу, их не будет в карте, пока вы не отрендерите их заранее или не добавите вручную.
Для robots.txt на большинстве сайтов достаточно статического файла в папке public. Если его содержимое различается на тестовом и боевом окружении, лучше генерировать его из эндпоинта (src/pages/robots.txt.ts). В обоих случаях добавьте строку Sitemap со ссылкой на sitemap-index.xml и перед запуском проверьте результат валидатором robots.txt. Тем же приёмом создаётся файл llms.txt; наше руководство о том, как установить файл llms.txt, описывает его содержимое.
Встроенная маршрутизация i18n в Astro решает задачу URL. В конфигурации вы объявляете defaultLocale и список locales и выбираете, получает ли префикс язык по умолчанию (prefixDefaultLocale). Вспомогательные функции вроде getRelativeLocaleUrl строят локализованные ссылки, а Astro.currentLocale сообщает каждой странице её язык.
Руководство по маршрутизации не касается тегов hreflang в head, поэтому заложите их написание в SEO-компонент: для каждой страницы по одной ссылке alternate на языковую версию плюс x-default, всё в виде абсолютных URL, и каждая версия должна перечислять все остальные (обратные ссылки). Генерация из того же списка языков, что и маршрутизация, защищает от самой частой ошибки: альтернативы, указывающей на несуществующую страницу. Чтобы проверить логику на нескольких адресах, наш генератор hreflang выдаёт полный набор тегов для страницы. Затем включите опцию i18n в карте сайта как второй сигнал.
Скорость это область, где Astro выигрывает больше всего, и это видно по Core Web Vitals. Руководство Astro по изображениям описывает компонент Image из astro:assets: он оптимизирует локальные изображения, конвертирует их формат, добавляет ленивую загрузку и асинхронное декодирование и определяет размеры изображения, чтобы избежать Cumulative Layout Shift. Атрибут alt в нём обязателен, что закрепляет базовое правило SEO для изображений. Компонент Picture идёт дальше и отдаёт AVIF или WebP с запасным форматом.
Две привычки завершают картину. Храните изображения, которые нужно оптимизировать, в src (файлы из public отдаются как есть, без обработки). И не ставьте ленивую загрузку главному изображению вверху страницы: загружайте его сразу, чтобы оно не задерживало Largest Contentful Paint.
Архитектура островов держит JavaScript под контролем. Компонент остаётся статическим HTML, пока вы не добавите клиентскую директиву: client:load гидрирует его сразу, client:idle, когда браузер свободен, client:visible, только когда он попадает в зону видимости. Оставить client:load лишь для того, что должно реагировать мгновенно (меню, корзина), это самый простой способ защитить Interaction to Next Paint. Серверные острова (server:defer) подгружают персонализированный блок после закешированной страницы, не замедляя основной контент.
Важно знать
Остров откладывает только свою интерактивность, а не текст, если компонент сначала рендерится на сервере. Контент, который подгружается в браузере уже после загрузки, это другой случай: краулеры, не выполняющие JavaScript, в том числе многие краулеры ИИ, его не увидят.
В Astro нет функции для schema, и это даёт вам полный контроль. Соберите JavaScript-объект для каждого типа страниц (Article, Product, Organization, BreadcrumbList, FAQPage) и выведите его в теге script с типом application/ld+json, используя директиву set:html и JSON.stringify, чтобы JSON не экранировался. Заполняйте его теми же данными frontmatter или коллекции, что и видимую страницу: тогда разметка всегда совпадает с тем, что видят пользователи, а этого требуют правила Google о разметке schema.
Чтобы набросать JSON для нового типа страниц, наш бесплатный генератор schema даст корректный стартовый блок, который вы превратите в шаблон. После каждого изменения шаблона проверяйте выборку собранных страниц в инструменте проверки расширенных результатов Google.
Переезд с WordPress или Next.js самый рискованный момент для сайта на Astro. Сохраните каждый URL с трафиком или обратными ссылками, а остальные по одному свяжите с ближайшим аналогом постоянными редиректами, как описано в нашем руководстве по SEO-редиректам.
Конфигурация Astro принимает объект redirects, сопоставляющий старые пути с новыми. С адаптером они становятся настоящими HTTP-редиректами. При чисто статической сборке Astro вместо этого записывает HTML-страницу с meta refresh: Google по ней переходит, но считает её более слабым сигналом, чем серверный 301. Для статического сайта объявляйте редиректы в формате вашего хостинга (файл _redirects на Netlify или Cloudflare Pages, файл vercel.json на Vercel), чтобы краулеры получали настоящий 301.
Чтобы вас цитировали ChatGPT, Perplexity или Gemini, сначала нужно быть читаемым. Многие краулеры ИИ забирают сырой HTML, не выполняя JavaScript, поэтому сайт, который отдаёт весь текст уже в первом ответе, как Astro по умолчанию, снимает барьер, который всё ещё есть у сайтов с клиентским рендерингом. Чёткие подзаголовки, абзацы, начинающиеся с ответа, структурированные данные и файл llms.txt затем делают каждую страницу удобнее для цитирования.
После запуска измеряйте, а не гадайте. Дашборд GEO и SEO в Sorank объединяет данные Search Console и визиты из ИИ-ассистентов, чтобы вы видели, удерживает ли новый сайт позиции.

Техническое качество окупается, только когда есть контент для ранжирования. Генератор статей для блога от Sorank пишет и публикует статьи, оптимизированные для Google и ИИ-ассистентов, и подключается через webhook к сайту на собственном движке, например к проекту на Astro.
Astro по умолчанию даёт быстрый сканируемый HTML; позиции по-прежнему зависят от тегов head, карты сайта, hreflang, структурированных данных и редиректов, которые добавляете вы. Сначала настройте общий SEO-компонент и карту сайта, а перед запуском пройдитесь по таблице выше.
Нет. В Astro нет официального универсального SEO-плагина: заголовок, мета-описание, canonical и теги соцсетей пишутся в общем компоненте head. Карту сайта обеспечивает официальная интеграция @astrojs/sitemap. Существуют пакеты сообщества, но небольшой собственный компонент легко поддерживать, и он полностью под вашим контролем.
Оба умеют выдавать полностью отрендеренный HTML, поэтому Google хорошо индексирует любой из них. Astro по умолчанию отправляет гораздо меньше JavaScript, что обычно делает контентные сайты быстрее и помогает Core Web Vitals. Next.js лучше подходит для сильно интерактивных приложений; для блогов, корпоративных сайтов и документации Astro проще с точки зрения SEO.
Да. Страница, отрендеренная по запросу, тоже возвращает Googlebot полный HTML, точно так же, как предварительно отрендеренная. Следить нужно за временем ответа сервера, которое влияет на скорость загрузки, и за интеграцией карты сайта, которая не включает динамические маршруты в серверном режиме, пока вы не добавите их сами.
ОНИ ПОПРОБОВАЛИ SORANK ДО ВАС
