Технический SEO для RU-сайтов: robots, sitemap, hreflang, Core Web Vitals и Schema.org
Технический SEO на RU-сайте — это не три таблицы из чек-листа. Это robots.txt с директивой
Clean-param, которой нет у Google, sitemap, который Яндекс больше не принимает для языковых версий, hreflang по ISO 3166-2:RU с city-granularity, Core Web Vitals, которые у Google имеют цифры, а у Яндекса — категории, и Schema.org со специфичными для Яндекса расширениями. Ниже — канонические правила 2026 года по каждой из этих осей.
robots.txt: точка входа для обоих роботов, но директивы разные
Файл должен лежать в корне сайта, отвечать HTTP 200 и не превышать 500 КБ — это требование Яндекса и фактический предел Google. Encoding — ASCII: кириллица в Disallow/Allow либо URL-encoded, либо через Punycode для доменов (xn--…). Google чуть лояльнее к UTF-8 в комментариях, но полагаться на это не стоит.
Главное отличие в директивах — Яндекс поддерживает Clean-param, Google нет. Директива говорит Яндекс-роботу, что GET-параметр не меняет контент и не должен индексироваться как отдельный URL. Это инструмент, без которого граф ссылок дробится на дубли:
# partial — фрагмент robots.txt для e-commerce с UGC-метками
User-agent: *
Disallow: /admin/
Disallow: /cart
Allow: /
Clean-param: utm_source&utm_medium&utm_campaign /
Clean-param: ref /
Clean-param: sort /
Sitemap: https://example.ru/sitemap.xml
Google эти Clean-param просто игнорирует — для него дубль-параметры должны закрываться через rel="canonical" на странице или через noindex в мета-теге. Поэтому в RU-проекте закрытие UTM-меток требует двух механизмов: Clean-param для Яндекса, canonical для Google.
Robots meta (name="robots" content="noindex,nofollow") работает у обоих движков одинаково. Google дополнительно понимает data-nosnippet для точечного контроля сниппета, Яндекс — нет.
Sitemap: цифры одинаковые, но Яндекс больше не принимает локали
Протокол един — sitemaps.org 0.9. Оба движка принимают до 50 000 URL на файл и 50 МБ uncompressed, длину URL до 2048 символов, UTF-8, кириллицу как raw, так и URL-encoded. Sitemap index рекомендуется обоими.
Важное расхождение, которое ломает много RU-проектов: Яндекс с 2024-2025 больше не поддерживает sitemap для языковых версий. Разметка RU/EN/DE через <loc>-элементы с <xhtml:link rel="alternate" hreflang="…"> Яндексом игнорируется. Для Яндекса языковые версии — только через <link rel="alternate" hreflang> в HTML каждой страницы. Google принимает оба канала.
lastmod и priority Google трактует как hints (может учитывать, может проигнорировать). Яндекс читает их буквальнее — lastmod влияет на краулинговый бюджет.
Для больших RU-сайтов канонический паттерн — sitemap index, который линкует на обычные sitemap-файлы по разделам (товары отдельно, статьи отдельно, категории отдельно). Это не специфичное для Яндекса правило, это протокол.
hreflang: RU-подзоны с city-level granularity
Каноническая RU-локализация строится на ISO 639-1 для языка (одна буква ru) и ISO 3166-1 Alpha-2 для региона (RU, BY, KZ, UA). Яндекс дополнительно поддерживает ISO 3166-2:RU для city-level гранулярности — ru-MOW (Москва), ru-SPE (Санкт-Петербург), ru-NVS (Новосибирск). Google эту гранулярность принимает, но не делает на ней ранжирования.
Разметка hreflang выглядит так:
// partial — фрагмент <head> страницы; для RU-проекта с подзонами
<link rel="alternate" hreflang="ru" href="https://example.ru/" />
<link rel="alternate" hreflang="ru-BY" href="https://example.by/" />
<link rel="alternate" hreflang="ru-KZ" href="https://example.kz/" />
<link rel="alternate" hreflang="ru-UA" href="https://example.com.ua/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Bilateral confirmation — обязательное требование обеих систем: если на example.ru/ стоит hreflang на example.by/, то и на example.by/ должен стоять обратный hreflang на example.ru/. Без парности разметка игнорируется.
Выбор топологии под RU-проект:
TLD : example.ru (отдельный домен)
Subdomain : ru.example.com (поддомен основного домена)
Subfolder : example.com/ru/ (папка основного домена)
| Топология | Yandex | Когда выбирать | |
|---|---|---|---|
example.ru (ccTLD) | Native RU SERP, явный геотаргетинг | Native RU через геотаргетинг | .ru / .рф для коммерции, региональные ccTLD для локального рынка |
ru.example.com (subdomain) | Per-locale через Вебмастер | Per-locale через Search Console | Информационный контент под локальный рынок без отдельного юрлица |
example.com/ru/ (subfolder) | Через hreflang + Вебмастер | Через hreflang + Search Console | Один сайт, многоязычный, без отдельных сертификатов |
Для .рф — это кириллический ccTLD, Яндекс трактует его как native RU и исторически даёт bias к RU-SERP, Google обрабатывает как обычный ccTLD.
Core Web Vitals: где у Google цифры, у Яндекса — категории
Google публикует фиксированные пороги (проверено 2025-12-18):
- LCP (Largest Contentful Paint): < 2.5s
- INP (Interaction to Next Paint): < 200ms
- CLS (Cumulative Layout Shift): < 0.1
Это 75-й перцентиль реальных пользователей, а не синтетический тест. Метрика собирается через Chrome User Experience Report (CrUX) и доступна в Search Console → Core Web Vitals. Попадание в «good» влияет на ранжирование в Google и на «good page experience» group, но не отменяет необходимости качественного контента.
Яндекс не публикует числовых порогов. В Вебмастере выставляются категории «Скорость» и «Удобство», которые заполняются по эвристике VIFL/SIM (внутренние метрики) плюс поведенческие факторы после рендера. Попадание в «зелёную» категорию — рабочая цель, но прямой формулы перевода Google-метрик в Яндекс-категории нет.
Cross-engine hygiene:
- HTTPS + HSTS для коммерции (без этого ни Google, ни Яндекс не дадут нормального ранжирования в e-commerce).
- Mobile-friendly baseline (responsive design или dynamic serving).
- Cookie banners в соответствии с 152-ФЗ для RU-аудитории.
JavaScript rendering: opt-in у Яндекса, всегда у Google
Яндекс управляет рендерингом JS в Вебмастере → Индексирование → Рендеринг JavaScript:
At the bot's discretion (по умолчанию)
Allow (всегда рендерить)
Disallow (никогда не рендерить)
SSR или pre-rendering — повод переключить в Disallow, чтобы не расходовать серверные ресурсы Яндекса впустую и не замедлять индексацию. Для client-only SPA оставляют At the bot's discretion или переключают в Allow.
Яндекс-специфический протокол YandexRotorSettings — это waiter-сигнал для delayed-load JS-страниц:
// partial — фрагмент; ожидание отложенной загрузки контента для Яндекс-бота
window.YandexRotorSettings = {
WaiterEnabled: true,
IsLoaded: true,
IsError: false,
FailOnTimeout: false,
NoJsRedirectsToMain: false,
};
Google такого протокола не имеет — у него evergreen Chromium с implicit waits. Оптимизация под YandexRotor имеет смысл только для Яндекса.
Structured data: Schema.org для RU
Schema.org работает на обоих движках, но с разной поверхностью расширенных сниппетов. Канонические типы для RU-сайта:
Article / NewsArticle / BlogPosting
Google Search Central требует для Top Stories Carousel: author (Person/Organization) с author.name и author.url, datePublished и dateModified (ISO 8601 с timezone), headline, image (URL-массив, ≥50 000 px суммарно, aspect 16:9 / 4:3 / 1:1). Яндекс читает ту же разметку и использует для собственного расширения «Быстрый ответ».
BreadcrumbList
BreadcrumbList с ListItem элементами (position, name, item). Оба движка рендерят SERP-хлебные крошки из этой разметки.
Organization со специфичным для Яндекса sameAs
Яндекс рекомендует в sameAs указывать не только стандартные соцсети, но и VK, OK, Telegram — это улучшает трастовость для RU-сегмента:
// partial — фрагмент JSON-LD для Organization; RU-specific sameAs
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example LLC",
"url": "https://example.ru/",
"logo": "https://example.ru/logo.png",
"sameAs": [
"https://vk.com/example_official",
"https://ok.ru/example",
"https://t.me/example_official",
"https://www.youtube.com/@example"
],
"contactPoint": [{
"@type": "ContactPoint",
"telephone": "+7-495-123-45-67",
"contactType": "customer service",
"areaServed": "RU",
"availableLanguage": ["Russian"]
}]
}
Google принимает sameAs с Wikidata / официальными профилями, но для RU-сегмента VK/OK/Telegram важнее, чем Wikipedia-ссылки.
LocalBusiness с RU-адресацией
LocalBusiness требует address (PostalAddress с addressLocality и addressRegion по ISO 3166-2:RU), geo (GeoCoordinates), openingHoursSpecification, telephone в +7 E.164. Для Яндекса критически важен geo — без него Яндекс.Карты не подтягивают организацию.
FAQPage
Google в 2023 году сильно сузил eligibility для FAQ-расширенного сниппета (в основном снят с SERP), но разметка остаётся полезной для AI-citation candidate pages — генеративный SERP и Google AI Overviews подтягивают структурированный FAQ-текст. Яндекс сохраняет полноценный расширенный сниппет для FAQ.
Review / AggregateRating
Google в октябре 2023 ввёл ограничения на self-serve отзывы — Review разметка собственного сайта больше не показывается в виде review snippet для first-party. Яндекс этого ограничения не имеет и продолжает использовать AggregateRating в коммерческих SERP.
Mobile-first и Turbo: что ушло
Mobile-first indexing: Google полностью перешёл на MFI для всех сайтов к 2024 году. Яндекс держит mobile-friendly как вторичный сигнал — desktop-краул сохранён как fallback, Вебмастер всё ещё показывает отдельный «Mobile-friendly» toggle.
Турбо-страницы (Turbo) Яндекса официально закрыты в конце 2024 — начале 2025. Новые сайты не должны их внедрять. Старые реализации — cleanup debt: Турбо-страницы не индексируются как обычные, ломают аналитику, конфликтуют с mobile-first логикой. Наличие Turbo в проекте — технический долг, не фича.
AMP сохраняется только для новостных издателей (Top Stories). Для коммерции и контент-сайтов AMP мёртв с 2023 года.
Когда это не работает
- SPA без SSR для RU-сайта в e-commerce —
At the bot's discretionу Яндекса не гарантирует рендеринг, а без рендера контент не индексируется. SPA с товарами без SSR или pre-rendering не попадает в SERP. - hreflang на ccTLD без контент-различий — Google рассматривает это как «манипуляцию геотаргетингом», если страницы
example.ruиexample.com/ru/идентичны по контенту. Каждая локаль должна иметь свою цену, адрес, правила — не только переключатель языка. - JSON-LD без видимого контента — если разметка обещает рейтинг 4.8, а на странице отзывов нет, поисковик применяет manual action. Schema.org работает только в паре с реальным контентом.
- Sitemap index без файлов — sitemap index, ссылающийся на 404-е sitemap.xml, не штрафуется прямо, но девальвирует доверие crawler-а к сайту. Проверка через Яндекс.Вебмастер → Файлы Sitemap и Search Console → Sitemap.
- E-commerce на JS-фреймворке без Schema.org — без
Product+Offerтеряется Product rich result в обоих движках. На 10 000 SKU без автоматической генерации JSON-LD это много потерянного SERP-пространства.
Откуда это
Эта статья — техническая часть цикла про RU-SEO: Title и Meta Description в RU и EN, On-page структура: H1, заголовки, анкоры, alt-text, этот материал, и завершающая аналитика Яндекс vs Google в RU: 18 деталей, которые реально отличаются. Все цифры и директивы взяты из документации Яндекс.Вебмастера, Google Search Central, sitemaps.org и Schema.org. Проверка источников: 2025-12-18 по Core Web Vitals (обновление Google), 2026-07-19 по всему остальному.
Дисклеймер
Это сводный разбор технического SEO для RU-сайтов на 2026 год, не «полный чек-лист на все случаи жизни». Нет исчерпывающего покрытия Schema.org-типов (только основные для RU), нет разбора платной выдачи, нет JS-фреймворк-specific рекомендаций. Все директивы и пороги — по первоисточникам; поведение поисковиков меняется от апдейта к апдейту, поэтому проверяйте даты рядом с каждой ссылкой. AI-assisted подготовка по умолчанию (disclosure: ai-assisted-yes).
Первоисточники
- Яндекс.Вебмастер — Using robots.txt: https://yandex.com/support/webmaster/en/controlling-robot/robots-txt
- Яндекс.Вебмастер — Sitemap file: https://yandex.com/support/webmaster/en/controlling-robot/sitemap
- Яндекс.Вебмастер — Indexing with JavaScript (β): https://yandex.com/support/webmaster/en/yandex-indexing/rendering
- Яндекс.Вебмастер — Localized pages (hreflang): https://yandex.com/support/webmaster/en/yandex-indexing/locale-pages
- Google Search Central — Core Web Vitals (RU): https://developers.google.com/search/docs/appearance/core-web-vitals?hl=ru
- Google Search Central — Mobile-first indexing: https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing?hl=ru
- Google Search Central — Multiregional / multilingual (RU): https://developers.google.com/search/docs/specialty/international?hl=ru
- Google Search Central — Structured Data / Article (RU): https://developers.google.com/search/docs/appearance/structured-data/article?hl=ru
- Google Search Central — Spam policies (RU): https://developers.google.com/search/docs/essentials/spam-policies?hl=ru
- Schema.org Article: https://schema.org/Article
- Sitemaps.org protocol: https://www.sitemaps.org/protocol.html
- ISO 3166-2:RU subdivision codes: https://en.wikipedia.org/wiki/ISO_3166-2:RU