Что входит в Technical SEO?
Вопрос
Какие технические аспекты сайта относятся к SEO (robots.txt, sitemap, canonical, structured data) и почему способ рендеринга (SSR/SSG против чистого CSR) критически влияет на индексацию?
Короткий ответ
Technical SEO — это настройка инфраструктуры сайта так, чтобы поисковые боты могли эффективно его обходить и корректно интерпретировать: robots.txt управляет доступом бота, sitemap.xml подсказывает список URL, canonical устраняет дубли, structured data (JSON-LD) явно описывает тип контента. Отдельно стоит способ рендеринга — SPA без SSR/SSG отдаёт боту почти пустой HTML, что ухудшает и замедляет индексацию по сравнению с SSR/SSG-подходом, который использует, например, Nuxt.
Подробный ответ
robots.txt — текстовый файл в корне домена, который указывает ботам, какие разделы сайта не нужно обходить (например, админку, страницы поиска с дублирующимся контентом, тестовые окружения). Важно: robots.txt запрещает обход, а не индексацию — если на закрытую в robots.txt страницу ведут внешние ссылки, она всё равно может попасть в индекс (просто без содержимого). Для гарантированного исключения из индекса нужен meta robots noindex или HTTP-заголовок X-Robots-Tag.
sitemap.xml — XML-файл со списком URL сайта, датами обновления и приоритетами. Не гарантирует индексацию, но ускоряет обнаружение новых/изменённых страниц, особенно на крупных или редко перелинкованных сайтах. Указывается в robots.txt через Sitemap: и/или добавляется в Google Search Console.
canonical (<link rel="canonical">) — указывает "основную" версию страницы, когда один и тот же контент доступен по нескольким URL (фильтры каталога, UTM-метки, http vs https, с www и без). Без canonical поисковик может распылить ранжирующий вес между дублями или сам выбрать "не ту" версию.
Structured data (JSON-LD / schema.org) — явная машиночитаемая разметка типа контента (статья, товар, отзыв, FAQ, хлебные крошки), встраиваемая в <script type="application/ld+json">. Не влияет на позиции напрямую, но открывает доступ к rich results — расширенным сниппетам (звёзды рейтинга, цена, FAQ-раскрывашки), которые заметно увеличивают CTR.
SSR/SSG против CSR — критический момент technical SEO для современных JS-фреймворков:
- В чистом CSR (Client-Side Rendering) сервер отдаёт почти пустой
<div id="app"></div>, а весь контент рендерится в браузере после загрузки и выполнения JS. Googlebot технически умеет выполнять JS (двухфазный краулинг: сначала HTML, затем рендеринг очередью через WRS), но это медленнее, требует больше ресурсов от бота и не гарантирует, что каждый бот (не только Google) сможет корректно дождаться рендера. - SSR (Server-Side Rendering) рендерит HTML на сервере при каждом запросе — бот получает полностью готовый контент сразу, без выполнения JS.
- SSG (Static Site Generation) генерирует готовый HTML на этапе сборки — максимально быстрая отдача и индексация, подходит для контента, не меняющегося при каждом запросе.
Nuxt по умолчанию использует SSR (или гибридный nuxt generate для SSG), что снимает с разработчика необходимость решать эту проблему вручную, в отличие от "голого" SPA на Vue/React без соответствующей настройки.
Пример
# robots.txt
User-agent: *
Disallow: /admin/
Disallow: /search
Allow: /
Sitemap: https://example.com/sitemap.xml
<!-- canonical: у товара есть версии с UTM-метками и сортировкой,
но каноничной должна считаться "чистая" версия -->
<link rel="canonical" href="https://shop.example.com/nike-air-max" />
<!-- JSON-LD: структурированные данные для товара -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Nike Air Max 90",
"image": "https://shop.example.com/img/air-max-90.jpg",
"offers": {
"@type": "Offer",
"priceCurrency": "RUB",
"price": "12990",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
}
}
</script>
// Nuxt Content: пример sitemap.xml через nuxt-simple-sitemap / @nuxtjs/sitemap
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxtjs/sitemap'],
site: {
url: 'https://example.com'
}
})
Дополнительные вопросы
- В чём разница между
robots.txt Disallowиmeta robots noindex? - Как Googlebot рендерит JavaScript и почему это не решает проблему CSR полностью?
- Когда лучше использовать SSG вместо SSR с точки зрения SEO и производительности?